This is an example of BLE GATT Client, which receives broadcast data from BLE_Server_BME280 ( a GATT server) , then transfers values up to mbed Device Connector (cloud).

Please refer details about BLEClient_mbedDevConn below. https://github.com/soramame21/BLEClient_mbedDevConn

The location of required BLE GATT server, BLE_Server_BME280, is at here. https://developer.mbed.org/users/edamame22/code/BLE_Server_BME280/

Files at this revision

API Documentation at this revision

Comitter:
edamame22
Date:
Thu Apr 13 04:48:11 2017 +0000
Child:
1:8950e6a891df
Commit message:
Initial commit

Changed in this revision

LICENSE Show annotated file Show diff for this revision Revisions of this file
README.md Show annotated file Show diff for this revision Revisions of this file
apache-2.0.txt Show annotated file Show diff for this revision Revisions of this file
docs/img/ep_lookup.PNG Show annotated file Show diff for this revision Revisions of this file
docs/img/myImageBME280_Client.png Show annotated file Show diff for this revision Revisions of this file
docs/testing.md Show annotated file Show diff for this revision Revisions of this file
esp8266-driver.lib Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/FETCH_HEAD Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/HEAD Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/ORIG_HEAD Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/config Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/description Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/hooks/applypatch-msg.sample Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/hooks/commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/hooks/post-update.sample Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/hooks/pre-applypatch.sample Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/hooks/pre-commit.sample Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/hooks/pre-rebase.sample Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/hooks/prepare-commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/hooks/update.sample Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/index Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/info/exclude Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/logs/HEAD Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/logs/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/logs/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/objects/pack/pack-ffc69441a7c1a899a4c401d753b2150e8ad41b4b.idx Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/objects/pack/pack-ffc69441a7c1a899a4c401d753b2150e8ad41b4b.pack Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/packed-refs Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.git/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/.meta Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/ESP8266/ATParser/ATParser.cpp Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/ESP8266/ATParser/ATParser.h Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/ESP8266/ATParser/BufferedSerial/Buffer/MyBuffer.cpp Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/ESP8266/ATParser/BufferedSerial/Buffer/MyBuffer.h Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/ESP8266/ATParser/BufferedSerial/BufferedPrint.c Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/ESP8266/ATParser/BufferedSerial/BufferedSerial.cpp Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/ESP8266/ATParser/BufferedSerial/BufferedSerial.h Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/ESP8266/ESP8266.cpp Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/ESP8266/ESP8266.h Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/ESP8266Interface.cpp Show annotated file Show diff for this revision Revisions of this file
esp8266-driver/ESP8266Interface.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client.lib Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/FETCH_HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/ORIG_HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/config Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/description Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/hooks/applypatch-msg.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/hooks/commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/hooks/post-update.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/hooks/pre-applypatch.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/hooks/pre-commit.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/hooks/pre-rebase.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/hooks/prepare-commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/hooks/update.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/index Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/info/exclude Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/logs/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/logs/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/logs/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/objects/pack/pack-1cbd974d7b0794a233df1871a0746c72b56dea00.idx Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/objects/pack/pack-1cbd974d7b0794a233df1871a0746c72b56dea00.pack Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/packed-refs Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
mbed-client/.git/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/.gitignore Show annotated file Show diff for this revision Revisions of this file
mbed-client/.mbedignore Show annotated file Show diff for this revision Revisions of this file
mbed-client/.meta Show annotated file Show diff for this revision Revisions of this file
mbed-client/.msub Show annotated file Show diff for this revision Revisions of this file
mbed-client/.yotta_ignore Show annotated file Show diff for this revision Revisions of this file
mbed-client/DOXYGEN_FRONTPAGE.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/LICENSE Show annotated file Show diff for this revision Revisions of this file
mbed-client/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/README.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/config/linux.mk Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/Howto.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/Introduction.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/client_reg_dereg.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/data_types.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/dev_man_serv_enable.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/further-reading.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/index.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/info_reporting.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/known-issues-mbed-client1511.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/mbed_Client_Known_Issues_16_03.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/mbed_Client_Release_Note_16_03.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/porting-guide.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/docs/release-note-mbed-client-1511.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/doxygen/mbedclient_doxy Show annotated file Show diff for this revision Revisions of this file
mbed-client/get_sizes.sh Show annotated file Show diff for this revision Revisions of this file
mbed-client/include_dirs.mk Show annotated file Show diff for this revision Revisions of this file
mbed-client/junit_xsl.xslt Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic.lib Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/FETCH_HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/ORIG_HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/config Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/description Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/hooks/applypatch-msg.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/hooks/commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/hooks/post-update.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/hooks/pre-applypatch.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/hooks/pre-commit.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/hooks/pre-rebase.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/hooks/prepare-commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/hooks/update.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/index Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/info/exclude Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/logs/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/logs/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/logs/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/objects/pack/pack-825e8023c1881c41506bf63f535dd9a10f0419c1.idx Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/objects/pack/pack-825e8023c1881c41506bf63f535dd9a10f0419c1.pack Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/packed-refs Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.git/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/.mbedignore Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/LICENSE Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/Makefile.test Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/README.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/junit_xsl.xslt Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/mbed-client-classic/m2mconnectionhandlerpimpl.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/mbed-client-classic/m2mtimerpimpl.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/run_unit_tests_with_valgrind.sh Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/source/m2mconnectionhandler.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/source/m2mconnectionhandlerpimpl.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/source/m2mtimer.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/source/m2mtimerpimpl.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/MakefileWorker.mk Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/common/alltests.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/common/mbed.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerimpl_classic/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerimpl_classic/m2mconnectionhandlerimpl_classic_test.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerimpl_classic/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerimpl_classic/test_m2mconnectionhandlerimpl_classic.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerimpl_classic/test_m2mconnectionhandlerimpl_classic.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerpimpl_classic/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerpimpl_classic/m2mconnectionhandlerpimpl_classic_test.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerpimpl_classic/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerpimpl_classic/test_m2mconnectionhandlerpimpl_classic.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerpimpl_classic/test_m2mconnectionhandlerpimpl_classic.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/m2mtimer_linux_unit_tests Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/m2mtimertest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/test_m2mtimer.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/test_m2mtimer.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimerpimpl_classic/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimerpimpl_classic/m2mtimerpimpl_classic_test.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimerpimpl_classic/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimerpimpl_classic/test_m2mtimerpimpl_classic.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimerpimpl_classic/test_m2mtimerpimpl_classic.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/makefile_defines.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/eventOS_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/eventOS_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mbase_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mbase_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mconnectionhandlerpimpl_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mconnectionhandlerpimpl_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mconnectionsecurity_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mconnectionsecurity_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mobject_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mobject_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mresource_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mresource_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mresourceinstance_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mresourceinstance_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2msecurity_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2msecurity_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mstring_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mtimer_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mtimer_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mtimerpimpl_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mtimerpimpl_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/ns_hal_init_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/pal_network_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/pal_network_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/pal_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/pal_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-classic/xsl_script.sh Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls.lib Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/FETCH_HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/ORIG_HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/config Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/description Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/hooks/applypatch-msg.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/hooks/commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/hooks/post-update.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/hooks/pre-applypatch.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/hooks/pre-commit.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/hooks/pre-rebase.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/hooks/prepare-commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/hooks/update.sample Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/index Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/info/exclude Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/logs/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/logs/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/logs/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/objects/pack/pack-373e10a5e0fc313ed37fab29088810a90e4dd374.idx Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/objects/pack/pack-373e10a5e0fc313ed37fab29088810a90e4dd374.pack Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/packed-refs Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.git/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.gitignore Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/.mbedignore Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/LICENSE Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/README.md Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/apache-2.0.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/include_dirs.mk Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/junit_xsl.xslt Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/mbed-client-mbedtls/m2mconnectionsecuritypimpl.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/module.json Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/run_unit_tests_with_valgrind.sh Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/source/m2mconnectionsecurity.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/source/m2mconnectionsecuritypimpl.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/sources.mk Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/MakefileWorker.mk Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/CThunk.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/FunctionPointer.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/FunctionPointerBase.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/FunctionPointerBind.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/Ticker.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/alltests.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/ip6string.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/mbed.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/ns_list.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/ns_types.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sal/socket_api.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sal/socket_types.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/Socket.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/SocketAddr.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/UDPSocket.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/Socket.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/SocketAddr.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/TCPAsynch.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/TCPListener.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/TCPStream.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/UDPSocket.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/m2mconnectionsecurity_mbedtlstest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/test_m2mconnectionsecurity_mbedtls.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/test_m2mconnectionsecurity_mbedtls.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/m2mconnectionsecuritypimpl_mbedtlstest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/test_m2mconnectionsecuritypimpl_mbedtls.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/test_m2mconnectionsecuritypimpl_mbedtls.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/makefile_defines.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/common_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/common_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mbase_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mbase_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionhandler_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionhandler_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionsecurity_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionsecurity_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionsecuritypimpl_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionsecuritypimpl_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mobject_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mobject_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2msecurity_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2msecurity_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mstring_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mtimer_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mtimer_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/mbedtls_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/mbedtls_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/toolchain_rules.mk Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client-mbed-tls/xsl_script.sh Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/functionpointer.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mbase.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mblockmessage.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mconfig.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mconnectionhandler.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mconnectionobserver.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mconnectionsecurity.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mconstants.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mdevice.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mfirmware.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2minterface.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2minterfacefactory.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2minterfaceobserver.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mobject.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mobjectinstance.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mobservationhandler.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mreportobserver.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mresource.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mresourceinstance.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2msecurity.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mserver.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mstring.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mstringbuffer.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mstringbufferbase.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mtimer.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mtimerobserver.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed-client/m2mvector.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/mbed_lib.json Show annotated file Show diff for this revision Revisions of this file
mbed-client/mkdocs.yml Show annotated file Show diff for this revision Revisions of this file
mbed-client/module.json Show annotated file Show diff for this revision Revisions of this file
mbed-client/run_unit_tests.sh Show annotated file Show diff for this revision Revisions of this file
mbed-client/run_unit_tests_with_valgrind.sh Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/include/eventdata.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/include/m2minterfaceimpl.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/include/m2mnsdlinterface.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/include/m2mnsdlobserver.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/include/m2mreporthandler.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/include/m2mtlvdeserializer.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/include/m2mtlvserializer.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/include/nsdlaccesshelper.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/include/nsdllinker.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/include/smartpointer.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mbase.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mblockmessage.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mdevice.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mfirmware.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2minterfacefactory.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2minterfaceimpl.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mnsdlinterface.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mobject.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mobjectinstance.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mreporthandler.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mresource.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mresourceinstance.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2msecurity.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mserver.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mstring.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mstringbufferbase.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mtlvdeserializer.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/m2mtlvserializer.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/source/nsdlaccesshelper.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/sources.mk Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/helloworld-mbedclient/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/helloworld-mbedclient/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/helloworld-mbedclient/mbedclient.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/helloworld-mbedclient/mbedclient.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/helloworld-mbedclient/to_be_ported.c Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/lwm2mtestapplication/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/lwm2mtestapplication/cmd_commands.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/lwm2mtestapplication/cmd_commands.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/lwm2mtestapplication/cmd_lwm2m.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/lwm2mtestapplication/cmd_lwm2m.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/lwm2mtestapplication/generate_coverage.sh Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/lwm2mtestapplication/lwm2mtest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/lwm2mtestapplication/lwm2mtest.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/lwm2mtestapplication/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient-smokeTest/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient-smokeTest/security.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient-smokeTest/testconfig.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient-smokeTest/testconfig.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/CThunk.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/FunctionPointer.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/FunctionPointerBase.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/FunctionPointerBind.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/Ticker.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/mbed-net-socket-abstract/socket_api.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/mbed-net-socket-abstract/socket_types.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/mbed.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/sockets/Socket.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/sockets/SocketAddr.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/sockets/UDPSocket.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/sockets/v0/Socket.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/sockets/v0/SocketAddr.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/sockets/v0/TCPAsynch.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/sockets/v0/TCPListener.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/sockets/v0/TCPStream.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/common/sockets/v0/UDPSocket.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/includes.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mbase/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mbase/m2mbasetest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mbase/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mbase/test_m2mbase.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mbase/test_m2mbase.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mblockmessage/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mblockmessage/m2mblockmessagetest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mblockmessage/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mblockmessage/test_m2mblockmessage.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mblockmessage/test_m2mblockmessage.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mdevice/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mdevice/m2mdevicetest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mdevice/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mdevice/test_m2mdevice.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mdevice/test_m2mdevice.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mfirmware/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mfirmware/m2mfirmwaretest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mfirmware/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mfirmware/test_m2mfirmware.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mfirmware/test_m2mfirmware.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2minterfacefactory/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2minterfacefactory/m2minterfacefactorytest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2minterfacefactory/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2minterfacefactory/test_m2minterfacefactory.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2minterfacefactory/test_m2minterfacefactory.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2minterfaceimpl/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2minterfaceimpl/m2minterfaceimpltest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2minterfaceimpl/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2minterfaceimpl/test_m2minterfaceimpl.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2minterfaceimpl/test_m2minterfaceimpl.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mnsdlinterface/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mnsdlinterface/m2mnsdlinterfacetest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mnsdlinterface/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mnsdlinterface/test_m2mnsdlinterface.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mnsdlinterface/test_m2mnsdlinterface.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mobject/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mobject/m2mobjecttest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mobject/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mobject/test_m2mobject.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mobject/test_m2mobject.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mobjectinstance/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mobjectinstance/m2mobjectinstancetest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mobjectinstance/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mobjectinstance/test_m2mobjectinstance.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mobjectinstance/test_m2mobjectinstance.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mreporthandler/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mreporthandler/m2mreporthandlertest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mreporthandler/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mreporthandler/test_m2mreporthandler.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mreporthandler/test_m2mreporthandler.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mresource/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mresource/m2mresourcetest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mresource/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mresource/test_m2mresource.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mresource/test_m2mresource.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mresourceinstance/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mresourceinstance/m2mresourceinstancetest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mresourceinstance/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mresourceinstance/test_m2mresourceinstance.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mresourceinstance/test_m2mresourceinstance.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2msecurity/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2msecurity/m2msecuritytest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2msecurity/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2msecurity/test_m2msecurity.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2msecurity/test_m2msecurity.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mserver/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mserver/m2mservertest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mserver/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mserver/test_m2mserver.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mserver/test_m2mserver.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mstring/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mstring/m2mstringtest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mstring/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mstring/test_m2mstring.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mstring/test_m2mstring.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mstringbufferbase/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mstringbufferbase/m2mstringbufferbasetest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mstringbufferbase/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mstringbufferbase/test_m2mstringbufferbase.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mstringbufferbase/test_m2mstringbufferbase.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mtlvdeserializer/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mtlvdeserializer/m2mtlvdeserializertest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mtlvdeserializer/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mtlvdeserializer/test_m2mtlvdeserializer.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mtlvdeserializer/test_m2mtlvdeserializer.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mtlvdeserializer/test_m2mtlvserializer.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/m2mtlvdeserializer/test_m2mtlvserializer.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/nsdlaccesshelper/CMakeLists.txt Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/nsdlaccesshelper/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/nsdlaccesshelper/nsdlaccesshelpertest.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/nsdlaccesshelper/test_nsdlaccesshelper.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/nsdlaccesshelper/test_nsdlaccesshelper.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/common_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/common_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mbase_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mbase_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mblockmessage_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mblockmessage_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mconnectionhandler_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mconnectionhandler_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mconnectionsecurity_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mconnectionsecurity_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mdevice_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mdevice_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mfirmware_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mfirmware_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2minterfaceimpl_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2minterfaceimpl_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mnsdlinterface_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mnsdlinterface_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mobject_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mobject_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mobjectinstance_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mobjectinstance_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mreporthandler_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mreporthandler_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mresource_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mresource_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mresourceinstance_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mresourceinstance_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2msecurity_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2msecurity_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mserver_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mserver_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mstring_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mstringbufferbase_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mstringbufferbase_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mtimer_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mtimer_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mtlvdeserializer_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mtlvdeserializer_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mtlvserializer_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/m2mtlvserializer_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/nsdlaccesshelper_stub.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient/utest/stub/nsdlaccesshelper_stub.h Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient_linux/Makefile Show annotated file Show diff for this revision Revisions of this file
mbed-client/test/mbedclient_linux/main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-client/version_check.sh Show annotated file Show diff for this revision Revisions of this file
mbed-client/xsl_script.sh Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
mbed_app.json Show annotated file Show diff for this revision Revisions of this file
mbed_client_config.h Show annotated file Show diff for this revision Revisions of this file
mbed_config.h Show annotated file Show diff for this revision Revisions of this file
mbedtls_mbed_client_config.h Show annotated file Show diff for this revision Revisions of this file
pal.lib Show annotated file Show diff for this revision Revisions of this file
pal/.git/FETCH_HEAD Show annotated file Show diff for this revision Revisions of this file
pal/.git/HEAD Show annotated file Show diff for this revision Revisions of this file
pal/.git/ORIG_HEAD Show annotated file Show diff for this revision Revisions of this file
pal/.git/config Show annotated file Show diff for this revision Revisions of this file
pal/.git/description Show annotated file Show diff for this revision Revisions of this file
pal/.git/hooks/applypatch-msg.sample Show annotated file Show diff for this revision Revisions of this file
pal/.git/hooks/commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
pal/.git/hooks/post-update.sample Show annotated file Show diff for this revision Revisions of this file
pal/.git/hooks/pre-applypatch.sample Show annotated file Show diff for this revision Revisions of this file
pal/.git/hooks/pre-commit.sample Show annotated file Show diff for this revision Revisions of this file
pal/.git/hooks/pre-rebase.sample Show annotated file Show diff for this revision Revisions of this file
pal/.git/hooks/prepare-commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
pal/.git/hooks/update.sample Show annotated file Show diff for this revision Revisions of this file
pal/.git/index Show annotated file Show diff for this revision Revisions of this file
pal/.git/info/exclude Show annotated file Show diff for this revision Revisions of this file
pal/.git/logs/HEAD Show annotated file Show diff for this revision Revisions of this file
pal/.git/logs/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
pal/.git/logs/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
pal/.git/objects/pack/pack-3d2d08030cabc95d2e1deeec0dfd50d9910e18c1.idx Show annotated file Show diff for this revision Revisions of this file
pal/.git/objects/pack/pack-3d2d08030cabc95d2e1deeec0dfd50d9910e18c1.pack Show annotated file Show diff for this revision Revisions of this file
pal/.git/packed-refs Show annotated file Show diff for this revision Revisions of this file
pal/.git/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
pal/.git/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
pal/.gitignore Show annotated file Show diff for this revision Revisions of this file
pal/.mbedignore Show annotated file Show diff for this revision Revisions of this file
pal/Docs/PAL Porting Guide.pdf Show annotated file Show diff for this revision Revisions of this file
pal/Docs/PAL.chm Show annotated file Show diff for this revision Revisions of this file
pal/Docs/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Docs/ReleaseNotes/R1.0-release.md Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/annotated.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/arrowdown.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/arrowright.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/bc_s.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/bdwn.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/classes.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/closed.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d0/d51/pal__test__utils_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d0/d51/pal__test__utils_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d1/d99/pal__update__test__runner_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d1/dc4/pal__network_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d1/dee/pal__rtos__test__utils_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d2/d3a/pal__rtos__test__main___free_r_t_o_s_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d2/d47/pal__plat__update_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d2/d47/pal__plat__update_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d2/d87/pal__configuration_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d2/d87/pal__configuration_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d2/dab/struct__pal_const_buffer__t.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d3/d30/structthreads_argument.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d3/d44/pal__plat__update_8cpp.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d3/dab/pal__all__test__runner_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d3/dfb/pal__plat__network_8cpp.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d4/d01/pal__rtos_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d4/d01/pal__rtos_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d4/dc5/pal__plat__rtos_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d5/d2a/pal__socket__test_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d5/d59/pal__plat__rtos_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d5/d59/pal__plat__rtos_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d5/de2/pal__all__test_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d6/d71/pal__socket__test__main___free_r_t_o_s_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d6/dc2/pal__types_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d6/dc2/pal__types_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d7/d66/pal__init_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d8/d19/struct__pal_buffer__t.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d8/d5f/pal__socket__test__utils_8cpp.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d8/ddd/pal__update__test_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d9/d16/pal_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d9/d16/pal_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d9/d16/structpal_net_interface_info.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d9/d17/pal__network_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d9/d17/pal__network_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d9/d28/pal__rtos__test__utils_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d9/d28/pal__rtos__test__utils_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d9/d2c/pal__plat__network_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d9/d2c/pal__plat__network_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/da/d2d/pal__rtos__test_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/da/d64/pal__socket__test__main__mbedos_classic_8cpp.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/da/d7f/pal__update__test__main__mbed_o_s_8cpp.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/da/da9/pal__update_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/da/dfe/pal__errors_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/da/dfe/pal__errors_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/db/d42/structpal_socket_address.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/db/dcf/pal__macros_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/db/dcf/pal__macros_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dc/d2c/structtimer_argument.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dc/d89/pal__plat__socket__lwip_8cpp.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dc/da5/pal__socket__test__runner_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dd/d30/pal__all__test__main__mbed_o_s_8cpp.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dd/df6/pal__rtos__test__runner_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dd/df9/pal__update_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dd/df9/pal__update_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/de/d33/_free_r_t_o_s_config_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/de/d33/_free_r_t_o_s_config_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/de/d33/pal__rtos_8c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/de/dfc/structpal__time_val.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/df/d0d/struct__pal_image_header_deails__t.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/df/d2a/pal__socket__test__utils_8h.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/df/d2a/pal__socket__test__utils_8h_source.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/df/d48/structpal__thread_local_store.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_0a6b9d10733e8fa4306fa781def1f127.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_0bf78cffa0901bd3b5cb7be7888aabc9.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_13f791b89962c34a017839eda04eb72e.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_1460475e8e667d8c97e1be97dbcd2231.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_18cc01a76aedd55acdee1b7ef37dd546.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_1c5e63936b3e43504237da8820a7bc34.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_21bbc5adf7d2637a4cb8a3cee979c96f.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_352f9dac526e52874364d2b56bbb5ef5.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_37618a71d99bdfed5979e976980d5eec.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_5097254b22164c5ad71a4eec719a72ee.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_59e3d70b06141856a554dd7aab1293ae.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_5b516ef453fd36a0929ce414690fe335.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_74389ed8173ad57b461b9d623a1f3867.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_8a9a67948239eaee56ff05ba80ad2d3c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_a9ff65e3f848f462604f5439bae27718.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_b922272f3c09a4cbb928a2f2eda5adf8.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_c08386f3c1aee312ced83a5951d11ed6.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_ddf5611ee10e8b15ebe1664d2c043f4e.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_e0c4a7f8a7dec467104a1fe0064ec60f.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dir_f8e9a069a0807d5f7341f9bc5892e16f.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/doc.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/doxygen.css Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/doxygen.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/dynsections.js Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/files.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/folderclosed.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/folderopen.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/functions.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/functions_vars.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_a.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_b.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_c.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_d.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_defs.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_enum.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_eval.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_f.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_func.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_func_b.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_func_d.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_func_l.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_func_m.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_func_n.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_func_p.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_func_s.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_func_t.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_func_u.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_g.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_i.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_k.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_l.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_m.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_n.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_p.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_s.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_t.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_type.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_u.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_v.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_vars.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/globals_x.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/index.hhc Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/index.hhk Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/index.hhp Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/index.html Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/jquery.js Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/nav_f.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/nav_g.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/nav_h.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/open.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/splitbar.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/sync_off.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/sync_on.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/tab_a.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/tab_b.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/tab_h.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/tab_s.png Show annotated file Show diff for this revision Revisions of this file
pal/Docs/html/tabs.css Show annotated file Show diff for this revision Revisions of this file
pal/Examples/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Jenkinsfile Show annotated file Show diff for this revision Revisions of this file
pal/LICENSE Show annotated file Show diff for this revision Revisions of this file
pal/README.md Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Modules/Networking/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Modules/Networking/pal_network.c Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Modules/RTOS/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Modules/RTOS/pal_rtos.c Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Modules/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Modules/Update/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Services-API/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Services-API/pal.h Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Services-API/pal_configuration.h Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Services-API/pal_errors.h Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Services-API/pal_macros.h Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Services-API/pal_network.h Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Services-API/pal_rtos.h Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/Services-API/pal_types.h Show annotated file Show diff for this revision Revisions of this file
pal/Source/PAL-Impl/pal_init.c Show annotated file Show diff for this revision Revisions of this file
pal/Source/Port/Platform-API/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Source/Port/Platform-API/pal_plat_network.h Show annotated file Show diff for this revision Revisions of this file
pal/Source/Port/Platform-API/pal_plat_rtos.h Show annotated file Show diff for this revision Revisions of this file
pal/Source/Port/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Source/Port/Reference-Impl/.mbedignore Show annotated file Show diff for this revision Revisions of this file
pal/Source/Port/Reference-Impl/mbedOS/Networking/pal_plat_network.cpp Show annotated file Show diff for this revision Revisions of this file
pal/Source/Port/Reference-Impl/mbedOS/RTOS/pal_plat_rtos.c Show annotated file Show diff for this revision Revisions of this file
pal/Source/Port/Reference-Impl/mbedOS/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Test/BUILD_TEST_mbedOS.mk Show annotated file Show diff for this revision Revisions of this file
pal/Test/Common/pal_rtos_test_utils.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Common/pal_rtos_test_utils.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Common/pal_socket_test_utils.cpp Show annotated file Show diff for this revision Revisions of this file
pal/Test/Common/pal_socket_test_utils.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Common/pal_test_utils.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Test/Scripts/mbed.py Show annotated file Show diff for this revision Revisions of this file
pal/Test/Scripts/perform_test_mbedOS.py Show annotated file Show diff for this revision Revisions of this file
pal/Test/Scripts/pyinstall.sh Show annotated file Show diff for this revision Revisions of this file
pal/Test/Scripts/unity_to_junit.py Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unitest/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unitest/pal_all_test.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unitest/pal_all_test_main_mbedOS.cpp Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unitest/pal_all_test_runner.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unitest/pal_rtos_test.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unitest/pal_rtos_test_main_mbedOS.cpp Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unitest/pal_rtos_test_runner.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unitest/pal_socket_test.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unitest/pal_socket_test_main_mbedOS.cpp Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unitest/pal_socket_test_runner.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/.gitattributes Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/.gitignore Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/.settings/language.settings.xml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/.travis.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/README.md Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/colour_prompt.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/colour_reporter.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/generate_config.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/generate_module.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/generate_test_runner.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/parseOutput.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/stylize_as_junit.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/test_file_filter.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/type_sanitizer.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/unity_test_summary.py Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/unity_test_summary.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/auto/unity_to_junit.py Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/docs/UnityAssertionsReference.pdf Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/docs/UnityConfigurationGuide.pdf Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/docs/UnityGettingStartedGuide.pdf Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/docs/UnityHelperScriptsGuide.pdf Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/docs/license.txt Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_1/readme.txt Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_1/src/ProductionCode.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_1/src/ProductionCode.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_1/src/ProductionCode2.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_1/src/ProductionCode2.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_1/test/TestProductionCode.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_1/test/TestProductionCode2.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_2/readme.txt Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_2/src/ProductionCode.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_2/src/ProductionCode.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_2/src/ProductionCode2.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_2/src/ProductionCode2.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_2/test/TestProductionCode.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_2/test/TestProductionCode2.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_2/test/test_runners/all_tests.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/helper/UnityHelper.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/helper/UnityHelper.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/rakefile.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/rakefile_helper.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/readme.txt Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/src/ProductionCode.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/src/ProductionCode.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/src/ProductionCode2.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/src/ProductionCode2.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/target_gcc_32.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/test/TestProductionCode.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/example_3/test/TestProductionCode2.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/examples/unity_config.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/eclipse/error_parsers.txt Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/rakefile.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/rakefile_helper.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/readme.txt Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/src/unity_fixture.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/src/unity_fixture.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/src/unity_fixture_internals.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/src/unity_fixture_malloc_overrides.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/test/main/AllTests.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/test/template_fixture_tests.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/test/unity_fixture_Test.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/test/unity_fixture_TestRunner.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/test/unity_output_Spy.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/extras/fixture/test/unity_output_Spy.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/release/build.info Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/release/version.info Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/src/unity.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/src/unity.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/src/unity_internals.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_cmd.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_def.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_head1.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_head1.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_mock_cmd.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_mock_def.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_mock_head1.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_mock_head1.h Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_mock_new1.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_mock_new2.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_mock_param.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_mock_run1.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_mock_run2.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_mock_yaml.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_new1.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_new2.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_param.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_run1.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_run2.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/expectdata/testsample_yaml.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/rakefile Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/rakefile_helper.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/clang_file.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/clang_strict.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/gcc_32.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/gcc_64.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/gcc_auto_limits.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/gcc_auto_sizeof.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/gcc_auto_stdint.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/gcc_manual_math.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/hitech_picc18.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/iar_arm_v4.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/iar_arm_v5.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/iar_arm_v5_3.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/iar_cortexm3_v5.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/iar_msp430.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/targets/iar_sh2a_v6.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/testdata/mocksample.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/testdata/sample.yml Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/testdata/testsample.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/tests/test_generate_test_runner.rb Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/tests/testparameterized.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/Unity/test/tests/testunity.c Show annotated file Show diff for this revision Revisions of this file
pal/Test/all_tests.mk Show annotated file Show diff for this revision Revisions of this file
pal/Test/eclipseBuildDialog.png Show annotated file Show diff for this revision Revisions of this file
pal/Test/eclipseBuildDialog2.png Show annotated file Show diff for this revision Revisions of this file
pal/Test/make_platform.mk Show annotated file Show diff for this revision Revisions of this file
pal/Test/makefile Show annotated file Show diff for this revision Revisions of this file
pal/Utils/Scripts/Readme.md Show annotated file Show diff for this revision Revisions of this file
pal/apache-2.0.txt Show annotated file Show diff for this revision Revisions of this file
security.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG.lib Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/FETCH_HEAD Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/HEAD Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/ORIG_HEAD Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/config Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/description Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/hooks/applypatch-msg.sample Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/hooks/commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/hooks/post-update.sample Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/hooks/pre-applypatch.sample Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/hooks/pre-commit.sample Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/hooks/pre-rebase.sample Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/hooks/prepare-commit-msg.sample Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/hooks/update.sample Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/index Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/info/exclude Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/logs/HEAD Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/logs/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/logs/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/objects/pack/pack-d5afa65ddd4dbf1d37591242573f6f9dcb6778e1.idx Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/objects/pack/pack-d5afa65ddd4dbf1d37591242573f6f9dcb6778e1.pack Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/packed-refs Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/refs/heads/master Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.git/refs/remotes/origin/HEAD Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/.gitignore Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/module.json Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/BlueNRGDevice.cpp Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/BlueNRGDiscoveredCharacteristic.cpp Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/BlueNRGGap.cpp Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/BlueNRGGattClient.cpp Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/BlueNRGGattServer.cpp Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/ble_hci.c Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_gap_aci.c Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_gatt_aci.c Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_hal_aci.c Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_l2cap_aci.c Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_updater_aci.c Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_utils.c Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/bluenrg-hci/utils/ble_gp_timer.c Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/bluenrg-hci/utils/ble_list.c Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/bluenrg-hci/utils/ble_osal.c Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/platform/ble_clock.c Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/platform/btle.cpp Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/platform/stm32_bluenrg_ble.cpp Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/utils/ble_payload.cpp Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/source/utils/ble_utils.cpp Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/BlueNRGDevice.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/BlueNRGDiscoveredCharacteristic.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/BlueNRGGap.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/BlueNRGGattClient.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/BlueNRGGattServer.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_clock.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_compiler.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_debug.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_gp_timer.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_hal.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_hal_types.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_hci.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_hci_const.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_link_layer.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_list.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_osal.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_sm.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_status.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_aci.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_aci_const.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_gap.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_gap_aci.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_gatt_aci.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_gatt_server.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_hal_aci.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_l2cap_aci.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_updater_aci.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_utils.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/platform/btle.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/platform/stm32_bluenrg_ble.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/utils/ble_payload.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/utils/ble_utils.h Show annotated file Show diff for this revision Revisions of this file
shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/x_nucleo_idb0xa1_targets.h Show annotated file Show diff for this revision Revisions of this file
simpleclient.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LICENSE	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+Unless specifically indicated otherwise in a file, files are licensed
+under the Apache 2.0 license, as can be found in: apache-2.0.txt
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,210 @@
+# BLEClient_mbedDevConn
+
+This example includes 2 main features.
+* [**BLE GATT Client** - receiving sensor data on field](#ble-gatt-client-for-bme280)
+* [**mbed Client** - transferring sensor data up on cloud](#mbed-client-on-mbed-os)
+
+
+# BLE GATT Client for BME280
+
+The ``GattClient`` APIs are used to implement BLE GATT client. this feature communicates with another GATT server device.
+
+1. The GATT Server device - runs the application ``BLE_Server_BME280`` from [ here ](https://github.com/soramame21/BLE_Server_BME280), which broadcasts measured values of BME280 over BLE.
+1. The GATT Client device - runs the application ``BLEClient_mbedDevConn`` to receive broadcast data over BLE.
+
+Please note: The application ``BLEClient_mbedDevConn`` initiates a connection to all ble devices which advertise "BME280" as complete local name. By default, the application `BLE_Server_BME280` advertise "BME280" as complete local name. If you change the local name advertised by the application `BLE_Sever_BME280` you should reflect your change in this (GATT Client) application by changing the value of the constant `PEER_NAME` in `main.cpp`.
+
+# mbed Client on mbed OS
+
+The mbed Client working on mbed OS demonstrates how to register a device with mbed Device Connector, how to read a device/resource and how to deregister. If you are unfamiliar with mbed Device Connector, it is recommended that you read [the introduction to the data model](https://docs.mbed.com/docs/mbed-device-connector-web-interfaces/en/latest/#the-mbed-device-connector-data-model) first.
+
+The application:
+
+* Connects to network via Ethernet connection.
+* Registers with mbed Device Connector.
+* Gives mbed Device Connector access to its resources (read only).
+* Reads value from the sensor (BME280) & display the same using HTTP GET request.
+
+## Required hardware
+
+* K64F target platform .
+* ST BLE shield [X-NUCLEO-IDB05A1](http://www.st.com/ja/ecosystems/x-nucleo-idb05a1.html) running v7.2 or later firmware. [The latest firmware is at here]( https://developer.mbed.org/teams/ST/code/BlueNRG-MS-Stack-Updater/)
+* 1x micro-USB cable.
+* Ethernet cable and connection to the internet.
+
+## Required hardware patch on [X-NUCLEO-IDB05A1](http://www.st.com/ja/ecosystems/x-nucleo-idb05a1.html)
+Following hardware patch, which let it becomes fully Arduino compatible, is required to work with K64F. it is called "D13 patch" for enabling pin D13 to drive SPI clock. please read further [details at here](https://developer.mbed.org/teams/ST/code/X_NUCLEO_IDB0XA1/)
+
+* Removing zero resistor R4
+* Soldering zero resistor R6
+
+## Tested Target hardware configurations
+
+ * K64F (Ethernet)
+
+## Requirements for non-K64F boards
+
+*   This example requires TLS functionality to be enabled on mbed TLS.
+    On devices where hardware entropy is not present, TLS is disabled by default.
+    This would result in compile time failures or linking failures.
+
+    To learn why entropy is required, read the
+    [TLS Porting guide](https://docs.mbed.com/docs/mbed-os-handbook/en/5.2/advanced/tls_porting/).
+
+## Required software
+
+* [ARM mbed account](https://developer.mbed.org/account/login/?next=/).
+* [mbed-cli](https://github.com/ARMmbed/mbed-cli) - to build the example programs. To learn how to build mbed OS applications with mbed-cli, see [the user guide](https://github.com/ARMmbed/mbed-cli/blob/master/README.md).
+* [Serial port monitor](https://developer.mbed.org/handbook/SerialPC#host-interface-and-terminal-applications).
+* [mbed Device Connector account](https://connector.mbed.com/)
+
+## Application setup
+
+To configure the example application:
+
+1. [Select the connection type](#connection-type).
+1. [Set the client credentials](#client-credentials).
+1. [Change Ethernet settings](#ethernet-settings).
+1. [Set up an IP address](#ip-address-setup). This step is optional.
+1. [Change the socket type](#changing-socket-type). This step is optional.
+
+### Connection type
+
+The application uses Ethernet as the default connection type. To change the connection type, set one of them in `mbed_app.json`. For example to select ETHERNET.
+
+```json
+    "network-interface": {
+        "help": "options are ETHERNET,WIFI,MESH_LOWPAN_ND,MESH_THREAD.",
+        "value": "ETHERNET"
+    }
+```
+
+### Client credentials
+
+To register the application with the Connector service, you need to create and set the client side certificate.
+
+1. Go to [mbed Device Connector](https://connector.mbed.com) and log in with your mbed account.
+1. On mbed Device Connector, go to [My Devices > Security credentials](https://connector.mbed.com/#credentials) and click the **Get my device security credentials** to get new credentials for your device.
+1. Replace the contents in the `security.h` file of this project's directory with the content copied above.
+
+### Ethernet settings
+
+For running the example application using Ethernet, you need:
+
+- An Ethernet cable.
+- An Ethernet connection to the internet.
+
+### IP address setup
+
+This example uses IPv4 to communicate with the [mbed Device Connector Server](https://api.connector.mbed.com). The example program should automatically get an IPv4 address from the router when connected over Ethernet.
+
+If your network does not have DHCP enabled, you have to manually assign a static IP address to the board. We recommend having DHCP enabled to make everything run smoothly.
+
+### Changing socket type
+
+Your device can connect to mbed Device Connector via UDP or TCP binding mode. The default is UDP.
+
+To change the binding mode:
+
+1. In the `simpleclient.h` file, find the parameter `SOCKET_MODE`. The default is `M2MInterface::UDP`.
+1. To switch to TCP, change it to `M2MInterface::TCP`.
+1. Rebuild and flash the application.
+
+<span class="tips">**Tip:** The instructions in this document remain the same, irrespective of the socket mode you select.</span>
+
+## Building and running the example
+
+To build the example using mbed CLI:
+
+1. Open a command line tool and navigate to the project’s directory.
+
+2. Clone this repo.
+
+3. [Configure](#application-setup) the client application.
+
+4. To build the application, select the hardware board and build the toolchain using the command:
+
+    ```
+    mbed compile -m K64F -t ARM -c
+    ```
+
+    mbed CLI builds a binary file under the project’s `BUILD/` directory.
+
+5. Plug the Ethernet cable into the board if you are using Ethernet mode.
+
+6. Plug the micro-USB cable into the board. The board is listed as a mass-storage device.
+
+7. Drag the binary `BUILD/K64F/ARM/*.bin` to the board to flash the application.
+
+8. The board is automatically programmed with the new binary. A flashing LED on it indicates that it is still working. When the LED stops blinking, the board is ready to work.
+
+9. Build and install ``BLE_Server_BME280`` according to [instructions at here](https://github.com/soramame21/BLE_Server_BME280).
+
+10. Press the **Reset** button on K64F board flashed at Step 8 to run the program ``BLEClient_mbedDevConn``.
+
+11. For verification, continue to the [Monitoring the application](#monitoring-the-application) chapter.
+
+## Monitoring the application
+
+You need a terminal program to listen to the output through a serial port. You can download one, for example:
+
+* Tera Term / PuTTY for Windows.
+* CoolTerm for Mac OS X.
+* GNU Screen for Linux.
+
+To see the application's output:
+
+1. Check which serial port your device is connected to.
+1. Run a terminal program with the correct serial port and set the baud rate to 9600. For example, to use GNU Screen, run: ``screen /dev/tty.usbmodem1412 9600``.
+1. The application should start printing the measured value to the terminal.
+
+**Note:** ``BLEClient_mbedDevConn`` will not run properly if the ``BLE_Server_BME280`` application is not running on a second device. The terminal will show a few print statements, but you will not be able to see received data.
+
+
+After connecting, you should see messages about connecting to mbed Device Connector:
+
+```
+Connected to Network successfully
+IP address 10.128.4.46
+
+SOCKET_MODE : TCP
+Connecting to coap://api.connector.mbed.com:5684
+created bme280 instance now!!
+I'm inside BLE thread_init.....
+I'm inside BLE init Complete
+BLE Error startScan = 0
+inside main for client
+
+Registered object successfully!
+adv peerAddr[df 28 cb 9b 5a b8] rssi -60, isScanResponse 0, AdvertisementType 0
+Connected to BME280 now...
+ble.gattClient().launchServiceDiscovery = 0
+S type short UUID-181a attrs[12 255]
+  C UUID-2a6f valueAttr[14] props[0]
+ is_active[HUMIDITY] = true
+  C UUID-2a6d valueAttr[16] props[0]
+ is_active[PRESSURE] = true
+  C UUID-2a6e valueAttr[18] props[0]
+ is_active[TEMPERATURE] = true
+terminated SD for handle 2049
+Humidity  = 99.50%
+Pressure  = 995.0 hPa
+inside main for client
+Temperature  = 25.69 degC
+Humidity  = 36.00%
+Pressure  = 995.0 hPa
+Temperature  = 25.70 degC
+```
+<span class="notes">**Note:** Device name is the endpoint name you will need later on when [testing the application](https://github.com/ARMmbed/mbed-os-example-client#testing-the-application).</span>
+
+## Testing the application
+
+Please refer the [details at here](/docs/testing.md)
+
+
+## Overview
+![Overview of Demo](./docs/img/myImageBME280_Client.png)
+
+
+
+Please find the BLE GATT Server application under https://github.com/soramame21/BLE_Server_BME280 repo.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apache-2.0.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,56 @@
+
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+    You must give any other recipients of the Work or Derivative Works a copy of this License; and
+    You must cause any modified files to carry prominent notices stating that You changed the files; and
+    You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+    If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+    You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
\ No newline at end of file
Binary file docs/img/ep_lookup.PNG has changed
Binary file docs/img/myImageBME280_Client.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/testing.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+## Testing the application ``BLEClient_mbedDevConn``
+
+1. Flash the application.
+2. Verify that the registration succeeded. You should see `Registered object successfully!` printed to the serial port.
+3. On mbed Device Connector, go to [My devices > Connected devices](https://connector.mbed.com/#endpoints). Your device should be listed here.
+4. Go to [Device Connector > API Console](https://connector.mbed.com/#console).
+5. Click the **Endpoint directory lookups** drop down menu.
+![](/docs/img/ep_lookup.PNG)
+6. In the menu, click **GET** next to **Endpoint's resource representation**. Select your _endpoint_ and _resource-path_. For example, the _endpoint_ is the identifier of your endpoint that can be found in the `security.h` file as `MBED_ENDPOINT_NAME`. Choose `/3303/0/5700`as a resource path and click **TEST API**.
+7. The temperature value from BME280 is shown.
+
+<span class="tips">**Tip:** If you get an error, for example `Server Response: 410 (Gone)`, clear your browser's cache, log out, and log back in.</span>
+
+<span class="notes">**Note:** Only GET methods can be executed through [Device Connector > API Console](https://connector.mbed.com/#console). For other methods, check the [mbed Device Connector Quick Start](https://github.com/ARMmbed/mbed-connector-api-node-quickstart).
+
+### Application resources
+
+The application exposes three [resources](https://docs.mbed.com/docs/mbed-device-connector-web-interfaces/en/latest/#the-mbed-device-connector-data-model):
+
+1. `/3303/0/5700`- Temperature
+1. `/3304/0/5700`- Humidity
+1. `/3323/0/5700`- Pressure
+
+To learn how to get notifications when resource 1 changes, or how to use resources 2 and 3, read the [mbed Device Connector Quick Start](https://github.com/ARMmbed/mbed-connector-api-node-quickstart).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver.lib	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/esp8266-driver/#dc37b65ca877d969aa492f348626df6e1b0b1df0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/FETCH_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,3 @@
+4ed87bf7fe37d5ba0de6c4e78868f604a82f8ecb	not-for-merge	branch 'firmware-0.2' of https://github.com/ARMmbed/esp8266-driver
+abd45947366baae35035dc7850e9541be05ba05d	not-for-merge	branch 'firmware-2.0' of https://github.com/ARMmbed/esp8266-driver
+abd45947366baae35035dc7850e9541be05ba05d	not-for-merge	branch 'master' of https://github.com/ARMmbed/esp8266-driver
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+dc37b65ca877d969aa492f348626df6e1b0b1df0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/ORIG_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+abd45947366baae35035dc7850e9541be05ba05d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/config	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,11 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[remote "origin"]
+	fetch = +refs/heads/*:refs/remotes/origin/*
+	url = https://github.com/ARMmbed/esp8266-driver/
+[branch "master"]
+	remote = origin
+	merge = refs/heads/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/description	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/hooks/applypatch-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/hooks/commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/hooks/post-update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/hooks/pre-applypatch.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/hooks/pre-commit.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	echo "Error: Attempt to add a non-ascii file name."
+	echo
+	echo "This can cause problems if you want to work"
+	echo "with people on other platforms."
+	echo
+	echo "To be portable it is advisable to rename the file ..."
+	echo
+	echo "If you know what you are doing you can disable this"
+	echo "check using:"
+	echo
+	echo "  git config hooks.allownonascii true"
+	echo
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/hooks/pre-rebase.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/hooks/prepare-commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/hooks/update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
Binary file esp8266-driver/.git/index has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/info/exclude	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+.hg
+.git
+.svn
+.CVS
+.cvs
+*.orig
+.build
+.export
+.msub
+.meta
+.ctags*
+*.uvproj
+*.uvopt
+*.project
+*.cproject
+*.launch
+*.ewp
+*.eww
+Makefile
+Debug
+*.htm
+*.settings
+mbed_settings.py
+*.py[cod]
+# subrepo ignores
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/logs/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+0000000000000000000000000000000000000000 abd45947366baae35035dc7850e9541be05ba05d www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056521 +0000	clone: from https://github.com/ARMmbed/esp8266-driver/
+abd45947366baae35035dc7850e9541be05ba05d dc37b65ca877d969aa492f348626df6e1b0b1df0 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056521 +0000	checkout: moving from master to dc37b65ca877d969aa492f348626df6e1b0b1df0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/logs/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 abd45947366baae35035dc7850e9541be05ba05d www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056521 +0000	clone: from https://github.com/ARMmbed/esp8266-driver/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/logs/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 abd45947366baae35035dc7850e9541be05ba05d www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056521 +0000	clone: from https://github.com/ARMmbed/esp8266-driver/
Binary file esp8266-driver/.git/objects/pack/pack-ffc69441a7c1a899a4c401d753b2150e8ad41b4b.idx has changed
Binary file esp8266-driver/.git/objects/pack/pack-ffc69441a7c1a899a4c401d753b2150e8ad41b4b.pack has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/packed-refs	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,7 @@
+# pack-refs with: peeled 
+4ed87bf7fe37d5ba0de6c4e78868f604a82f8ecb refs/remotes/origin/firmware-0.2
+abd45947366baae35035dc7850e9541be05ba05d refs/remotes/origin/firmware-2.0
+abd45947366baae35035dc7850e9541be05ba05d refs/remotes/origin/master
+450cc128865ffb90b5cbfe5af193621644024fa7 refs/tags/v1.0
+29d63ae2ee0a233e2fbd9577cdddc7661bb783d1 refs/tags/v1.1
+4ed87bf7fe37d5ba0de6c4e78868f604a82f8ecb refs/tags/v1.2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+abd45947366baae35035dc7850e9541be05ba05d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.git/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+ref: refs/remotes/origin/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/.meta	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<root>
+  <node _type="integer" _key="update">1</node>
+</root>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/ESP8266/ATParser/ATParser.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,333 @@
+/* Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @section DESCRIPTION
+ *
+ * Parser for the AT command syntax
+ *
+ */
+
+#include "ATParser.h"
+#include "mbed_debug.h"
+
+
+// getc/putc handling with timeouts
+int ATParser::putc(char c)
+{
+    Timer timer;
+    timer.start();
+
+    while (true) {
+        if (_serial->writeable()) {
+            return _serial->putc(c);
+        }
+        if (timer.read_ms() > _timeout) {
+            return -1;
+        }
+    }
+}
+
+int ATParser::getc()
+{
+    Timer timer;
+    timer.start();
+
+    while (true) {
+        if (_serial->readable()) {
+            return _serial->getc();
+        }
+        if (timer.read_ms() > _timeout) {
+            return -1;
+        }
+    }
+}
+
+void ATParser::flush()
+{
+    while (_serial->readable()) {
+        _serial->getc();
+    }
+}
+
+
+// read/write handling with timeouts
+int ATParser::write(const char *data, int size)
+{
+    int i = 0;
+    for ( ; i < size; i++) {
+        if (putc(data[i]) < 0) {
+            return -1;
+        }
+    }
+    return i;
+}
+
+int ATParser::read(char *data, int size)
+{
+    int i = 0;
+    for ( ; i < size; i++) {
+        int c = getc();
+        if (c < 0) {
+            return -1;
+        }
+        data[i] = c;
+    }
+    return i;
+}
+
+
+// printf/scanf handling
+int ATParser::vprintf(const char *format, va_list args)
+{
+    if (vsprintf(_buffer, format, args) < 0) {
+        return false;
+    }
+    int i = 0;
+    for ( ; _buffer[i]; i++) {
+        if (putc(_buffer[i]) < 0) {
+            return -1;
+        }
+    }
+    return i;
+}
+
+int ATParser::vscanf(const char *format, va_list args)
+{
+    // Since format is const, we need to copy it into our buffer to
+    // add the line's null terminator and clobber value-matches with asterisks.
+    //
+    // We just use the beginning of the buffer to avoid unnecessary allocations.
+    int i = 0;
+    int offset = 0;
+
+    while (format[i]) {
+        if (format[i] == '%' && format[i+1] != '%' && format[i+1] != '*') {
+            _buffer[offset++] = '%';
+            _buffer[offset++] = '*';
+            i++;
+        } else {
+            _buffer[offset++] = format[i++];
+        }
+    }
+
+    // Scanf has very poor support for catching errors
+    // fortunately, we can abuse the %n specifier to determine
+    // if the entire string was matched.
+    _buffer[offset++] = '%';
+    _buffer[offset++] = 'n';
+    _buffer[offset++] = 0;
+
+    // To workaround scanf's lack of error reporting, we actually
+    // make two passes. One checks the validity with the modified
+    // format string that only stores the matched characters (%n).
+    // The other reads in the actual matched values.
+    //
+    // We keep trying the match until we succeed or some other error
+    // derails us.
+    int j = 0;
+
+    while (true) {
+        // Ran out of space
+        if (j+1 >= _buffer_size - offset) {
+            return false;
+        }
+        // Recieve next character
+        int c = getc();
+        if (c < 0) {
+            return -1;
+        }
+        _buffer[offset + j++] = c;
+        _buffer[offset + j] = 0;
+
+        // Check for match
+        int count = -1;
+        sscanf(_buffer+offset, _buffer, &count);
+
+        // We only succeed if all characters in the response are matched
+        if (count == j) {
+            // Store the found results
+            vsscanf(_buffer+offset, format, args);
+            return j;
+        }
+    }
+}
+
+
+// Command parsing with line handling
+bool ATParser::vsend(const char *command, va_list args)
+{
+    // Create and send command
+    if (vsprintf(_buffer, command, args) < 0) {
+        return false;
+    }
+    for (int i = 0; _buffer[i]; i++) {
+        if (putc(_buffer[i]) < 0) {
+            return false;
+        }
+    }
+
+    // Finish with newline
+    for (int i = 0; _delimiter[i]; i++) {
+        if (putc(_delimiter[i]) < 0) {
+            return false;
+        }
+    }
+
+    debug_if(dbg_on, "AT> %s\r\n", _buffer);
+    return true;
+}
+
+bool ATParser::vrecv(const char *response, va_list args)
+{
+    // Iterate through each line in the expected response
+    while (response[0]) {
+        // Since response is const, we need to copy it into our buffer to
+        // add the line's null terminator and clobber value-matches with asterisks.
+        //
+        // We just use the beginning of the buffer to avoid unnecessary allocations.
+        int i = 0;
+        int offset = 0;
+
+        while (response[i]) {
+            if (memcmp(&response[i+1-_delim_size], _delimiter, _delim_size) == 0) {
+                i++;
+                break;
+            } else if (response[i] == '%' && response[i+1] != '%' && response[i+1] != '*') {
+                _buffer[offset++] = '%';
+                _buffer[offset++] = '*';
+                i++;
+            } else {
+                _buffer[offset++] = response[i++];
+            }
+        }
+
+        // Scanf has very poor support for catching errors
+        // fortunately, we can abuse the %n specifier to determine
+        // if the entire string was matched.
+        _buffer[offset++] = '%';
+        _buffer[offset++] = 'n';
+        _buffer[offset++] = 0;
+
+        // To workaround scanf's lack of error reporting, we actually
+        // make two passes. One checks the validity with the modified
+        // format string that only stores the matched characters (%n).
+        // The other reads in the actual matched values.
+        //
+        // We keep trying the match until we succeed or some other error
+        // derails us.
+        int j = 0;
+
+        while (true) {
+            // Recieve next character
+            int c = getc();
+            if (c < 0) {
+                return false;
+            }
+            _buffer[offset + j++] = c;
+            _buffer[offset + j] = 0;
+
+            // Check for oob data
+            for (int k = 0; k < _oobs.size(); k++) {
+                if (j == _oobs[k].len && memcmp(
+                        _oobs[k].prefix, _buffer+offset, _oobs[k].len) == 0) {
+                    debug_if(dbg_on, "AT! %s\r\n", _oobs[k].prefix);
+                    _oobs[k].cb();
+
+                    // oob may have corrupted non-reentrant buffer,
+                    // so we need to set it up again
+                    return vrecv(response, args);
+                }
+            }
+
+            // Check for match
+            int count = -1;
+            sscanf(_buffer+offset, _buffer, &count);
+
+            // We only succeed if all characters in the response are matched
+            if (count == j) {
+                debug_if(dbg_on, "AT= %s\r\n", _buffer+offset);
+                // Reuse the front end of the buffer
+                memcpy(_buffer, response, i);
+                _buffer[i] = 0;
+
+                // Store the found results
+                vsscanf(_buffer+offset, _buffer, args);
+
+                // Jump to next line and continue parsing
+                response += i;
+                break;
+            }
+
+            // Clear the buffer when we hit a newline or ran out of space
+            // running out of space usually means we ran into binary data
+            if (j+1 >= _buffer_size - offset ||
+                strcmp(&_buffer[offset + j-_delim_size], _delimiter) == 0) {
+
+                debug_if(dbg_on, "AT< %s", _buffer+offset);
+                j = 0;
+            }
+        }
+    }
+
+    return true;
+}
+
+
+// Mapping to vararg functions
+int ATParser::printf(const char *format, ...)
+{
+    va_list args;
+    va_start(args, format);
+    int res = vprintf(format, args);
+    va_end(args);
+    return res;
+}
+
+int ATParser::scanf(const char *format, ...)
+{
+    va_list args;
+    va_start(args, format);
+    int res = vscanf(format, args);
+    va_end(args);
+    return res;
+}
+
+bool ATParser::send(const char *command, ...)
+{
+    va_list args;
+    va_start(args, command);
+    bool res = vsend(command, args);
+    va_end(args);
+    return res;
+}
+
+bool ATParser::recv(const char *response, ...)
+{
+    va_list args;
+    va_start(args, response);
+    bool res = vrecv(response, args);
+    va_end(args);
+    return res;
+}
+
+
+// oob registration
+void ATParser::oob(const char *prefix, Callback<void()> cb)
+{
+    struct oob oob;
+    oob.len = strlen(prefix);
+    oob.prefix = prefix;
+    oob.cb = cb;
+    _oobs.push_back(oob);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/ESP8266/ATParser/ATParser.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,232 @@
+/* Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @section DESCRIPTION
+ *
+ * Parser for the AT command syntax
+ *
+ */
+
+#include "mbed.h"
+#include <cstdarg>
+#include <vector>
+#include "BufferedSerial.h"
+#include "Callback.h"
+
+
+/**
+* Parser class for parsing AT commands
+*
+* Here are some examples:
+* @code
+* ATParser at = ATParser(serial, "\r\n");
+* int value;
+* char buffer[100];
+*
+* at.send("AT") && at.recv("OK");
+* at.send("AT+CWMODE=%d", 3) && at.recv("OK");
+* at.send("AT+CWMODE?") && at.recv("+CWMODE:%d\r\nOK", &value);
+* at.recv("+IPD,%d:", &value);
+* at.read(buffer, value);
+* at.recv("OK");
+* @endcode
+*/
+class ATParser
+{
+private:
+    // Serial information
+    BufferedSerial *_serial;
+    int _buffer_size;
+    char *_buffer;
+    int _timeout;
+
+    // Parsing information
+    const char *_delimiter;
+    int _delim_size;
+    bool dbg_on;
+
+    struct oob {
+        unsigned len;
+        const char *prefix;
+        mbed::Callback<void()> cb;
+    };
+    std::vector<oob> _oobs;
+
+public:
+    /**
+    * Constructor
+    *
+    * @param serial serial interface to use for AT commands
+    * @param buffer_size size of internal buffer for transaction
+    * @param timeout timeout of the connection
+    * @param delimiter string of characters to use as line delimiters
+    */
+    ATParser(BufferedSerial &serial, const char *delimiter = "\r\n", int buffer_size = 256, int timeout = 8000, bool debug = false) :
+        _serial(&serial),
+        _buffer_size(buffer_size) {
+        _buffer = new char[buffer_size];
+        setTimeout(timeout);
+        setDelimiter(delimiter);
+        debugOn(debug);
+    }
+
+    /**
+    * Destructor
+    */
+    ~ATParser() {
+        delete [] _buffer;
+    }
+
+    /**
+    * Allows timeout to be changed between commands
+    *
+    * @param timeout timeout of the connection
+    */
+    void setTimeout(int timeout) {
+        _timeout = timeout;
+    }
+
+    /**
+    * Sets string of characters to use as line delimiters
+    *
+    * @param delimiter string of characters to use as line delimiters
+    */
+    void setDelimiter(const char *delimiter) {
+        _delimiter = delimiter;
+        _delim_size = strlen(delimiter);
+    }
+    
+    /**
+    * Allows echo to be on or off
+    *
+    * @param echo 1 for echo and 0 turns it off
+    */
+    void debugOn(uint8_t on) {
+        dbg_on = (on) ? 1 : 0;
+    }
+
+    /**
+    * Sends an AT command
+    *
+    * Sends a formatted command using printf style formatting
+    * @see ::printf
+    *
+    * @param command printf-like format string of command to send which
+    *                is appended with the specified delimiter
+    * @param ... all printf-like arguments to insert into command
+    * @return true only if command is successfully sent
+    */
+    bool send(const char *command, ...);
+    bool vsend(const char *command, va_list args);
+
+    /**
+    * Recieve an AT response
+    *
+    * Recieves a formatted response using scanf style formatting
+    * @see ::scanf
+    *
+    * Responses are parsed line at a time using the specified delimiter.
+    * Any recieved data that does not match the response is ignored until
+    * a timeout occurs.
+    *
+    * @param response scanf-like format string of response to expect
+    * @param ... all scanf-like arguments to extract from response
+    * @return true only if response is successfully matched
+    */
+    bool recv(const char *response, ...);
+    bool vrecv(const char *response, va_list args);
+
+    /**
+    * Write a single byte to the underlying stream
+    *
+    * @param c The byte to write
+    * @return The byte that was written or -1 during a timeout
+    */
+    int putc(char c);
+
+    /**
+    * Get a single byte from the underlying stream
+    *
+    * @return The byte that was read or -1 during a timeout
+    */
+    int getc();
+
+    /**
+    * Write an array of bytes to the underlying stream
+    *
+    * @param data the array of bytes to write
+    * @param size number of bytes to write
+    * @return number of bytes written or -1 on failure
+    */
+    int write(const char *data, int size);
+
+    /**
+    * Read an array of bytes from the underlying stream
+    *
+    * @param data the destination for the read bytes
+    * @param size number of bytes to read
+    * @return number of bytes read or -1 on failure
+    */
+    int read(char *data, int size);
+
+    /**
+    * Direct printf to underlying stream
+    * @see ::printf
+    *
+    * @param format format string to pass to printf
+    * @param ... arguments to printf
+    * @return number of bytes written or -1 on failure
+    */
+    int printf(const char *format, ...);
+    int vprintf(const char *format, va_list args);
+
+    /**
+    * Direct scanf on underlying stream
+    * @see ::scanf
+    *
+    * @param format format string to pass to scanf
+    * @param ... arguments to scanf
+    * @return number of bytes read or -1 on failure
+    */
+    int scanf(const char *format, ...);
+    int vscanf(const char *format, va_list args);
+
+    /**
+    * Attach a callback for out-of-band data
+    * 
+    * @param prefix string on when to initiate callback
+    * @param func callback to call when string is read
+    * @note out-of-band data is only processed during a scanf call
+    */
+    void oob(const char *prefix, mbed::Callback<void()> func);
+
+    /**
+    * Attach a callback for out-of-band data
+    *
+    * @param prefix string on when to initiate callback
+    * @param obj pointer to object to call member function on
+    * @param method callback to call when string is read
+    * @note out-of-band data is only processed during a scanf call
+    */
+    template <typename T, typename M>
+    void oob(const char *prefix, T *obj, M method) {
+        return oob(prefix, mbed::Callback<void()>(obj, method));
+    }
+
+    /**
+    * Flushes the underlying stream
+    */
+    void flush();
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/ESP8266/ATParser/BufferedSerial/Buffer/MyBuffer.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,76 @@
+
+/**
+ * @file    Buffer.cpp
+ * @brief   Software Buffer - Templated Ring Buffer for most data types
+ * @author  sam grove
+ * @version 1.0
+ * @see     
+ *
+ * Copyright (c) 2013
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#include "MyBuffer.h"
+
+template <class T>
+MyBuffer<T>::MyBuffer(uint32_t size)
+{
+    _buf = new T [size];
+    _size = size;
+    clear();
+    
+    return;
+}
+
+template <class T>
+MyBuffer<T>::~MyBuffer()
+{
+    delete [] _buf;
+    
+    return;
+}
+
+template <class T>
+uint32_t MyBuffer<T>::getSize() 
+{ 
+    return this->_size; 
+}
+
+template <class T>
+void MyBuffer<T>::clear(void)
+{
+    _wloc = 0;
+    _rloc = 0;
+    memset(_buf, 0, _size);
+    
+    return;
+}
+
+template <class T>
+uint32_t MyBuffer<T>::peek(char c)
+{
+    return 1;
+}
+
+// make the linker aware of some possible types
+template class MyBuffer<uint8_t>;
+template class MyBuffer<int8_t>;
+template class MyBuffer<uint16_t>;
+template class MyBuffer<int16_t>;
+template class MyBuffer<uint32_t>;
+template class MyBuffer<int32_t>;
+template class MyBuffer<uint64_t>;
+template class MyBuffer<int64_t>;
+template class MyBuffer<char>;
+template class MyBuffer<wchar_t>;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/ESP8266/ATParser/BufferedSerial/Buffer/MyBuffer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,163 @@
+
+/**
+ * @file    Buffer.h
+ * @brief   Software Buffer - Templated Ring Buffer for most data types
+ * @author  sam grove
+ * @version 1.0
+ * @see     
+ *
+ * Copyright (c) 2013
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#ifndef MYBUFFER_H
+#define MYBUFFER_H
+
+#include <stdint.h>
+#include <string.h>
+
+/** A templated software ring buffer
+ *
+ * Example:
+ * @code
+ *  #include "mbed.h"
+ *  #include "MyBuffer.h"
+ *
+ *  MyBuffer <char> buf;
+ *
+ *  int main()
+ *  {
+ *      buf = 'a';
+ *      buf.put('b');
+ *      char *head = buf.head();
+ *      puts(head);
+ *
+ *      char whats_in_there[2] = {0};
+ *      int pos = 0;
+ *
+ *      while(buf.available())
+ *      {   
+ *          whats_in_there[pos++] = buf;
+ *      }
+ *      printf("%c %c\n", whats_in_there[0], whats_in_there[1]);
+ *      buf.clear();
+ *      error("done\n\n\n");
+ *  }
+ * @endcode
+ */
+
+template <typename T>
+class MyBuffer
+{
+private:
+    T   *_buf;
+    volatile uint32_t   _wloc;
+    volatile uint32_t   _rloc;
+    uint32_t            _size;
+
+public:
+    /** Create a Buffer and allocate memory for it
+     *  @param size The size of the buffer
+     */
+    MyBuffer(uint32_t size = 0x100);
+    
+    /** Get the size of the ring buffer
+     * @return the size of the ring buffer
+     */
+     uint32_t getSize();
+    
+    /** Destry a Buffer and release it's allocated memory
+     */
+    ~MyBuffer();
+    
+    /** Add a data element into the buffer
+     *  @param data Something to add to the buffer
+     */
+    void put(T data);
+    
+    /** Remove a data element from the buffer
+     *  @return Pull the oldest element from the buffer
+     */
+    T get(void);
+    
+    /** Get the address to the head of the buffer
+     *  @return The address of element 0 in the buffer
+     */
+    T *head(void);
+    
+    /** Reset the buffer to 0. Useful if using head() to parse packeted data
+     */
+    void clear(void);
+    
+    /** Determine if anything is readable in the buffer
+     *  @return 1 if something can be read, 0 otherwise
+     */
+    uint32_t available(void);
+    
+    /** Overloaded operator for writing to the buffer
+     *  @param data Something to put in the buffer
+     *  @return
+     */
+    MyBuffer &operator= (T data)
+    {
+        put(data);
+        return *this;
+    }
+    
+    /** Overloaded operator for reading from the buffer
+     *  @return Pull the oldest element from the buffer 
+     */  
+    operator int(void)
+    {
+        return get();
+    }
+    
+     uint32_t peek(char c);
+    
+};
+
+template <class T>
+inline void MyBuffer<T>::put(T data)
+{
+    _buf[_wloc++] = data;
+    _wloc %= (_size-1);
+    
+    return;
+}
+
+template <class T>
+inline T MyBuffer<T>::get(void)
+{
+    T data_pos = _buf[_rloc++];
+    _rloc %= (_size-1);
+    
+    return data_pos;
+}
+
+template <class T>
+inline T *MyBuffer<T>::head(void)
+{
+    T *data_pos = &_buf[0];
+    
+    return data_pos;
+}
+
+template <class T>
+inline uint32_t MyBuffer<T>::available(void)
+{
+    return (_wloc == _rloc) ? 0 : 1;
+}
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/ESP8266/ATParser/BufferedSerial/BufferedPrint.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2014-2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdarg.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "mbed_error.h"
+
+size_t BufferedSerialThunk(void *buf_serial, const void *s, size_t length);
+
+int BufferedPrintfC(void *stream, int size, const char* format, va_list arg)
+{
+    int r;
+    char buffer[512];
+    if (size >= 512) {
+        return -1;
+    }
+    memset(buffer, 0, size);
+    r = vsprintf(buffer, format, arg);
+    // this may not hit the heap but should alert the user anyways
+    if(r > (int32_t) size) {
+        error("%s %d buffer overwrite (max_buf_size: %d exceeded: %d)!\r\n", __FILE__, __LINE__, size, r);
+        return 0;
+    }
+    if ( r > 0 ) {
+        BufferedSerialThunk(stream, buffer, r);
+    }
+    return r;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/ESP8266/ATParser/BufferedSerial/BufferedSerial.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,166 @@
+/**
+ * @file    BufferedSerial.cpp
+ * @brief   Software Buffer - Extends mbed Serial functionallity adding irq driven TX and RX
+ * @author  sam grove
+ * @version 1.0
+ * @see
+ *
+ * Copyright (c) 2013
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "BufferedSerial.h"
+#include <stdarg.h>
+
+extern "C" int BufferedPrintfC(void *stream, int size, const char* format, va_list arg);
+
+BufferedSerial::BufferedSerial(PinName tx, PinName rx, uint32_t buf_size, uint32_t tx_multiple, const char* name)
+    : RawSerial(tx, rx) , _rxbuf(buf_size), _txbuf((uint32_t)(tx_multiple*buf_size))
+{
+    RawSerial::attach(this, &BufferedSerial::rxIrq, Serial::RxIrq);
+    this->_buf_size = buf_size;
+    this->_tx_multiple = tx_multiple;   
+    return;
+}
+
+BufferedSerial::~BufferedSerial(void)
+{
+    RawSerial::attach(NULL, RawSerial::RxIrq);
+    RawSerial::attach(NULL, RawSerial::TxIrq);
+
+    return;
+}
+
+int BufferedSerial::readable(void)
+{
+    return _rxbuf.available();  // note: look if things are in the buffer
+}
+
+int BufferedSerial::writeable(void)
+{
+    return 1;   // buffer allows overwriting by design, always true
+}
+
+int BufferedSerial::getc(void)
+{
+    return _rxbuf;
+}
+
+int BufferedSerial::putc(int c)
+{
+    _txbuf = (char)c;
+    BufferedSerial::prime();
+
+    return c;
+}
+
+int BufferedSerial::puts(const char *s)
+{
+    if (s != NULL) {
+        const char* ptr = s;
+    
+        while(*(ptr) != 0) {
+            _txbuf = *(ptr++);
+        }
+        _txbuf = '\n';  // done per puts definition
+        BufferedSerial::prime();
+    
+        return (ptr - s) + 1;
+    }
+    return 0;
+}
+
+extern "C" size_t BufferedSerialThunk(void *buf_serial, const void *s, size_t length)
+{
+    BufferedSerial *buffered_serial = (BufferedSerial *)buf_serial;
+    return buffered_serial->write(s, length);
+}
+
+int BufferedSerial::printf(const char* format, ...)
+{
+    va_list arg;
+    va_start(arg, format);
+    int r = BufferedPrintfC((void*)this, this->_buf_size, format, arg);
+    va_end(arg);
+    return r;
+}
+
+ssize_t BufferedSerial::write(const void *s, size_t length)
+{
+    if (s != NULL && length > 0) {
+        const char* ptr = (const char*)s;
+        const char* end = ptr + length;
+    
+        while (ptr != end) {
+            _txbuf = *(ptr++);
+        }
+        BufferedSerial::prime();
+    
+        return ptr - (const char*)s;
+    }
+    return 0;
+}
+
+
+void BufferedSerial::rxIrq(void)
+{
+    // read from the peripheral and make sure something is available
+    if(serial_readable(&_serial)) {
+        _rxbuf = serial_getc(&_serial); // if so load them into a buffer
+        // trigger callback if necessary
+        if (_cbs[RxIrq]) {
+            _cbs[RxIrq]();
+        }
+    }
+
+    return;
+}
+
+void BufferedSerial::txIrq(void)
+{
+    // see if there is room in the hardware fifo and if something is in the software fifo
+    while(serial_writable(&_serial)) {
+        if(_txbuf.available()) {
+            serial_putc(&_serial, (int)_txbuf.get());
+        } else {
+            // disable the TX interrupt when there is nothing left to send
+            RawSerial::attach(NULL, RawSerial::TxIrq);
+            // trigger callback if necessary
+            if (_cbs[TxIrq]) {
+                _cbs[TxIrq]();
+            }
+            break;
+        }
+    }
+
+    return;
+}
+
+void BufferedSerial::prime(void)
+{
+    // if already busy then the irq will pick this up
+    if(serial_writable(&_serial)) {
+        RawSerial::attach(NULL, RawSerial::TxIrq);    // make sure not to cause contention in the irq
+        BufferedSerial::txIrq();                // only write to hardware in one place
+        RawSerial::attach(this, &BufferedSerial::txIrq, RawSerial::TxIrq);
+    }
+
+    return;
+}
+
+void BufferedSerial::attach(Callback<void()> func, IrqType type)
+{
+    _cbs[type] = func;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/ESP8266/ATParser/BufferedSerial/BufferedSerial.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,168 @@
+
+/**
+ * @file    BufferedSerial.h
+ * @brief   Software Buffer - Extends mbed Serial functionallity adding irq driven TX and RX
+ * @author  sam grove
+ * @version 1.0
+ * @see     
+ *
+ * Copyright (c) 2013
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef BUFFEREDSERIAL_H
+#define BUFFEREDSERIAL_H
+ 
+#include "mbed.h"
+#include "MyBuffer.h"
+
+/** A serial port (UART) for communication with other serial devices
+ *
+ * Can be used for Full Duplex communication, or Simplex by specifying
+ * one pin as NC (Not Connected)
+ *
+ * Example:
+ * @code
+ *  #include "mbed.h"
+ *  #include "BufferedSerial.h"
+ *
+ *  BufferedSerial pc(USBTX, USBRX);
+ *
+ *  int main()
+ *  { 
+ *      while(1)
+ *      {
+ *          Timer s;
+ *        
+ *          s.start();
+ *          pc.printf("Hello World - buffered\n");
+ *          int buffered_time = s.read_us();
+ *          wait(0.1f); // give time for the buffer to empty
+ *        
+ *          s.reset();
+ *          printf("Hello World - blocking\n");
+ *          int polled_time = s.read_us();
+ *          s.stop();
+ *          wait(0.1f); // give time for the buffer to empty
+ *        
+ *          pc.printf("printf buffered took %d us\n", buffered_time);
+ *          pc.printf("printf blocking took %d us\n", polled_time);
+ *          wait(0.5f);
+ *      }
+ *  }
+ * @endcode
+ */
+
+/**
+ *  @class BufferedSerial
+ *  @brief Software buffers and interrupt driven tx and rx for Serial
+ */  
+class BufferedSerial : public RawSerial 
+{
+private:
+    MyBuffer <char> _rxbuf;
+    MyBuffer <char> _txbuf;
+    uint32_t      _buf_size;
+    uint32_t      _tx_multiple;
+ 
+    void rxIrq(void);
+    void txIrq(void);
+    void prime(void);
+
+    Callback<void()> _cbs[2];
+    
+public:
+    /** Create a BufferedSerial port, connected to the specified transmit and receive pins
+     *  @param tx Transmit pin
+     *  @param rx Receive pin
+     *  @param buf_size printf() buffer size
+     *  @param tx_multiple amount of max printf() present in the internal ring buffer at one time
+     *  @param name optional name
+     *  @note Either tx or rx may be specified as NC if unused
+     */
+    BufferedSerial(PinName tx, PinName rx, uint32_t buf_size = 256, uint32_t tx_multiple = 4,const char* name=NULL);
+    
+    /** Destroy a BufferedSerial port
+     */
+    virtual ~BufferedSerial(void);
+    
+    /** Check on how many bytes are in the rx buffer
+     *  @return 1 if something exists, 0 otherwise
+     */
+    virtual int readable(void);
+    
+    /** Check to see if the tx buffer has room
+     *  @return 1 always has room and can overwrite previous content if too small / slow
+     */
+    virtual int writeable(void);
+    
+    /** Get a single byte from the BufferedSerial Port.
+     *  Should check readable() before calling this.
+     *  @return A byte that came in on the Serial Port
+     */
+    virtual int getc(void);
+    
+    /** Write a single byte to the BufferedSerial Port.
+     *  @param c The byte to write to the Serial Port
+     *  @return The byte that was written to the Serial Port Buffer
+     */
+    virtual int putc(int c);
+    
+    /** Write a string to the BufferedSerial Port. Must be NULL terminated
+     *  @param s The string to write to the Serial Port
+     *  @return The number of bytes written to the Serial Port Buffer
+     */
+    virtual int puts(const char *s);
+    
+    /** Write a formatted string to the BufferedSerial Port.
+     *  @param format The string + format specifiers to write to the Serial Port
+     *  @return The number of bytes written to the Serial Port Buffer
+     */
+    virtual int printf(const char* format, ...);
+    
+    /** Write data to the Buffered Serial Port
+     *  @param s A pointer to data to send
+     *  @param length The amount of data being pointed to
+     *  @return The number of bytes written to the Serial Port Buffer
+     */
+    virtual ssize_t write(const void *s, std::size_t length);
+
+    /** Attach a function to call whenever a serial interrupt is generated
+     *  @param func A pointer to a void function, or 0 to set as none
+     *  @param type Which serial interrupt to attach the member function to (Serial::RxIrq for receive, TxIrq for transmit buffer empty)
+     */
+    virtual void attach(Callback<void()> func, IrqType type=RxIrq);
+
+    /** Attach a member function to call whenever a serial interrupt is generated
+     *  @param obj pointer to the object to call the member function on
+     *  @param method pointer to the member function to call
+     *  @param type Which serial interrupt to attach the member function to (Serial::RxIrq for receive, TxIrq for transmit buffer empty)
+     */
+    template <typename T>
+    void attach(T *obj, void (T::*method)(), IrqType type=RxIrq) {
+        attach(Callback<void()>(obj, method), type);
+    }
+
+    /** Attach a member function to call whenever a serial interrupt is generated
+     *  @param obj pointer to the object to call the member function on
+     *  @param method pointer to the member function to call
+     *  @param type Which serial interrupt to attach the member function to (Serial::RxIrq for receive, TxIrq for transmit buffer empty)
+     */
+    template <typename T>
+    void attach(T *obj, void (*method)(T*), IrqType type=RxIrq) {
+        attach(Callback<void()>(obj, method), type);
+    }
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/ESP8266/ESP8266.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,306 @@
+/* ESP8266 Example
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ESP8266.h"
+
+ESP8266::ESP8266(PinName tx, PinName rx, bool debug)
+    : _serial(tx, rx, 1024), _parser(_serial)
+    , _packets(0), _packets_end(&_packets)
+{
+    _serial.baud(115200);
+    _parser.debugOn(debug);
+}
+
+bool ESP8266::startup(int mode)
+{
+    //only 3 valid modes
+    if(mode < 1 || mode > 3) {
+        return false;
+    }
+
+    bool success = reset()
+        && _parser.send("AT+CWMODE=%d", mode)
+        && _parser.recv("OK")
+        && _parser.send("AT+CIPMUX=1")
+        && _parser.recv("OK");
+
+    _parser.oob("+IPD", this, &ESP8266::_packet_handler);
+
+    return success;
+}
+
+bool ESP8266::reset(void)
+{
+    for (int i = 0; i < 2; i++) {
+        if (_parser.send("AT+RST")
+            && _parser.recv("OK\r\nready")) {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+bool ESP8266::dhcp(bool enabled, int mode)
+{
+    //only 3 valid modes
+    if(mode < 0 || mode > 2) {
+        return false;
+    }
+
+    return _parser.send("AT+CWDHCP=%d,%d", enabled?1:0, mode)
+        && _parser.recv("OK");
+}
+
+bool ESP8266::connect(const char *ap, const char *passPhrase)
+{
+    return _parser.send("AT+CWJAP=\"%s\",\"%s\"", ap, passPhrase)
+        && _parser.recv("OK");
+}
+
+bool ESP8266::disconnect(void)
+{
+    return _parser.send("AT+CWQAP") && _parser.recv("OK");
+}
+
+const char *ESP8266::getIPAddress(void)
+{
+    if (!(_parser.send("AT+CIFSR")
+        && _parser.recv("+CIFSR:STAIP,\"%15[^\"]\"", _ip_buffer)
+        && _parser.recv("OK"))) {
+        return 0;
+    }
+
+    return _ip_buffer;
+}
+
+const char *ESP8266::getMACAddress(void)
+{
+    if (!(_parser.send("AT+CIFSR")
+        && _parser.recv("+CIFSR:STAMAC,\"%17[^\"]\"", _mac_buffer)
+        && _parser.recv("OK"))) {
+        return 0;
+    }
+
+    return _mac_buffer;
+}
+
+const char *ESP8266::getGateway()
+{
+    if (!(_parser.send("AT+CIPSTA?")
+        && _parser.recv("+CIPSTA:gateway:\"%15[^\"]\"", _gateway_buffer)
+        && _parser.recv("OK"))) {
+        return 0;
+    }
+
+    return _gateway_buffer;
+}
+
+const char *ESP8266::getNetmask()
+{
+    if (!(_parser.send("AT+CIPSTA?")
+        && _parser.recv("+CIPSTA:netmask:\"%15[^\"]\"", _netmask_buffer)
+        && _parser.recv("OK"))) {
+        return 0;
+    }
+
+    return _netmask_buffer;
+}
+
+int8_t ESP8266::getRSSI()
+{
+    int8_t rssi;
+    char bssid[18];
+
+   if (!(_parser.send("AT+CWJAP?")
+        && _parser.recv("+CWJAP:\"%*[^\"]\",\"%17[^\"]\"", bssid)
+        && _parser.recv("OK"))) {
+        return 0;
+    }
+
+    if (!(_parser.send("AT+CWLAP=\"\",\"%s\",", bssid)
+        && _parser.recv("+CWLAP:(%*d,\"%*[^\"]\",%hhd,", &rssi)
+        && _parser.recv("OK"))) {
+        return 0;
+    }
+
+    return rssi;
+}
+
+bool ESP8266::isConnected(void)
+{
+    return getIPAddress() != 0;
+}
+
+int ESP8266::scan(WiFiAccessPoint *res, unsigned limit)
+{
+    unsigned cnt = 0;
+    nsapi_wifi_ap_t ap;
+
+    if (!_parser.send("AT+CWLAP")) {
+        return NSAPI_ERROR_DEVICE_ERROR;
+    }
+
+    while (recv_ap(&ap)) {
+        if (cnt < limit) {
+            res[cnt] = WiFiAccessPoint(ap);
+        }
+
+        cnt++;
+        if (limit != 0 && cnt >= limit) {
+            break;
+        }
+    }
+
+    return cnt;
+}
+
+bool ESP8266::open(const char *type, int id, const char* addr, int port)
+{
+    //IDs only 0-4
+    if(id > 4) {
+        return false;
+    }
+
+    return _parser.send("AT+CIPSTART=%d,\"%s\",\"%s\",%d", id, type, addr, port)
+        && _parser.recv("OK");
+}
+
+bool ESP8266::send(int id, const void *data, uint32_t amount)
+{
+    //May take a second try if device is busy
+    for (unsigned i = 0; i < 2; i++) {
+        if (_parser.send("AT+CIPSEND=%d,%d", id, amount)
+            && _parser.recv(">")
+            && _parser.write((char*)data, (int)amount) >= 0) {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+void ESP8266::_packet_handler()
+{
+    int id;
+    uint32_t amount;
+
+    // parse out the packet
+    if (!_parser.recv(",%d,%d:", &id, &amount)) {
+        return;
+    }
+
+    struct packet *packet = (struct packet*)malloc(
+            sizeof(struct packet) + amount);
+    if (!packet) {
+        return;
+    }
+
+    packet->id = id;
+    packet->len = amount;
+    packet->next = 0;
+
+    if (!(_parser.read((char*)(packet + 1), amount))) {
+        free(packet);
+        return;
+    }
+
+    // append to packet list
+    *_packets_end = packet;
+    _packets_end = &packet->next;
+}
+
+int32_t ESP8266::recv(int id, void *data, uint32_t amount)
+{
+    while (true) {
+        // check if any packets are ready for us
+        for (struct packet **p = &_packets; *p; p = &(*p)->next) {
+            if ((*p)->id == id) {
+                struct packet *q = *p;
+
+                if (q->len <= amount) { // Return and remove full packet
+                    memcpy(data, q+1, q->len);
+
+                    if (_packets_end == &(*p)->next) {
+                        _packets_end = p;
+                    }
+                    *p = (*p)->next;
+
+                    uint32_t len = q->len;
+                    free(q);
+                    return len;
+                } else { // return only partial packet
+                    memcpy(data, q+1, amount);
+
+                    q->len -= amount;
+                    memmove(q+1, (uint8_t*)(q+1) + amount, q->len);
+
+                    return amount;
+                }
+            }
+        }
+
+        // Wait for inbound packet
+        if (!_parser.recv("OK")) {
+            return -1;
+        }
+    }
+}
+
+bool ESP8266::close(int id)
+{
+    //May take a second try if device is busy
+    for (unsigned i = 0; i < 2; i++) {
+        if (_parser.send("AT+CIPCLOSE=%d", id)
+            && _parser.recv("OK")) {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+void ESP8266::setTimeout(uint32_t timeout_ms)
+{
+    _parser.setTimeout(timeout_ms);
+}
+
+bool ESP8266::readable()
+{
+    return _serial.readable();
+}
+
+bool ESP8266::writeable()
+{
+    return _serial.writeable();
+}
+
+void ESP8266::attach(Callback<void()> func)
+{
+    _serial.attach(func);
+}
+
+bool ESP8266::recv_ap(nsapi_wifi_ap_t *ap)
+{
+    int sec;
+    bool ret = _parser.recv("+CWLAP:(%d,\"%32[^\"]\",%hhd,\"%hhx:%hhx:%hhx:%hhx:%hhx:%hhx\",%d", &sec, ap->ssid,
+                            &ap->rssi, &ap->bssid[0], &ap->bssid[1], &ap->bssid[2], &ap->bssid[3], &ap->bssid[4],
+                            &ap->bssid[5], &ap->channel);
+
+    ap->security = sec < 5 ? (nsapi_security_t)sec : NSAPI_SECURITY_UNKNOWN;
+
+    return ret;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/ESP8266/ESP8266.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,213 @@
+/* ESP8266Interface Example
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ESP8266_H
+#define ESP8266_H
+
+#include "ATParser.h"
+
+/** ESP8266Interface class.
+    This is an interface to a ESP8266 radio.
+ */
+class ESP8266
+{
+public:
+    ESP8266(PinName tx, PinName rx, bool debug=false);
+
+    /**
+    * Startup the ESP8266
+    *
+    * @param mode mode of WIFI 1-client, 2-host, 3-both
+    * @return true only if ESP8266 was setup correctly
+    */
+    bool startup(int mode);
+
+    /**
+    * Reset ESP8266
+    *
+    * @return true only if ESP8266 resets successfully
+    */
+    bool reset(void);
+
+    /**
+    * Enable/Disable DHCP
+    *
+    * @param enabled DHCP enabled when true
+    * @param mode mode of DHCP 0-softAP, 1-station, 2-both
+    * @return true only if ESP8266 enables/disables DHCP successfully
+    */
+    bool dhcp(bool enabled, int mode);
+
+    /**
+    * Connect ESP8266 to AP
+    *
+    * @param ap the name of the AP
+    * @param passPhrase the password of AP
+    * @return true only if ESP8266 is connected successfully
+    */
+    bool connect(const char *ap, const char *passPhrase);
+
+    /**
+    * Disconnect ESP8266 from AP
+    *
+    * @return true only if ESP8266 is disconnected successfully
+    */
+    bool disconnect(void);
+
+    /**
+    * Get the IP address of ESP8266
+    *
+    * @return null-teriminated IP address or null if no IP address is assigned
+    */
+    const char *getIPAddress(void);
+
+    /**
+    * Get the MAC address of ESP8266
+    *
+    * @return null-terminated MAC address or null if no MAC address is assigned
+    */
+    const char *getMACAddress(void);
+
+     /** Get the local gateway
+     *
+     *  @return         Null-terminated representation of the local gateway
+     *                  or null if no network mask has been recieved
+     */
+    const char *getGateway();
+
+    /** Get the local network mask
+     *
+     *  @return         Null-terminated representation of the local network mask 
+     *                  or null if no network mask has been recieved
+     */
+    const char *getNetmask();
+
+    /* Return RSSI for active connection
+     *
+     * @return      Measured RSSI
+     */
+    int8_t getRSSI();
+
+    /**
+    * Check if ESP8266 is conenected
+    *
+    * @return true only if the chip has an IP address
+    */
+    bool isConnected(void);
+
+    /** Scan for available networks
+     *
+     * @param  ap    Pointer to allocated array to store discovered AP
+     * @param  limit Size of allocated @a res array, or 0 to only count available AP
+     * @return       Number of entries in @a res, or if @a count was 0 number of available networks, negative on error
+     *               see @a nsapi_error
+     */
+    int scan(WiFiAccessPoint *res, unsigned limit);
+
+    /**
+    * Open a socketed connection
+    *
+    * @param type the type of socket to open "UDP" or "TCP"
+    * @param id id to give the new socket, valid 0-4
+    * @param port port to open connection with
+    * @param addr the IP address of the destination
+    * @return true only if socket opened successfully
+    */
+    bool open(const char *type, int id, const char* addr, int port);
+
+    /**
+    * Sends data to an open socket
+    *
+    * @param id id of socket to send to
+    * @param data data to be sent
+    * @param amount amount of data to be sent - max 1024
+    * @return true only if data sent successfully
+    */
+    bool send(int id, const void *data, uint32_t amount);
+
+    /**
+    * Receives data from an open socket
+    *
+    * @param id id to receive from
+    * @param data placeholder for returned information
+    * @param amount number of bytes to be received
+    * @return the number of bytes received
+    */
+    int32_t recv(int id, void *data, uint32_t amount);
+
+    /**
+    * Closes a socket
+    *
+    * @param id id of socket to close, valid only 0-4
+    * @return true only if socket is closed successfully
+    */
+    bool close(int id);
+
+    /**
+    * Allows timeout to be changed between commands
+    *
+    * @param timeout_ms timeout of the connection
+    */
+    void setTimeout(uint32_t timeout_ms);
+
+    /**
+    * Checks if data is available
+    */
+    bool readable();
+
+    /**
+    * Checks if data can be written
+    */
+    bool writeable();
+
+    /**
+    * Attach a function to call whenever network state has changed
+    *
+    * @param func A pointer to a void function, or 0 to set as none
+    */
+    void attach(Callback<void()> func);
+
+    /**
+    * Attach a function to call whenever network state has changed
+    *
+    * @param obj pointer to the object to call the member function on
+    * @param method pointer to the member function to call
+    */
+    template <typename T, typename M>
+    void attach(T *obj, M method) {
+        attach(Callback<void()>(obj, method));
+    }
+
+private:
+    BufferedSerial _serial;
+    ATParser _parser;
+
+    struct packet {
+        struct packet *next;
+        int id;
+        uint32_t len;
+        // data follows
+    } *_packets, **_packets_end;
+    void _packet_handler();
+    bool recv_ap(nsapi_wifi_ap_t *ap);
+
+    char _ip_buffer[16];
+    char _gateway_buffer[16];
+    char _netmask_buffer[16];
+    char _mac_buffer[18];
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/ESP8266Interface.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,266 @@
+/* ESP8266 implementation of NetworkInterfaceAPI
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string.h>
+#include "ESP8266Interface.h"
+
+// Various timeouts for different ESP8266 operations
+#define ESP8266_CONNECT_TIMEOUT 15000
+#define ESP8266_SEND_TIMEOUT    500
+#define ESP8266_RECV_TIMEOUT    0
+#define ESP8266_MISC_TIMEOUT    500
+
+// ESP8266Interface implementation
+ESP8266Interface::ESP8266Interface(PinName tx, PinName rx, bool debug)
+    : _esp(tx, rx, debug)
+{
+    memset(_ids, 0, sizeof(_ids));
+    memset(_cbs, 0, sizeof(_cbs));
+
+    _esp.attach(this, &ESP8266Interface::event);
+}
+
+int ESP8266Interface::connect(const char *ssid, const char *pass, nsapi_security_t security,
+                                        uint8_t channel)
+{
+    if (channel != 0) {
+        return NSAPI_ERROR_UNSUPPORTED;
+    }
+
+    set_credentials(ssid, pass, security);
+    return connect();
+}
+
+int ESP8266Interface::connect()
+{
+    _esp.setTimeout(ESP8266_CONNECT_TIMEOUT);
+
+    if (!_esp.startup(3)) {
+        return NSAPI_ERROR_DEVICE_ERROR;
+    }
+
+    if (!_esp.dhcp(true, 1)) {
+        return NSAPI_ERROR_DHCP_FAILURE;
+    }
+
+    if (!_esp.connect(ap_ssid, ap_pass)) {
+        return NSAPI_ERROR_NO_CONNECTION;
+    }
+
+    if (!_esp.getIPAddress()) {
+        return NSAPI_ERROR_DHCP_FAILURE;
+    }
+
+    return NSAPI_ERROR_OK;
+}
+
+int ESP8266Interface::set_credentials(const char *ssid, const char *pass, nsapi_security_t security)
+{
+    memset(ap_ssid, 0, sizeof(ap_ssid));
+    strncpy(ap_ssid, ssid, sizeof(ap_ssid));
+
+    memset(ap_pass, 0, sizeof(ap_pass));
+    strncpy(ap_pass, pass, sizeof(ap_pass));
+
+    ap_sec = security;
+
+    return 0;
+}
+
+int ESP8266Interface::set_channel(uint8_t channel)
+{
+    return NSAPI_ERROR_UNSUPPORTED;
+}
+
+
+int ESP8266Interface::disconnect()
+{
+    _esp.setTimeout(ESP8266_MISC_TIMEOUT);
+
+    if (!_esp.disconnect()) {
+        return NSAPI_ERROR_DEVICE_ERROR;
+    }
+
+    return NSAPI_ERROR_OK;
+}
+
+const char *ESP8266Interface::get_ip_address()
+{
+    return _esp.getIPAddress();
+}
+
+const char *ESP8266Interface::get_mac_address()
+{
+    return _esp.getMACAddress();
+}
+
+const char *ESP8266Interface::get_gateway()
+{
+    return _esp.getGateway();
+}
+
+const char *ESP8266Interface::get_netmask()
+{
+    return _esp.getNetmask();
+}
+
+int8_t ESP8266Interface::get_rssi()
+{
+    return _esp.getRSSI();
+}
+
+int ESP8266Interface::scan(WiFiAccessPoint *res, unsigned count)
+{
+    return _esp.scan(res, count);
+}
+
+struct esp8266_socket {
+    int id;
+    nsapi_protocol_t proto;
+    bool connected;
+};
+
+int ESP8266Interface::socket_open(void **handle, nsapi_protocol_t proto)
+{
+    // Look for an unused socket
+    int id = -1;
+ 
+    for (int i = 0; i < ESP8266_SOCKET_COUNT; i++) {
+        if (!_ids[i]) {
+            id = i;
+            _ids[i] = true;
+            break;
+        }
+    }
+ 
+    if (id == -1) {
+        return NSAPI_ERROR_NO_SOCKET;
+    }
+    
+    struct esp8266_socket *socket = new struct esp8266_socket;
+    if (!socket) {
+        return NSAPI_ERROR_NO_SOCKET;
+    }
+    
+    socket->id = id;
+    socket->proto = proto;
+    socket->connected = false;
+    *handle = socket;
+    return 0;
+}
+
+int ESP8266Interface::socket_close(void *handle)
+{
+    struct esp8266_socket *socket = (struct esp8266_socket *)handle;
+    int err = 0;
+    _esp.setTimeout(ESP8266_MISC_TIMEOUT);
+ 
+    if (!_esp.close(socket->id)) {
+        err = NSAPI_ERROR_DEVICE_ERROR;
+    }
+
+    _ids[socket->id] = false;
+    delete socket;
+    return err;
+}
+
+int ESP8266Interface::socket_bind(void *handle, const SocketAddress &address)
+{
+    return NSAPI_ERROR_UNSUPPORTED;
+}
+
+int ESP8266Interface::socket_listen(void *handle, int backlog)
+{
+    return NSAPI_ERROR_UNSUPPORTED;
+}
+
+int ESP8266Interface::socket_connect(void *handle, const SocketAddress &addr)
+{
+    struct esp8266_socket *socket = (struct esp8266_socket *)handle;
+    _esp.setTimeout(ESP8266_MISC_TIMEOUT);
+
+    const char *proto = (socket->proto == NSAPI_UDP) ? "UDP" : "TCP";
+    if (!_esp.open(proto, socket->id, addr.get_ip_address(), addr.get_port())) {
+        return NSAPI_ERROR_DEVICE_ERROR;
+    }
+    
+    socket->connected = true;
+    return 0;
+}
+    
+int ESP8266Interface::socket_accept(void *server, void **socket, SocketAddress *addr)
+{
+    return NSAPI_ERROR_UNSUPPORTED;
+}
+
+int ESP8266Interface::socket_send(void *handle, const void *data, unsigned size)
+{
+    struct esp8266_socket *socket = (struct esp8266_socket *)handle;
+    _esp.setTimeout(ESP8266_SEND_TIMEOUT);
+ 
+    if (!_esp.send(socket->id, data, size)) {
+        return NSAPI_ERROR_DEVICE_ERROR;
+    }
+ 
+    return size;
+}
+
+int ESP8266Interface::socket_recv(void *handle, void *data, unsigned size)
+{
+    struct esp8266_socket *socket = (struct esp8266_socket *)handle;
+    _esp.setTimeout(ESP8266_RECV_TIMEOUT);
+ 
+    int32_t recv = _esp.recv(socket->id, data, size);
+    if (recv < 0) {
+        return NSAPI_ERROR_WOULD_BLOCK;
+    }
+ 
+    return recv;
+}
+
+int ESP8266Interface::socket_sendto(void *handle, const SocketAddress &addr, const void *data, unsigned size)
+{
+    struct esp8266_socket *socket = (struct esp8266_socket *)handle;
+    if (!socket->connected) {
+        int err = socket_connect(socket, addr);
+        if (err < 0) {
+            return err;
+        }
+    }
+    
+    return socket_send(socket, data, size);
+}
+
+int ESP8266Interface::socket_recvfrom(void *handle, SocketAddress *addr, void *data, unsigned size)
+{
+    struct esp8266_socket *socket = (struct esp8266_socket *)handle;    
+    return socket_recv(socket, data, size);
+}
+
+void ESP8266Interface::socket_attach(void *handle, void (*callback)(void *), void *data)
+{
+    struct esp8266_socket *socket = (struct esp8266_socket *)handle;    
+    _cbs[socket->id].callback = callback;
+    _cbs[socket->id].data = data;
+}
+
+void ESP8266Interface::event() {
+    for (int i = 0; i < ESP8266_SOCKET_COUNT; i++) {
+        if (_cbs[i].callback) {
+            _cbs[i].callback(_cbs[i].data);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/esp8266-driver/ESP8266Interface.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,252 @@
+/* ESP8266 implementation of NetworkInterfaceAPI
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ESP8266_INTERFACE_H
+#define ESP8266_INTERFACE_H
+
+#include "mbed.h"
+#include "ESP8266.h"
+
+
+#define ESP8266_SOCKET_COUNT 5
+
+/** ESP8266Interface class
+ *  Implementation of the NetworkStack for the ESP8266
+ */
+class ESP8266Interface : public NetworkStack, public WiFiInterface
+{
+public:
+    /** ESP8266Interface lifetime
+     * @param tx        TX pin
+     * @param rx        RX pin
+     * @param debug     Enable debugging
+     */
+    ESP8266Interface(PinName tx, PinName rx, bool debug = false);
+
+    /** Start the interface
+     *
+     *  Attempts to connect to a WiFi network. Requires ssid and passphrase to be set.
+     *  If passphrase is invalid, NSAPI_ERROR_AUTH_ERROR is returned.
+     *
+     *  @return         0 on success, negative error code on failure
+     */
+    virtual int connect();
+
+    /** Start the interface
+     *
+     *  Attempts to connect to a WiFi network.
+     *
+     *  @param ssid      Name of the network to connect to
+     *  @param pass      Security passphrase to connect to the network
+     *  @param security  Type of encryption for connection (Default: NSAPI_SECURITY_NONE)
+     *  @param channel   This parameter is not supported, setting it to anything else than 0 will result in NSAPI_ERROR_UNSUPPORTED
+     *  @return          0 on success, or error code on failure
+     */
+    virtual int connect(const char *ssid, const char *pass, nsapi_security_t security = NSAPI_SECURITY_NONE,
+                                  uint8_t channel = 0);
+
+    /** Set the WiFi network credentials
+     *
+     *  @param ssid      Name of the network to connect to
+     *  @param pass      Security passphrase to connect to the network
+     *  @param security  Type of encryption for connection
+     *                   (defaults to NSAPI_SECURITY_NONE)
+     *  @return          0 on success, or error code on failure
+     */
+    virtual int set_credentials(const char *ssid, const char *pass, nsapi_security_t security = NSAPI_SECURITY_NONE);
+
+    /** Set the WiFi network channel - NOT SUPPORTED
+     *
+     * This function is not supported and will return NSAPI_ERROR_UNSUPPORTED
+     *
+     *  @param channel   Channel on which the connection is to be made, or 0 for any (Default: 0)
+     *  @return          Not supported, returns NSAPI_ERROR_UNSUPPORTED
+     */
+    virtual int set_channel(uint8_t channel);
+
+    /** Stop the interface
+     *  @return             0 on success, negative on failure
+     */
+    virtual int disconnect();
+
+    /** Get the internally stored IP address
+     *  @return             IP address of the interface or null if not yet connected
+     */
+    virtual const char *get_ip_address();
+
+    /** Get the internally stored MAC address
+     *  @return             MAC address of the interface
+     */
+    virtual const char *get_mac_address();
+
+     /** Get the local gateway
+     *
+     *  @return         Null-terminated representation of the local gateway
+     *                  or null if no network mask has been recieved
+     */
+    virtual const char *get_gateway();
+
+    /** Get the local network mask
+     *
+     *  @return         Null-terminated representation of the local network mask
+     *                  or null if no network mask has been recieved
+     */
+    virtual const char *get_netmask();
+
+    /** Gets the current radio signal strength for active connection
+     *
+     * @return          Connection strength in dBm (negative value)
+     */
+    virtual int8_t get_rssi();
+
+    /** Scan for available networks
+     *
+     * This function will block.
+     *
+     * @param  ap       Pointer to allocated array to store discovered AP
+     * @param  count    Size of allocated @a res array, or 0 to only count available AP
+     * @param  timeout  Timeout in milliseconds; 0 for no timeout (Default: 0)
+     * @return          Number of entries in @a, or if @a count was 0 number of available networks, negative on error
+     *                  see @a nsapi_error
+     */
+    virtual int scan(WiFiAccessPoint *res, unsigned count);
+
+protected:
+    /** Open a socket
+     *  @param handle       Handle in which to store new socket
+     *  @param proto        Type of socket to open, NSAPI_TCP or NSAPI_UDP
+     *  @return             0 on success, negative on failure
+     */
+    virtual int socket_open(void **handle, nsapi_protocol_t proto);
+
+    /** Close the socket
+     *  @param handle       Socket handle
+     *  @return             0 on success, negative on failure
+     *  @note On failure, any memory associated with the socket must still
+     *        be cleaned up
+     */
+    virtual int socket_close(void *handle);
+
+    /** Bind a server socket to a specific port
+     *  @param handle       Socket handle
+     *  @param address      Local address to listen for incoming connections on
+     *  @return             0 on success, negative on failure.
+     */
+    virtual int socket_bind(void *handle, const SocketAddress &address);
+
+    /** Start listening for incoming connections
+     *  @param handle       Socket handle
+     *  @param backlog      Number of pending connections that can be queued up at any
+     *                      one time [Default: 1]
+     *  @return             0 on success, negative on failure
+     */
+    virtual int socket_listen(void *handle, int backlog);
+
+    /** Connects this TCP socket to the server
+     *  @param handle       Socket handle
+     *  @param address      SocketAddress to connect to
+     *  @return             0 on success, negative on failure
+     */
+    virtual int socket_connect(void *handle, const SocketAddress &address);
+
+    /** Accept a new connection.
+     *  @param handle       Handle in which to store new socket
+     *  @param server       Socket handle to server to accept from
+     *  @return             0 on success, negative on failure
+     *  @note This call is not-blocking, if this call would block, must
+     *        immediately return NSAPI_ERROR_WOULD_WAIT
+     */
+    virtual int socket_accept(void *handle, void **socket, SocketAddress *address);
+
+    /** Send data to the remote host
+     *  @param handle       Socket handle
+     *  @param data         The buffer to send to the host
+     *  @param size         The length of the buffer to send
+     *  @return             Number of written bytes on success, negative on failure
+     *  @note This call is not-blocking, if this call would block, must
+     *        immediately return NSAPI_ERROR_WOULD_WAIT
+     */
+    virtual int socket_send(void *handle, const void *data, unsigned size);
+
+    /** Receive data from the remote host
+     *  @param handle       Socket handle
+     *  @param data         The buffer in which to store the data received from the host
+     *  @param size         The maximum length of the buffer
+     *  @return             Number of received bytes on success, negative on failure
+     *  @note This call is not-blocking, if this call would block, must
+     *        immediately return NSAPI_ERROR_WOULD_WAIT
+     */
+    virtual int socket_recv(void *handle, void *data, unsigned size);
+
+    /** Send a packet to a remote endpoint
+     *  @param handle       Socket handle
+     *  @param address      The remote SocketAddress
+     *  @param data         The packet to be sent
+     *  @param size         The length of the packet to be sent
+     *  @return             The number of written bytes on success, negative on failure
+     *  @note This call is not-blocking, if this call would block, must
+     *        immediately return NSAPI_ERROR_WOULD_WAIT
+     */
+    virtual int socket_sendto(void *handle, const SocketAddress &address, const void *data, unsigned size);
+
+    /** Receive a packet from a remote endpoint
+     *  @param handle       Socket handle
+     *  @param address      Destination for the remote SocketAddress or null
+     *  @param buffer       The buffer for storing the incoming packet data
+     *                      If a packet is too long to fit in the supplied buffer,
+     *                      excess bytes are discarded
+     *  @param size         The length of the buffer
+     *  @return             The number of received bytes on success, negative on failure
+     *  @note This call is not-blocking, if this call would block, must
+     *        immediately return NSAPI_ERROR_WOULD_WAIT
+     */
+    virtual int socket_recvfrom(void *handle, SocketAddress *address, void *buffer, unsigned size);
+
+    /** Register a callback on state change of the socket
+     *  @param handle       Socket handle
+     *  @param callback     Function to call on state change
+     *  @param data         Argument to pass to callback
+     *  @note Callback may be called in an interrupt context.
+     */
+    virtual void socket_attach(void *handle, void (*callback)(void *), void *data);
+
+    /** Provide access to the NetworkStack object
+     *
+     *  @return The underlying NetworkStack object
+     */
+    virtual NetworkStack *get_stack()
+    {
+        return this;
+    }
+
+private:
+    ESP8266 _esp;
+    bool _ids[ESP8266_SOCKET_COUNT];
+
+    char ap_ssid[33]; /* 32 is what 802.11 defines as longest possible name; +1 for the \0 */
+    nsapi_security_t ap_sec;
+    uint8_t ap_ch;
+    char ap_pass[64]; /* The longest allowed passphrase */
+
+    void event();
+
+    struct {
+        void (*callback)(void *);
+        void *data;
+    } _cbs[ESP8266_SOCKET_COUNT];
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,596 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "simpleclient.h"
+#include <string>
+#include <sstream>
+#include <vector>
+#include "mbed-trace/mbed_trace.h"
+#include "mbedtls/entropy_poll.h"
+
+#include <events/mbed_events.h>
+#include <mbed.h>
+#include "ble/BLE.h"
+#include "ble/DiscoveredCharacteristic.h"
+#include "ble/DiscoveredService.h"
+
+#include "security.h"
+
+#include "mbed.h"
+#include "rtos.h"
+
+#if MBED_CONF_APP_NETWORK_INTERFACE == WIFI
+#include "ESP8266Interface.h"
+ESP8266Interface esp(MBED_CONF_APP_WIFI_TX, MBED_CONF_APP_WIFI_RX);
+#elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET
+#include "EthernetInterface.h"
+EthernetInterface eth;
+#elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_LOWPAN_ND
+#define MESH
+#include "NanostackInterface.h"
+LoWPANNDInterface mesh;
+#elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_THREAD
+#define MESH
+#include "NanostackInterface.h"
+ThreadInterface mesh;
+#endif
+
+#if defined(MESH)
+#if MBED_CONF_APP_MESH_RADIO_TYPE == ATMEL
+#include "NanostackRfPhyAtmel.h"
+NanostackRfPhyAtmel rf_phy(ATMEL_SPI_MOSI, ATMEL_SPI_MISO, ATMEL_SPI_SCLK, ATMEL_SPI_CS,
+                           ATMEL_SPI_RST, ATMEL_SPI_SLP, ATMEL_SPI_IRQ, ATMEL_I2C_SDA, ATMEL_I2C_SCL);
+#elif MBED_CONF_APP_MESH_RADIO_TYPE == MCR20
+#include "NanostackRfPhyMcr20a.h"
+NanostackRfPhyMcr20a rf_phy(MCR20A_SPI_MOSI, MCR20A_SPI_MISO, MCR20A_SPI_SCLK, MCR20A_SPI_CS, MCR20A_SPI_RST, MCR20A_SPI_IRQ);
+#endif //MBED_CONF_APP_RADIO_TYPE
+#endif //MESH
+
+#ifndef MESH
+// This is address to mbed Device Connector
+#define MBED_SERVER_ADDRESS "coap://api.connector.mbed.com:5684"
+#else
+// This is address to mbed Device Connector
+#define MBED_SERVER_ADDRESS "coaps://[2607:f0d0:2601:52::20]:5684"
+#endif
+
+Serial output(USBTX, USBRX);
+
+// Status indication
+DigitalOut red_led(LED1);
+DigitalOut green_led(LED2);
+DigitalOut blue_led(LED3);
+Ticker status_ticker;
+// Ren, begin
+enum charType {
+	PRESSURE,
+	TEMPERATURE,
+	HUMIDITY
+};
+const char * dbg_CharType[HUMIDITY+1]={"Pressure","Temperature","Humidity"};
+const char * objName[HUMIDITY+1]={"3323","3303","3304"};
+static bool is_active[HUMIDITY+1];
+static float dataprint[HUMIDITY+1]={0,0,0};
+/*
+ * The BME280 sensor contains 3 float properties.
+ * Those are updated once BLE Gatt client read the values.
+ */
+class BME280Resource {
+public:
+    BME280Resource() {
+    	// create Pressure object '3323'.
+        for(int m=0; m<HUMIDITY+1; m++) {
+            bme280[m] = M2MInterfaceFactory::create_object(objName[m]);
+            tmp_inst[m] = bme280[m] ->create_object_instance();
+            tmp_res[m] = tmp_inst[m]->create_dynamic_resource("5700", dbg_CharType[m],
+                    M2MResourceInstance::STRING, true /* observable */);
+            tmp_res[m]->set_operation(M2MBase::GET_ALLOWED);
+            tmp_res[m]->set_value((uint8_t*)"0.0", 3);
+        }
+    }
+
+    void set_bme280_value(float val, int h){
+        char tmp_buf[50];
+        int len;
+        if (h<PRESSURE || h>HUMIDITY) {
+            printf("data type h (input) is wrong!!");
+            return;
+        }
+        if (h==HUMIDITY)
+            len=sprintf(tmp_buf,"%0.2f%%",val);
+        else if (h==PRESSURE)
+            len=sprintf(tmp_buf,"%0.1f hPa",val);
+        else
+            len=sprintf(tmp_buf,"%0.2f degC",val);
+
+        tmp_res[h]->set_value((uint8_t*)tmp_buf, len);
+        //printf("set_value(tmp_bug=%s\r\n", tmp_buf);
+    }
+
+
+    M2MObject* get_object(int idx) {
+        if (idx<PRESSURE || idx>HUMIDITY)    return NULL;
+        return bme280[idx];
+    }
+private:
+    M2MObject*  bme280[HUMIDITY+1];
+    M2MObjectInstance* tmp_inst[HUMIDITY+1];
+    M2MResource* tmp_res[HUMIDITY+1];
+};
+
+static BME280Resource *demo1;
+// Ren, end
+
+/************************************************************BLE Stuff from here *********************************/
+BLE &ble = BLE::Instance();
+static DiscoveredCharacteristic bme280Characteristic[HUMIDITY+1];
+static bool triggerLedCharacteristic;
+static const char PEER_NAME[] = "BME280";
+uint16_t payload_length = 0;
+uint8_t dataforClient[] = {0};
+uint32_t final_dataforClient = 0;
+
+static EventQueue eventQueue(
+    /* event count */ 16 * /* event size */ 32
+);
+
+void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params) {
+    // parse the advertising payload, looking for data type COMPLETE_LOCAL_NAME
+    // The advertising payload is a collection of key/value records where
+    // byte 0: length of the record excluding this byte
+    // byte 1: The key, it is the type of the data
+    // byte [2..N] The value. N is equal to byte0 - 1
+
+  	//printf("Starting advertisementCallback...\r\n");
+    for (uint8_t i = 0; i < params->advertisingDataLen; ++i) {
+
+        const uint8_t record_length = params->advertisingData[i];
+        if (record_length == 0) {
+            continue;
+        }
+        const uint8_t type = params->advertisingData[i + 1];
+        const uint8_t* value = params->advertisingData + i + 2;
+        const uint8_t value_length = record_length - 1;
+
+        if (type == GapAdvertisingData::COMPLETE_LOCAL_NAME) {
+            if ((value_length == sizeof(PEER_NAME)) && (memcmp(value, PEER_NAME, value_length) == 0)) {
+                printf(
+                    "adv peerAddr[%02x %02x %02x %02x %02x %02x] rssi %d, isScanResponse %u, AdvertisementType %u\r\n",
+                    params->peerAddr[5], params->peerAddr[4], params->peerAddr[3], params->peerAddr[2],
+                    params->peerAddr[1], params->peerAddr[0], params->rssi, params->isScanResponse, params->type
+                );
+                BLE::Instance().gap().connect(params->peerAddr, Gap::ADDR_TYPE_RANDOM_STATIC, NULL, NULL);
+                break;
+            }
+        }
+        i += record_length;
+    }
+}
+
+void serviceDiscoveryCallback(const DiscoveredService *service) {
+    if (service->getUUID().shortOrLong() == UUID::UUID_TYPE_SHORT) {
+        printf("S type short UUID-%x attrs[%u %u]\r\n", service->getUUID().getShortUUID(), service->getStartHandle(), service->getEndHandle());
+    } else {
+        printf("S type long UUID-");
+        const uint8_t *longUUIDBytes = service->getUUID().getBaseUUID();
+        for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++) {
+            printf("%02x", longUUIDBytes[i]);
+        }
+        printf(" attrs[%u %u]\r\n", service->getStartHandle(), service->getEndHandle());
+    }
+}
+
+/***
+    This function called read() initially, following read() calls
+    are repeated inside triggerRead function
+***/
+void updateLedCharacteristic(void) {
+    if (!BLE::Instance().gattClient().isServiceDiscoveryActive()) {
+        //printf("02  updateLedCharacteristic\n");
+        for(int g=0; g<HUMIDITY+1; g++) {
+            if (is_active[g])    bme280Characteristic[g].read();
+        }
+    }
+}
+
+
+void characteristicDiscoveryCallback(const DiscoveredCharacteristic *characteristicP) {
+    int tmp_uuid;
+    tmp_uuid=characteristicP->getUUID().getShortUUID();
+    printf("  C UUID-%x valueAttr[%u] props[%x]\r\n", characteristicP->getUUID().getShortUUID(), characteristicP->getValueHandle(), (uint8_t)characteristicP->getProperties().broadcast());
+    if ((tmp_uuid < GattCharacteristic::UUID_PRESSURE_CHAR) ||
+        (tmp_uuid > GattCharacteristic::UUID_HUMIDITY_CHAR))     return;
+    triggerLedCharacteristic = true;
+    if (tmp_uuid == GattCharacteristic::UUID_PRESSURE_CHAR) {
+        bme280Characteristic[PRESSURE] = *characteristicP;    is_active[PRESSURE] = true;
+        printf(" is_active[PRESSURE] = true\r\n");
+    }
+    else if (tmp_uuid == GattCharacteristic::UUID_TEMPERATURE_CHAR) {
+    	  bme280Characteristic[TEMPERATURE] = *characteristicP;    is_active[TEMPERATURE] = true;
+    	  printf(" is_active[TEMPERATURE] = true\r\n");
+   } else {
+        bme280Characteristic[HUMIDITY] = *characteristicP;    is_active[HUMIDITY] = true;
+        printf(" is_active[HUMIDITY] = true\r\n");
+   }
+}
+
+void discoveryTerminationCallback(Gap::Handle_t connectionHandle) {
+    printf("terminated SD for handle %u\r\n", connectionHandle);
+    if (triggerLedCharacteristic) {
+        triggerLedCharacteristic = false;
+        eventQueue.call(updateLedCharacteristic);
+    }
+}
+
+void connectionCallback(const Gap::ConnectionCallbackParams_t *params) {
+    int ret;
+    printf("Connected to BME280 now...\r\n");
+    if (params->role == Gap::CENTRAL) {
+        BLE &ble = BLE::Instance();
+        ble.gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback);
+        // Ren, connect to ENVIRONMENT service
+        ret=ble.gattClient().launchServiceDiscovery(params->handle, serviceDiscoveryCallback, characteristicDiscoveryCallback, GattService::UUID_ENVIRONMENTAL_SERVICE);
+        printf("ble.gattClient().launchServiceDiscovery = %d\r\n", ret);
+    }
+}
+
+//ASHOK's triggerRead function
+
+void triggerRead(const GattReadCallbackParams *response) {
+    int k;
+    for(int j=0; j<HUMIDITY+1; j++) {
+        if (is_active[j]) {
+            if (response->handle == bme280Characteristic[j].getValueHandle()){
+                payload_length = response-> len;
+                for(int i=0; i< response-> len; i++) {
+                    dataforClient[i] = response -> data[i];
+                }
+                //BLE packet contains 4 bytes of 8 bit int's each. Combine all of them to form a single 32-bit int.
+                final_dataforClient = ((uint32_t)dataforClient[3]<<24) | (dataforClient[2]<<16) | (dataforClient[1] << 8) | (dataforClient[0]);
+                //Ren debug
+                dataprint[j] = ( j==PRESSURE)?   (float) final_dataforClient/10 : (float) final_dataforClient/100;
+                demo1->set_bme280_value(dataprint[j], j);
+                if (j==HUMIDITY) {
+                    k=0;   printf("%s  = %0.2f%%   ", dbg_CharType[j], dataprint[j]);
+                } else
+                {
+                    k=j+1;
+                    if(j==PRESSURE)    printf("%s  = %0.1f hPa   ", dbg_CharType[j], dataprint[j]);
+                    else   printf("%s  = %0.2f degC   ", dbg_CharType[j], dataprint[j]);
+                }
+                break;
+            }
+        }
+    }
+    printf("\r\n");
+    bme280Characteristic[k].read();
+}
+
+// BLE disconnected
+void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *) {
+    printf("BLE disconnected\r\n");
+    /* Start scanning and try to connect again */
+    BLE::Instance().gap().startScan(advertisementCallback);
+}
+
+void onBleInitError(BLE &ble, ble_error_t error)
+{
+    /* Initialization error handling should go here */
+    printf("BLE Error = %u\r\n", error);
+}
+
+void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
+{
+    printf("I'm inside BLE init Complete\r\n");
+    BLE&        ble   = params->ble;
+    ble_error_t error = params->error;
+
+    if (error != BLE_ERROR_NONE) {
+        /* In case of error, forward the error handling to onBleInitError */
+        onBleInitError(ble, error);
+        return;
+    }
+
+    /* Ensure that it is the default instance of BLE */
+    if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
+        printf("Not the default instance\r\n");
+        return;
+    }
+
+    // Ren, clear discovered Characteristic at beginning
+    for(int i=0; i<HUMIDITY+1; i++)   {
+    	  dataprint[i]=0.0;     is_active[i]=false;
+    }
+
+    ble.gap().onDisconnection(disconnectionCallback);
+    ble.gap().onConnection(connectionCallback);
+
+    // On reading data, call triggerRead function.
+    ble.gattClient().onDataRead(triggerRead);
+
+    // scan interval: 400ms and scan window: 400ms.
+    // Every 400ms the device will scan for 400ms
+    // This means that the device will scan continuously.
+    ble.gap().setScanParams(400, 400);
+    error =   ble.gap().startScan(advertisementCallback);
+    printf("BLE Error startScan = %u\r\n", error);
+
+}
+
+void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
+    BLE &ble = BLE::Instance();
+    eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
+}
+
+/************************************************************BLE Stuff to here *********************************/
+
+void blinky() {
+    green_led = !green_led;
+}
+
+// These are example resource values for the Device Object
+struct MbedClientDevice device = {
+    "Manufacturer_String",      // Manufacturer
+    "Type_String",              // Type
+    "ModelNumber_String",       // ModelNumber
+    "SerialNumber_String"       // SerialNumber
+};
+
+// Instantiate the class which implements LWM2M Client API (from simpleclient.h)
+MbedClient mbed_client(device);
+
+// Network interaction must be performed outside of interrupt context
+Semaphore updates(0);
+volatile bool registered = false;
+volatile bool clicked = false;
+osThreadId mainThread;
+
+#ifdef TARGET_K64F
+// Set up Hardware interrupt button.
+InterruptIn obs_button(SW2);
+InterruptIn unreg_button(SW3);
+#else
+//In non K64F boards , set up a timer to simulate updating resource,
+// there is no functionality to unregister.
+Ticker timer;
+#endif
+
+/*
+ * The button contains one property (click count).
+ * When `handle_button_click` is executed, the counter updates.
+ */
+class ButtonResource {
+public:
+    ButtonResource(): counter(0) {
+        // create ObjectID with metadata tag of 'BTN_SW2', which is 'digital input'
+        btn_object = M2MInterfaceFactory::create_object("BTN_SW2");
+        M2MObjectInstance* btn_inst = btn_object->create_object_instance();
+        // create resource with ID '5501', which is digital input counter
+        M2MResource* btn_res = btn_inst->create_dynamic_resource("5501", "Button",
+            M2MResourceInstance::INTEGER, true /* observable */);
+        // we can read this value
+        btn_res->set_operation(M2MBase::GET_ALLOWED);
+        // set initial value (all values in mbed Client are buffers)
+        // to be able to read this data easily in the Connector console, we'll use a string
+        btn_res->set_value((uint8_t*)"0", 1);
+    }
+
+    ~ButtonResource() {
+    }
+
+    M2MObject* get_object() {
+        return btn_object;
+    }
+
+    /*
+     * When you press the button, we read the current value of the click counter
+     * from mbed Device Connector, then up the value with one.
+     */
+    void handle_button_click() {
+        M2MObjectInstance* inst = btn_object->object_instance();
+        M2MResource* res = inst->resource("5501");
+
+        // up counter
+        counter++;
+        printf("handle_button_click, new value of counter is %d\r\n", counter);
+        // serialize the value of counter as a string, and tell connector
+        char buffer[20];
+        int size = sprintf(buffer,"%d",counter);
+        res->set_value((uint8_t*)buffer, size);
+    }
+
+private:
+    M2MObject* btn_object;
+    uint16_t counter;
+};
+
+
+void unregister() {
+    registered = false;
+    updates.release();
+}
+
+void button_clicked() {
+    clicked = true;
+    updates.release();
+}
+
+// debug printf function
+void trace_printer(const char* str) {
+    printf("%s\r\n", str);
+}
+
+/****************************************************************More BLE Stuff from here****************/
+//BLE thread init and further calls to other BLE methods.
+void BLE_thread_init(void){
+    printf("I'm inside BLE thread_init.....\r\n");
+    eventQueue.call_every(500, blinky);
+    //Schedule events before starting the thread since there might be some missed events while scanning / pairing.
+    ble.onEventsToProcess(scheduleBleEventsProcessing);
+    ble.init(bleInitComplete);
+    //Loop forever the BLE thread
+    eventQueue.dispatch_forever();
+}
+
+/****************************************************************More BLE Stuff  to here****************/
+
+// Entry point to the program
+int main() {
+
+    unsigned int seed;
+    size_t len;
+
+    //Create a new thread for BLE
+    Thread BLE_thread;
+
+
+#ifdef MBEDTLS_ENTROPY_HARDWARE_ALT
+    // Used to randomize source port
+    mbedtls_hardware_poll(NULL, (unsigned char *) &seed, sizeof seed, &len);
+
+#elif defined MBEDTLS_TEST_NULL_ENTROPY
+
+#warning "mbedTLS security feature is disabled. Connection will not be secure !! Implement proper hardware entropy for your selected hardware."
+    // Used to randomize source port
+    mbedtls_null_entropy_poll( NULL,(unsigned char *) &seed, sizeof seed, &len);
+
+#else
+
+#error "This hardware does not have entropy, endpoint will not register to Connector.\
+You need to enable NULL ENTROPY for your application, but if this configuration change is made then no security is offered by mbed TLS.\
+Add MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES and MBEDTLS_TEST_NULL_ENTROPY in mbed_app.json macros to register your endpoint."
+
+#endif
+
+    srand(seed);
+    red_led = 1;
+    blue_led = 1;
+    status_ticker.attach_us(blinky, 250000);
+    // Keep track of the main thread
+    mainThread = osThreadGetId();
+
+    // Sets the console baud-rate
+    output.baud(9600);
+
+    output.printf("Starting mbed Client example...\r\n");
+
+    mbed_trace_init();
+    mbed_trace_print_function_set(trace_printer);
+    NetworkInterface *network_interface = 0;
+    int connect_success = -1;
+#if MBED_CONF_APP_NETWORK_INTERFACE == WIFI
+    output.printf("\n\rUsing WiFi \r\n");
+    output.printf("\n\rConnecting to WiFi..\r\n");
+    connect_success = esp.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD);
+    network_interface = &esp;
+#elif MBED_CONF_APP_NETWORK_INTERFACE == ETHERNET
+    output.printf("Using Ethernet\r\n");
+    connect_success = eth.connect();
+    network_interface = &eth;
+#endif
+#ifdef MESH
+    output.printf("Using Mesh\r\n");
+    output.printf("\n\rConnecting to Mesh..\r\n");
+    mesh.initialize(&rf_phy);
+    connect_success = mesh.connect();
+    network_interface = &mesh;
+#endif
+    if(connect_success == 0) {
+        output.printf("\n\rConnected to Network successfully\r\n");
+    } else {
+        output.printf("\n\rConnection to Network Failed %d! Exiting application....\r\n", connect_success);
+        return 0;
+    }
+    const char *ip_addr = network_interface->get_ip_address();
+    if (ip_addr) {
+        output.printf("IP address %s\r\n", ip_addr);
+    } else {
+        output.printf("No IP address\r\n");
+    }
+
+    // create our button resources
+    ButtonResource button_resource;
+#ifdef TARGET_K64F
+    // On press of SW3 button on K64F board, example application
+    // will call unregister API towards mbed Device Connector
+    //unreg_button.fall(&mbed_client,&MbedClient::test_unregister);
+    unreg_button.fall(&unregister);
+
+    // Observation Button (SW2) press will send update of endpoint resource values to connector
+    obs_button.fall(&button_clicked);
+#else
+    // Send update of endpoint resource values to connector every 5 seconds periodically
+    timer.attach(&button_clicked, 5.0);
+#endif
+
+    // Create endpoint interface to manage register and unregister
+    mbed_client.create_interface(MBED_SERVER_ADDRESS, network_interface);
+
+    // Create Objects of varying types, see simpleclient.h for more details on implementation.
+    M2MSecurity* register_object = mbed_client.create_register_object(); // server object specifying connector info
+    M2MDevice*   device_object   = mbed_client.create_device_object();   // device resources object
+
+    // Create list of Objects to register
+    M2MObjectList object_list;
+
+    // Add objects to list
+    object_list.push_back(device_object);
+    object_list.push_back(button_resource.get_object());
+    // add bme280 data objects
+    if (demo1==NULL)   {
+        //	Create bme280 instance
+        demo1=new BME280Resource();
+    	  printf("created bme280 instance now!!\r\n");
+    }
+    object_list.push_back(demo1->get_object(PRESSURE));
+    object_list.push_back(demo1->get_object(TEMPERATURE));
+    object_list.push_back(demo1->get_object(HUMIDITY));
+
+    // Set endpoint registration object
+    mbed_client.set_register_object(register_object);
+
+    // Register with mbed Device Connector
+    mbed_client.test_register(register_object, object_list);
+    registered = true;
+
+    //Start BLE thread after connection is established to device connector. Else, there is conflict.
+	  BLE_thread.start(BLE_thread_init);
+    // waiting for completion of BLE_thread_init
+    Thread::wait(2000);
+    while (true) {
+
+	      printf("inside main for client\r\n");
+        triggerLedCharacteristic = false;
+
+        updates.wait(25000);
+        if(registered) {
+            if(!clicked) {
+                //printf("Inside registered ... clicked \r\n");
+                mbed_client.test_update_register();
+            }
+        } else {   // not registered, then stop;
+            break;
+        }
+        if(clicked) {
+           clicked = false;
+           button_resource.handle_button_click();
+        }
+
+    }
+
+    mbed_client.test_unregister();
+    status_ticker.detach();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client.lib	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-client/#d41459d8b514d72d525e761fb4e34031e09f76e7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/FETCH_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,87 @@
+2269b33a792389d2017e79b021517289b54d740e	not-for-merge	branch 'Black_Duck' of https://github.com/ARMmbed/mbed-client
+4262f3f7025817b8297f183b8045a4d4e571bed0	not-for-merge	branch 'Execute_operation' of https://github.com/ARMmbed/mbed-client
+dc2d3d9269170e43f4374a69fb652d9f6604e3e7	not-for-merge	branch 'Flag_MBED_CLIENT_SUPPORT_INTERFACE_DESCRIPTION_PTR' of https://github.com/ARMmbed/mbed-client
+1f845a27ec6e6e6a03064d498ebf24b01cdc2156	not-for-merge	branch 'IOTCLT-961' of https://github.com/ARMmbed/mbed-client
+d24e70e8034ab90c0cd4ba343bbc3f1bc81b3b09	not-for-merge	branch 'IOTSVS-683' of https://github.com/ARMmbed/mbed-client
+e0623df87096c1ff3d6bb4f0724b482d0f4c2cc3	not-for-merge	branch 'LinuxPort' of https://github.com/ARMmbed/mbed-client
+2f92b42c05a82b765f71eeaa4bad221bf505b18f	not-for-merge	branch 'LinuxPort2' of https://github.com/ARMmbed/mbed-client
+d7aedfe8e22c1062ac6a92fe48b8bfdff43d6d8f	not-for-merge	branch 'TLV_binary_integer' of https://github.com/ARMmbed/mbed-client
+7b0b9db295d4dface6fb375eca895da467aff780	not-for-merge	branch 'alpha2-release' of https://github.com/ARMmbed/mbed-client
+fc80ee7d7c16cd6829ae26256296ce3083c6b602	not-for-merge	branch 'anttiylitokola-patch-1' of https://github.com/ARMmbed/mbed-client
+e2318bc3f9f65da5fb11e27c0ab59f87ce22164d	not-for-merge	branch 'api-for-cert-verify' of https://github.com/ARMmbed/mbed-client
+141edae8a22ba36ac9b5210250eccdbf7b1117a9	not-for-merge	branch 'api_extension' of https://github.com/ARMmbed/mbed-client
+1303a61b91709f3d8cf27eb98d4ad616ddc9a453	not-for-merge	branch 'api_refactor' of https://github.com/ARMmbed/mbed-client
+d49be9ca676b09058ba35394fd9a04d37b684317	not-for-merge	branch 'base_memory_opt' of https://github.com/ARMmbed/mbed-client
+41f8fc41816ffe09c4a1f43831f3cd357e4a0c38	not-for-merge	branch 'blocks_to_flash' of https://github.com/ARMmbed/mbed-client
+56d08cb8080b68610e5e7dac8a146a4080f31252	not-for-merge	branch 'bootstrap' of https://github.com/ARMmbed/mbed-client
+0b12158e1e53a141cc39e29adae5cce9b5c9ae91	not-for-merge	branch 'bootstrap_fix' of https://github.com/ARMmbed/mbed-client
+707bf8e0744aa596d896890e57b0c7bbdf90833d	not-for-merge	branch 'bootstrap_support' of https://github.com/ARMmbed/mbed-client
+e33986707ddf6e2ac12dd4950c081fb8974ce942	not-for-merge	branch 'build-ignore' of https://github.com/ARMmbed/mbed-client
+99c2fd025825cc9cd441825f5e70b4a5ca17cfc9	not-for-merge	branch 'build-warning' of https://github.com/ARMmbed/mbed-client
+5e396e2cb29981456ae7e4d7a4bcc03d4b168714	not-for-merge	branch 'callback_memory_optimizations' of https://github.com/ARMmbed/mbed-client
+9424b064e9c629fff6ac99a6e57d1dc97be12508	not-for-merge	branch 'classic_unit_test_fix' of https://github.com/ARMmbed/mbed-client
+cdaa07d6fc6a416feb8b1b448c6d2bcc6c12433f	not-for-merge	branch 'cloud_rel1.2' of https://github.com/ARMmbed/mbed-client
+2bbf9a858b0088cc3fbb8fe9b5e92c46202dca98	not-for-merge	branch 'coap-option-tidy' of https://github.com/ARMmbed/mbed-client
+481514bcc8582cebf605a85ea2b605782bd3bdba	not-for-merge	branch 'coap_separation' of https://github.com/ARMmbed/mbed-client
+ea2ea45f20b97647df98aba9fc78b294c4bab05e	not-for-merge	branch 'compiler_warning_fixes' of https://github.com/ARMmbed/mbed-client
+75bbebf4374f320f4c2246ffa526b2ca624a68d9	not-for-merge	branch 'config-mechanism' of https://github.com/ARMmbed/mbed-client
+94719c136eb34571129e7d5af3cb9163f6ea8d0d	not-for-merge	branch 'config-parameters' of https://github.com/ARMmbed/mbed-client
+79fca5837b5bcd0e054ef4f3f2bdc762d69f08aa	not-for-merge	branch 'data_api_constifying' of https://github.com/ARMmbed/mbed-client
+5eca39b9689636770c5702a5bca260c81af786e9	not-for-merge	branch 'debugging' of https://github.com/ARMmbed/mbed-client
+fe77efc2424911dd110aab5d9c9723ba35d7b324	not-for-merge	branch 'device_object' of https://github.com/ARMmbed/mbed-client
+3ae8e51a9751b71cfa96039ca387d8998fc2e374	not-for-merge	branch 'doc-update-api' of https://github.com/ARMmbed/mbed-client
+4ac8a398a0e69f2167d375cc72abab8a7fd13f5d	not-for-merge	branch 'dynamic_memory_options' of https://github.com/ARMmbed/mbed-client
+5b49e360ffa35d4e01f0576b97c6ca6548b87370	not-for-merge	branch 'execute_params_optimization' of https://github.com/ARMmbed/mbed-client
+b417281f224c2d648249dab73c036ccc9275a259	not-for-merge	branch 'fix_unittests_ip6tos' of https://github.com/ARMmbed/mbed-client
+4a222583c9ad3e68c421328bd20d1db2505a6b1d	not-for-merge	branch 'fixes_for_observation_cases' of https://github.com/ARMmbed/mbed-client
+f49f8ce6055898084aa3fb36abc96d8bc7ced00d	not-for-merge	branch 'hide_string_setters' of https://github.com/ARMmbed/mbed-client
+b274bb23b86c433ba0bebd1ff5fab95fd7b90abb	not-for-merge	branch 'iar_debug_hacks' of https://github.com/ARMmbed/mbed-client
+f0706ffc64df7ec8e01e0437acc7a268bfa64bd7	not-for-merge	branch 'ignore-duplicate' of https://github.com/ARMmbed/mbed-client
+ac323a053046adce4f445b487a725309887a3009	not-for-merge	branch 'init_path_member_by_real_data' of https://github.com/ARMmbed/mbed-client
+5d2bb9674d800d2d1fd1fd1e83706b85ea246001	not-for-merge	branch 'iotclt-1318' of https://github.com/ARMmbed/mbed-client
+a3e218517381669dab3976507787d2b7e104b8f8	not-for-merge	branch 'makefile_compilation' of https://github.com/ARMmbed/mbed-client
+dfb5ce665121b9f3816522087ad6cad9b3ab4006	not-for-merge	branch 'master' of https://github.com/ARMmbed/mbed-client
+13518102c74947f4e87699fca6c0ef81ca003ae8	not-for-merge	branch 'mbed-client-mbed-tls-update' of https://github.com/ARMmbed/mbed-client
+4e39566e3e1cf05cd36afe4266acae4bf018130b	not-for-merge	branch 'mbed-client_ram_opt' of https://github.com/ARMmbed/mbed-client
+275400c74a222ccdbfc1f9af2072e3125fca2384	not-for-merge	branch 'mbed-cloud-client-rel1.2' of https://github.com/ARMmbed/mbed-client
+09d27d881b797d8299461bf11071feb2299e5768	not-for-merge	branch 'mbed-cloud-client-rel1.2-int' of https://github.com/ARMmbed/mbed-client
+85ef66c4282eef70fdfe1a4a7cd3dcd7291a2b01	not-for-merge	branch 'mbed_os_5_4_rc' of https://github.com/ARMmbed/mbed-client
+5f0a5b8005619f346c1ce45113b655ae687bfb75	not-for-merge	branch 'mem_opt_phase_2' of https://github.com/ARMmbed/mbed-client
+c9479fdd56ce4b0250cd33f492abf3436fc33fd0	not-for-merge	branch 'mem_opt_phase_3' of https://github.com/ARMmbed/mbed-client
+01190b59e18bbea165bcaa99f5ad93aeddd23d7f	not-for-merge	branch 'memopt_heap_allocated_connection_security' of https://github.com/ARMmbed/mbed-client
+d2412b5dd77c8c67919f6da663f1059b70b13e35	not-for-merge	branch 'memopt_heap_allocated_objects' of https://github.com/ARMmbed/mbed-client
+90eb1f1e12ee53163c4110eb5991a630d674230a	not-for-merge	branch 'memory_optimizations' of https://github.com/ARMmbed/mbed-client
+be64826994790723d27a35b5e5183450ef979534	not-for-merge	branch 'memory_optimizations_base' of https://github.com/ARMmbed/mbed-client
+f9e294d7f237045e06d2f684cf1473e733963c0e	not-for-merge	branch 'memory_savings' of https://github.com/ARMmbed/mbed-client
+a838866e20e15d2293a40e8a3a9c75e87981fd86	not-for-merge	branch 'misc_refactoring' of https://github.com/ARMmbed/mbed-client
+4c4f11287c2caa34185791231e5584836e835d35	not-for-merge	branch 'more_coap_message_tracing' of https://github.com/ARMmbed/mbed-client
+9586deb5c6cfbfc168f0d7abf917160b2b235069	not-for-merge	branch 'nsdl-functions-mutexed' of https://github.com/ARMmbed/mbed-client
+a37cbb4c9f02f1a594e63ac937956093c9714c30	not-for-merge	branch 'nsdl-interface-list-accesses' of https://github.com/ARMmbed/mbed-client
+c78dabf2127827504f9430e51b83bfee2a82df22	not-for-merge	branch 'nsdl-mutex-to-member' of https://github.com/ARMmbed/mbed-client
+47685fce59db930dc8cebe6702cdfbe50780a64b	not-for-merge	branch 'obs_parameter_refactor' of https://github.com/ARMmbed/mbed-client
+89a6e5be808a5ef9b889223a83a5c7e9e6a45e8d	not-for-merge	branch 'oma_test_fest' of https://github.com/ARMmbed/mbed-client
+c845fb80d47e87ff61b5d9c4592cb0e24c4f4473	not-for-merge	branch 'opaque_content' of https://github.com/ARMmbed/mbed-client
+df7e8df3fafa03320b2b004a6a41156c13661e9f	not-for-merge	branch 'pal_tls' of https://github.com/ARMmbed/mbed-client
+4028c0a2c3ac201128b686010c98c9540816cf6e	not-for-merge	branch 'port-randomization' of https://github.com/ARMmbed/mbed-client
+353686bc91053f8bc1e0417839f76cb834bfa13c	not-for-merge	branch 'porting-guide-doc' of https://github.com/ARMmbed/mbed-client
+0b66ec9d3f0f6288d35e568e41731412676a6859	not-for-merge	branch 'put_change' of https://github.com/ARMmbed/mbed-client
+aaef1ee1cbf32064ca60a2ec927b25c46e87f3cd	not-for-merge	branch 'ram_savings' of https://github.com/ARMmbed/mbed-client
+d3872b9c84f1ce9f257c1ded79e0cc83e8ffad84	not-for-merge	branch 'rand_port_fix' of https://github.com/ARMmbed/mbed-client
+db1daaa9760aa74916b0701c627a758a7803434b	not-for-merge	branch 'reconnection_fix' of https://github.com/ARMmbed/mbed-client
+2524e01a2f730e604b9093142baad1feb15289a5	not-for-merge	branch 'refactor_memory_allocations' of https://github.com/ARMmbed/mbed-client
+e6f059c1053cd84ae1ee9f4e41c5b3564eb3727c	not-for-merge	branch 'refactor_observation_handler_owner' of https://github.com/ARMmbed/mbed-client
+065bd0f299fccde5f13ff9aa1a7522455b527219	not-for-merge	branch 'refactor_resource_inheritance' of https://github.com/ARMmbed/mbed-client
+fc2692ec830dcd05c10bbdd01ef1366bfd0ca1f4	not-for-merge	branch 'reg_fix_after_bs' of https://github.com/ARMmbed/mbed-client
+7df139957086eb51cdc5d436c6ea39d3a083bf80	not-for-merge	branch 'reg_update-1' of https://github.com/ARMmbed/mbed-client
+5c2617e7613ffe6bc147d03f9f0fb6a957bdba3c	not-for-merge	branch 'registration-error' of https://github.com/ARMmbed/mbed-client
+0e65fa1008e6e5999279d1f774c96214df61b50b	not-for-merge	branch 'remove_location_ptr_copy' of https://github.com/ARMmbed/mbed-client
+11c550b4e9a022706690073d9c23befdaf0e3626	not-for-merge	branch 'revert-402-coap_separation' of https://github.com/ARMmbed/mbed-client
+c2c2b52dd58a4bbf5301137305e47bff454478c4	not-for-merge	branch 'revert_value_updated' of https://github.com/ARMmbed/mbed-client
+d9f959da26c5f69ee4b2a35ed128c9a8bc7e8210	not-for-merge	branch 'rework_mem_opt_m2m_virtual' of https://github.com/ARMmbed/mbed-client
+d731109741cd82ce8188cb2ad71e0ebf5e2a14c5	not-for-merge	branch 'small_cleanups' of https://github.com/ARMmbed/mbed-client
+861fdbcebb8333e9dbc91556ddde6ddb2de1ed89	not-for-merge	branch 'subscription-token' of https://github.com/ARMmbed/mbed-client
+3314a8657b073e5710abf9cc0a6440fe05144bb5	not-for-merge	branch 'template' of https://github.com/ARMmbed/mbed-client
+c6565220df705b0559206aee6986267f0abcf23c	not-for-merge	branch 'thread-sync-fix' of https://github.com/ARMmbed/mbed-client
+9e70addf8160ad3c7f0b596fc769ca0eeb94a1d1	not-for-merge	branch 'tools_check' of https://github.com/ARMmbed/mbed-client
+72c60cd9447b4b2776fd9915be0d5fc3501a38df	not-for-merge	branch 'unit_test_compilation_fix' of https://github.com/ARMmbed/mbed-client
+96ef8f95512592b2f333cf269569b3a28dfc3464	not-for-merge	branch 'update-mbed-tls-hash' of https://github.com/ARMmbed/mbed-client
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+d41459d8b514d72d525e761fb4e34031e09f76e7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/ORIG_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+dfb5ce665121b9f3816522087ad6cad9b3ab4006
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/config	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,11 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[remote "origin"]
+	fetch = +refs/heads/*:refs/remotes/origin/*
+	url = https://github.com/ARMmbed/mbed-client/
+[branch "master"]
+	remote = origin
+	merge = refs/heads/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/description	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/hooks/applypatch-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/hooks/commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/hooks/post-update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/hooks/pre-applypatch.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/hooks/pre-commit.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	echo "Error: Attempt to add a non-ascii file name."
+	echo
+	echo "This can cause problems if you want to work"
+	echo "with people on other platforms."
+	echo
+	echo "To be portable it is advisable to rename the file ..."
+	echo
+	echo "If you know what you are doing you can disable this"
+	echo "check using:"
+	echo
+	echo "  git config hooks.allownonascii true"
+	echo
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/hooks/pre-rebase.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/hooks/prepare-commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/hooks/update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
Binary file mbed-client/.git/index has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/info/exclude	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,27 @@
+.hg
+.git
+.svn
+.CVS
+.cvs
+*.orig
+.build
+.export
+.msub
+.meta
+.ctags*
+*.uvproj
+*.uvopt
+*.project
+*.cproject
+*.launch
+*.ewp
+*.eww
+Makefile
+Debug
+*.htm
+*.settings
+mbed_settings.py
+*.py[cod]
+# subrepo ignores
+mbed-client-classic
+mbed-client-mbed-tls
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/logs/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+0000000000000000000000000000000000000000 dfb5ce665121b9f3816522087ad6cad9b3ab4006 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056525 +0000	clone: from https://github.com/ARMmbed/mbed-client/
+dfb5ce665121b9f3816522087ad6cad9b3ab4006 d41459d8b514d72d525e761fb4e34031e09f76e7 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056528 +0000	checkout: moving from master to d41459d8b514d72d525e761fb4e34031e09f76e7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/logs/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 dfb5ce665121b9f3816522087ad6cad9b3ab4006 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056525 +0000	clone: from https://github.com/ARMmbed/mbed-client/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/logs/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 dfb5ce665121b9f3816522087ad6cad9b3ab4006 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056525 +0000	clone: from https://github.com/ARMmbed/mbed-client/
Binary file mbed-client/.git/objects/pack/pack-1cbd974d7b0794a233df1871a0746c72b56dea00.idx has changed
Binary file mbed-client/.git/objects/pack/pack-1cbd974d7b0794a233df1871a0746c72b56dea00.pack has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/packed-refs	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,387 @@
+# pack-refs with: peeled 
+2269b33a792389d2017e79b021517289b54d740e refs/remotes/origin/Black_Duck
+4262f3f7025817b8297f183b8045a4d4e571bed0 refs/remotes/origin/Execute_operation
+dc2d3d9269170e43f4374a69fb652d9f6604e3e7 refs/remotes/origin/Flag_MBED_CLIENT_SUPPORT_INTERFACE_DESCRIPTION_PTR
+1f845a27ec6e6e6a03064d498ebf24b01cdc2156 refs/remotes/origin/IOTCLT-961
+d24e70e8034ab90c0cd4ba343bbc3f1bc81b3b09 refs/remotes/origin/IOTSVS-683
+e0623df87096c1ff3d6bb4f0724b482d0f4c2cc3 refs/remotes/origin/LinuxPort
+2f92b42c05a82b765f71eeaa4bad221bf505b18f refs/remotes/origin/LinuxPort2
+d7aedfe8e22c1062ac6a92fe48b8bfdff43d6d8f refs/remotes/origin/TLV_binary_integer
+7b0b9db295d4dface6fb375eca895da467aff780 refs/remotes/origin/alpha2-release
+fc80ee7d7c16cd6829ae26256296ce3083c6b602 refs/remotes/origin/anttiylitokola-patch-1
+e2318bc3f9f65da5fb11e27c0ab59f87ce22164d refs/remotes/origin/api-for-cert-verify
+141edae8a22ba36ac9b5210250eccdbf7b1117a9 refs/remotes/origin/api_extension
+1303a61b91709f3d8cf27eb98d4ad616ddc9a453 refs/remotes/origin/api_refactor
+d49be9ca676b09058ba35394fd9a04d37b684317 refs/remotes/origin/base_memory_opt
+41f8fc41816ffe09c4a1f43831f3cd357e4a0c38 refs/remotes/origin/blocks_to_flash
+56d08cb8080b68610e5e7dac8a146a4080f31252 refs/remotes/origin/bootstrap
+0b12158e1e53a141cc39e29adae5cce9b5c9ae91 refs/remotes/origin/bootstrap_fix
+707bf8e0744aa596d896890e57b0c7bbdf90833d refs/remotes/origin/bootstrap_support
+e33986707ddf6e2ac12dd4950c081fb8974ce942 refs/remotes/origin/build-ignore
+99c2fd025825cc9cd441825f5e70b4a5ca17cfc9 refs/remotes/origin/build-warning
+5e396e2cb29981456ae7e4d7a4bcc03d4b168714 refs/remotes/origin/callback_memory_optimizations
+9424b064e9c629fff6ac99a6e57d1dc97be12508 refs/remotes/origin/classic_unit_test_fix
+cdaa07d6fc6a416feb8b1b448c6d2bcc6c12433f refs/remotes/origin/cloud_rel1.2
+2bbf9a858b0088cc3fbb8fe9b5e92c46202dca98 refs/remotes/origin/coap-option-tidy
+481514bcc8582cebf605a85ea2b605782bd3bdba refs/remotes/origin/coap_separation
+ea2ea45f20b97647df98aba9fc78b294c4bab05e refs/remotes/origin/compiler_warning_fixes
+75bbebf4374f320f4c2246ffa526b2ca624a68d9 refs/remotes/origin/config-mechanism
+94719c136eb34571129e7d5af3cb9163f6ea8d0d refs/remotes/origin/config-parameters
+79fca5837b5bcd0e054ef4f3f2bdc762d69f08aa refs/remotes/origin/data_api_constifying
+5eca39b9689636770c5702a5bca260c81af786e9 refs/remotes/origin/debugging
+fe77efc2424911dd110aab5d9c9723ba35d7b324 refs/remotes/origin/device_object
+3ae8e51a9751b71cfa96039ca387d8998fc2e374 refs/remotes/origin/doc-update-api
+4ac8a398a0e69f2167d375cc72abab8a7fd13f5d refs/remotes/origin/dynamic_memory_options
+5b49e360ffa35d4e01f0576b97c6ca6548b87370 refs/remotes/origin/execute_params_optimization
+b417281f224c2d648249dab73c036ccc9275a259 refs/remotes/origin/fix_unittests_ip6tos
+4a222583c9ad3e68c421328bd20d1db2505a6b1d refs/remotes/origin/fixes_for_observation_cases
+f49f8ce6055898084aa3fb36abc96d8bc7ced00d refs/remotes/origin/hide_string_setters
+b274bb23b86c433ba0bebd1ff5fab95fd7b90abb refs/remotes/origin/iar_debug_hacks
+f0706ffc64df7ec8e01e0437acc7a268bfa64bd7 refs/remotes/origin/ignore-duplicate
+ac323a053046adce4f445b487a725309887a3009 refs/remotes/origin/init_path_member_by_real_data
+5d2bb9674d800d2d1fd1fd1e83706b85ea246001 refs/remotes/origin/iotclt-1318
+a3e218517381669dab3976507787d2b7e104b8f8 refs/remotes/origin/makefile_compilation
+dfb5ce665121b9f3816522087ad6cad9b3ab4006 refs/remotes/origin/master
+13518102c74947f4e87699fca6c0ef81ca003ae8 refs/remotes/origin/mbed-client-mbed-tls-update
+4e39566e3e1cf05cd36afe4266acae4bf018130b refs/remotes/origin/mbed-client_ram_opt
+275400c74a222ccdbfc1f9af2072e3125fca2384 refs/remotes/origin/mbed-cloud-client-rel1.2
+09d27d881b797d8299461bf11071feb2299e5768 refs/remotes/origin/mbed-cloud-client-rel1.2-int
+85ef66c4282eef70fdfe1a4a7cd3dcd7291a2b01 refs/remotes/origin/mbed_os_5_4_rc
+5f0a5b8005619f346c1ce45113b655ae687bfb75 refs/remotes/origin/mem_opt_phase_2
+c9479fdd56ce4b0250cd33f492abf3436fc33fd0 refs/remotes/origin/mem_opt_phase_3
+01190b59e18bbea165bcaa99f5ad93aeddd23d7f refs/remotes/origin/memopt_heap_allocated_connection_security
+d2412b5dd77c8c67919f6da663f1059b70b13e35 refs/remotes/origin/memopt_heap_allocated_objects
+90eb1f1e12ee53163c4110eb5991a630d674230a refs/remotes/origin/memory_optimizations
+be64826994790723d27a35b5e5183450ef979534 refs/remotes/origin/memory_optimizations_base
+f9e294d7f237045e06d2f684cf1473e733963c0e refs/remotes/origin/memory_savings
+a838866e20e15d2293a40e8a3a9c75e87981fd86 refs/remotes/origin/misc_refactoring
+4c4f11287c2caa34185791231e5584836e835d35 refs/remotes/origin/more_coap_message_tracing
+9586deb5c6cfbfc168f0d7abf917160b2b235069 refs/remotes/origin/nsdl-functions-mutexed
+a37cbb4c9f02f1a594e63ac937956093c9714c30 refs/remotes/origin/nsdl-interface-list-accesses
+c78dabf2127827504f9430e51b83bfee2a82df22 refs/remotes/origin/nsdl-mutex-to-member
+47685fce59db930dc8cebe6702cdfbe50780a64b refs/remotes/origin/obs_parameter_refactor
+89a6e5be808a5ef9b889223a83a5c7e9e6a45e8d refs/remotes/origin/oma_test_fest
+c845fb80d47e87ff61b5d9c4592cb0e24c4f4473 refs/remotes/origin/opaque_content
+df7e8df3fafa03320b2b004a6a41156c13661e9f refs/remotes/origin/pal_tls
+4028c0a2c3ac201128b686010c98c9540816cf6e refs/remotes/origin/port-randomization
+353686bc91053f8bc1e0417839f76cb834bfa13c refs/remotes/origin/porting-guide-doc
+0b66ec9d3f0f6288d35e568e41731412676a6859 refs/remotes/origin/put_change
+aaef1ee1cbf32064ca60a2ec927b25c46e87f3cd refs/remotes/origin/ram_savings
+d3872b9c84f1ce9f257c1ded79e0cc83e8ffad84 refs/remotes/origin/rand_port_fix
+db1daaa9760aa74916b0701c627a758a7803434b refs/remotes/origin/reconnection_fix
+2524e01a2f730e604b9093142baad1feb15289a5 refs/remotes/origin/refactor_memory_allocations
+e6f059c1053cd84ae1ee9f4e41c5b3564eb3727c refs/remotes/origin/refactor_observation_handler_owner
+065bd0f299fccde5f13ff9aa1a7522455b527219 refs/remotes/origin/refactor_resource_inheritance
+fc2692ec830dcd05c10bbdd01ef1366bfd0ca1f4 refs/remotes/origin/reg_fix_after_bs
+7df139957086eb51cdc5d436c6ea39d3a083bf80 refs/remotes/origin/reg_update-1
+5c2617e7613ffe6bc147d03f9f0fb6a957bdba3c refs/remotes/origin/registration-error
+0e65fa1008e6e5999279d1f774c96214df61b50b refs/remotes/origin/remove_location_ptr_copy
+11c550b4e9a022706690073d9c23befdaf0e3626 refs/remotes/origin/revert-402-coap_separation
+c2c2b52dd58a4bbf5301137305e47bff454478c4 refs/remotes/origin/revert_value_updated
+d9f959da26c5f69ee4b2a35ed128c9a8bc7e8210 refs/remotes/origin/rework_mem_opt_m2m_virtual
+d731109741cd82ce8188cb2ad71e0ebf5e2a14c5 refs/remotes/origin/small_cleanups
+861fdbcebb8333e9dbc91556ddde6ddb2de1ed89 refs/remotes/origin/subscription-token
+3314a8657b073e5710abf9cc0a6440fe05144bb5 refs/remotes/origin/template
+c6565220df705b0559206aee6986267f0abcf23c refs/remotes/origin/thread-sync-fix
+9e70addf8160ad3c7f0b596fc769ca0eeb94a1d1 refs/remotes/origin/tools_check
+72c60cd9447b4b2776fd9915be0d5fc3501a38df refs/remotes/origin/unit_test_compilation_fix
+96ef8f95512592b2f333cf269569b3a28dfc3464 refs/remotes/origin/update-mbed-tls-hash
+6bb3f5c830a9298b0eacf1b7510f6937f1fab3db refs/tags/RR1.2.0-RC1
+^6bc99d4730d6eb3c84ce8cdb9fcbd9326466302e
+e7f888a83b664c1a4a8d6f8e2a9807be20579806 refs/tags/RR1.2.0-RC2
+^398941f5e9e1f229cc06764cd05b85f8eae4c01c
+4903f81cac137f0cfb295b395d45b63de87eb258 refs/tags/RR1.2.0-RC3
+^275400c74a222ccdbfc1f9af2072e3125fca2384
+eebed4dbb50941ca13ed35bbaa35c533c0484e2c refs/tags/RR1.2.0-RC4
+^275400c74a222ccdbfc1f9af2072e3125fca2384
+cfd66cb8f296c657c8bd8e9013878876877c957d refs/tags/beta-release
+a5fd1023f901dda24cc07d8270c1dba1fe1a37b3 refs/tags/mbed-os-5.0-rc1
+^909f2dc4bb792352e71f55b99f80240476cbab19
+85389d63c5401a89842762070211a9410de15f06 refs/tags/mbed-os-5.0-rc2
+^91310afd5c441feea81d6b94ec232f5900ed948e
+ddf201ce71fa46af04a7ad231401a1568dcc6786 refs/tags/mbedCloudClient-R1.1
+^c767032d7ad708a6684bd7fb5ad8379966dedb49
+f8552cddd864b08c62b72ef702f55a98d9eb8d23 refs/tags/mbedCloudClient-R1.1-RC1
+^c767032d7ad708a6684bd7fb5ad8379966dedb49
+906dc52f4002c2fa1127155d262f17fabdf75be6 refs/tags/mbedCloudClient-R1.1-RC2
+^c767032d7ad708a6684bd7fb5ad8379966dedb49
+1906f8e5d1b929c70291057a2dc4ff5bd4ce4844 refs/tags/mbedCloudClient-R1.1-RC3
+^c767032d7ad708a6684bd7fb5ad8379966dedb49
+8392151ab6fccc7cfc20151d78687dc519668e81 refs/tags/mbedCloudClient-r0.8
+^1c03b36ac944532688a39d9a6bd7f8a42aecf8f3
+2b3b6adc9016ad72635a6807624eff06c7f912a8 refs/tags/mbedCloudClient-r0.8.1
+^1c03b36ac944532688a39d9a6bd7f8a42aecf8f3
+5a4e8e59ce87654bb0f85eb2a6825743b93d4e47 refs/tags/mbedCloudClient-r0.8.2
+^1c03b36ac944532688a39d9a6bd7f8a42aecf8f3
+1f540e75e65e676692b57c65c67c47a2aabcc15c refs/tags/mbedCloudClient-r1.0
+^1c03b36ac944532688a39d9a6bd7f8a42aecf8f3
+7b0b9db295d4dface6fb375eca895da467aff780 refs/tags/mbedOS-alpha2
+c19fd7f549448639521ce89906be66d38d94608b refs/tags/mbedos-16.01-release
+c19fd7f549448639521ce89906be66d38d94608b refs/tags/mbedos-16.03-release
+f2cc1fca954bbe77446068557679dd172cf9c8b8 refs/tags/mbedos-2016q1-oob1
+bc0b977461ba29f9d6a521b75fb324164da69695 refs/tags/mbedos-2016q1-oob2
+c19fd7f549448639521ce89906be66d38d94608b refs/tags/mbedos-2016q1-oob3
+8085b7fd398b5f06c16e2438c74a0db1f4aff094 refs/tags/mbedos-release-15-11
+2fcc5efd3c4ee4f0d3175ccd0f36a8bcca16302e refs/tags/mbedos-techcon-oob2
+1362e54918cb764c91684383770ae6484cd35f23 refs/tags/r0.5-rc4
+^87b35f76c88cb42b4ff439344328423d8c4b1227
+7e09b35136f31281fadc8b70de6685729340f64e refs/tags/test_tag
+^1c03b36ac944532688a39d9a6bd7f8a42aecf8f3
+89cc356fe895cff2bbd98e26f8eaf1a993235387 refs/tags/v0.1.1
+3447a09148b0a1a18284deadffd924c930574f02 refs/tags/v0.1.10
+7b176af290ca2b4e17632acb1665e3cb6c877e9b refs/tags/v0.1.11
+95cc08baf79ec4190e955745eeb8faab074e0b6a refs/tags/v0.1.12
+ac36686dadd27a3c4e81e94f71c8c787eaaf9b81 refs/tags/v0.1.13
+75f3afd443385a9fa03d83ad71726642ad5aee33 refs/tags/v0.1.2
+d111d8eb455616607b8c16e18a928e7bcdd4fc38 refs/tags/v0.1.3
+e1eb5279eb3db1433fd0adc17455b82dd8baa6ec refs/tags/v0.1.4
+539d456d0e40eafb3324bb7a446627d13161ff9a refs/tags/v0.1.5
+df922bd2c2c7ea3e88ae98ee5db085ebd5499d34 refs/tags/v0.1.6
+ec83b3eaf9622e8e6f60642888cc18e648c620f2 refs/tags/v0.1.7
+0afa8147acf6fad513ebff569bc9934e1cbc54a0 refs/tags/v0.1.8
+f1020e866fb58d54d75eb5ba2c7258ce3d8963ba refs/tags/v0.1.9
+31f17389e0fea0f1eedf14d3c43224d43dd640f4 refs/tags/v0.2.1
+5869e3703a4c011c591858f0b90306ff7efc3168 refs/tags/v0.2.10
+^8fab59f31000ce5799f7a9a8c2a5dbbaa9702609
+54d066320d1a1b5ae5a14cd953991361552ad06b refs/tags/v0.2.11
+^47020cb207781dda8f8daf3c10cf5aae96cb30dd
+beb838a31275fcc8186f62e566a5de1c9b119532 refs/tags/v0.2.12
+^4d94c599a6cacb847dea6f6eab896ec047ff654d
+92aaa1230523e28fb0c956591c315f77ecc1b3dd refs/tags/v0.2.13
+^4f173bcee16ba7d9fd69c485cf9e4bc8fc8a9ca4
+d4ee134d2446634151e331319c8930d38f2fbb30 refs/tags/v0.2.14
+^e5233839c1f96b08a86fc53514cd964d8ef7f802
+1551e7d7e0fb3894b0cf4911171ff7a91d3ad4c1 refs/tags/v0.2.15
+^f421338563e816b66fd058e523ba527d2306bd98
+90c640f6f92cde424ac1de3d9080625b55a126ca refs/tags/v0.2.16
+^015dad1380c2944039d6a062c522204a6683b4e5
+70c516925362ef1dbaa3b94bd8e1d27dd700193b refs/tags/v0.2.17
+^05ef7d4cea7e914160c16879e735bfb11a49429c
+ed5a5290bb0cc9115af89d5ff9892e842b550064 refs/tags/v0.2.18
+^3cc12c95289d86c6a59770df0f72a6cf70b2f01d
+318b5f54c66db7621fb1f71b6f50a08414430478 refs/tags/v0.2.19
+^7483979467ecf092bbd9b7b0e0c0a51f6090a002
+b292f8f4c6ec0cbb441b98b851d9d40f35e74906 refs/tags/v0.2.2
+^5d16990936124ff3fd649472a8478c5d3de997be
+4a03628e607fb9f59994d84592f55ec102b37dc8 refs/tags/v0.2.20
+^cfd66cb8f296c657c8bd8e9013878876877c957d
+134e50d06b8dcde4d30b5c6680e8d4ec9b41906c refs/tags/v0.2.21
+755ddb2666ac872ed754c295e19d36c71015b39e refs/tags/v0.2.22
+1cc9797e5a2e739880d0875e04687738835681ba refs/tags/v0.2.3
+11b19433e346522b7d775dfcfa41e1c7a0a0adcd refs/tags/v0.2.4
+e05bbb5041d63a9756268f4371f2f880284013d1 refs/tags/v0.2.5
+^423b8156d21b89dcabe89042d5a13878b36f4179
+c524baab661800e61e8237c2e3bff7e1623ce539 refs/tags/v0.2.6
+22b90719b9629f0d0c4bfc2e0d8abf0443f4ff77 refs/tags/v0.2.7
+^892c6df09ead347e175e39f391353f191add93f4
+32600d4dea58204fbc102fc949232c41a53320d9 refs/tags/v0.2.8
+8f8055640f9e9781e95f8b3af3b32550f82b3363 refs/tags/v0.2.9
+^5d3fd2e37723f8427a410a723477229a87b8b570
+9eb6e26e6563b90258d45baeb54b3bf340d4d929 refs/tags/v0.3.22
+^4374ac710dfb84df5936d042ce009892d0fe98ce
+f20671cf1e3ee6929433a70da9ffc92e85185c94 refs/tags/v0.3.23
+^00f8caa681eb81835305f111df39efc259d2b3c8
+1bcc0cbeee120862ed5b8ff1985e102a9c75913e refs/tags/v0.3.24
+^325cee8cf944eaa7e057dbf456f64c9c40203638
+d6f428ad6f54e50d5915f95c5ee1949ad39aa108 refs/tags/v1.0.0
+^e4ca9b077365c187dd8be16f14a657299f35fd29
+d9f1e315404ec55367f9a7a8118ceb78e5b24667 refs/tags/v1.0.1
+^f3bc81c95120ae0c1d2c551881f42a8bbaf0b34f
+13d41e1d6603652a1a39e3b27775a2b8ef792f84 refs/tags/v1.0.2
+^8784e0de82aa6b55c28ce6b8ecafcf6842e9989a
+65368af2a188ada42894520cd4ec7a138cee6594 refs/tags/v1.1.0
+^e98fd55026f9b835e3c7317caf7ecdffadf06793
+0745f1b195ea067a53fbff171e3b8649f436c3e5 refs/tags/v1.1.1
+^c17184139618041ac76f0c2802d79d05f12bdb1a
+0ea22891043a2d655cae9f2cd190518e0afbf28a refs/tags/v1.1.10
+^4d974c1d04d6460edb59bf91c7d049f458f01d69
+52bce5a2053b2fdb69cd4a7cfb29f0ecb0bd9ab5 refs/tags/v1.1.11
+^8134e1a648cbfe51c244b33aa839d34bf88b2798
+34b7877ab7d4a0612d3919eb8dbbe1f9aefd4fea refs/tags/v1.1.12
+^bea2da2342459f4ae7fd81260c778a228411c086
+d3a2b3d7ab18015afafe1cd6332d7472a32ec863 refs/tags/v1.1.13
+^d9e051c73dff22c7bc37cd25a35e94902691109f
+0ae606f67ed27ed07dce400d282bf3db00be56d3 refs/tags/v1.1.15
+^2fcc5efd3c4ee4f0d3175ccd0f36a8bcca16302e
+5acb4802451ea426185d01e83e6edec55694004d refs/tags/v1.1.2
+^f0d6954d60f043ec9acf149b13489a05116e962c
+c72b0f9e501cf7f4b74477802a4eb39b7870d9b1 refs/tags/v1.1.3
+^f6b34616f7acfeeb8b6512661169d8bc70badb45
+00cf9236b2a9e613d3859f8cf59505ee0b4be26a refs/tags/v1.1.4
+^d364cf8d46e9b6d86ec38199a1b1ab76538cdf7b
+856ebc8724e969bce41cb439819f71be4c741130 refs/tags/v1.1.5
+^987d9457e3605ad5931c35940412c8679b665afe
+d14289faea239cea221a55682462736e580b95ce refs/tags/v1.1.6
+^e85d78b34a341fd63b357c7ff3d6c252a072b46c
+19978dddebb5884702c8c916dc01e97350c9cc68 refs/tags/v1.1.7
+^d14dfab0e44ff17b1d90b273981c2744018e0882
+71e568db30b760cabff442ccdfa271df1607259f refs/tags/v1.1.8
+^be53d5f2a69d56bc2dd16a5ba8f5ef537f62e695
+6a6e805266bb7270fa40a21c7e514a8ed397cc51 refs/tags/v1.1.9
+^fddd2ee4f447b33338a7457c83c990ea5d26ad86
+9dc5c322a5076e2b7dd971a239d87757ac258d3a refs/tags/v1.10.0
+^2b2a464894a7d22b24dfd2468aeb84628fccc710
+25709c9744e611f0bc6ec38f3af1ba77e6cc99ea refs/tags/v1.10.1
+^926ec8a3dfaba97b9f5ac59bd9c2c4e370f0746d
+91f787a2aa641941c85e5e1be2a9990a7f9666e3 refs/tags/v1.10.2
+^005830afe4e053afd079d9039f93badba8c9e1b4
+b3339ad2c398e546ac076c1210ee83a70c0a9207 refs/tags/v1.11.0
+^6932696fe3863491144c1d38e228213ca844e29c
+d33b3bd2f460f410e57047772c0db876dfe538ba refs/tags/v1.11.1
+^5d160fb2dd185da20ef6071e47dc31994c57f94c
+b06e617a3ac95d0a4d36ba18c8c284f4afbffc22 refs/tags/v1.12.0
+^44f449f3ec1625d5a3c923905949b523a3db76d7
+e494784cc74563fc38e7317ff53c6bf9cb27c149 refs/tags/v1.12.1
+^ff7b4287102c67118f5da2e401c361cc3d8c2be8
+8c74fde5a711d8103ad88abb95349d371dfaf317 refs/tags/v1.12.2
+^abe7405a49d2c00c61dc689ad1a26dda6284dd09
+630ee43d061bd6135cc7fa38b04701d69cfd2396 refs/tags/v1.12.3
+^d3872b9c84f1ce9f257c1ded79e0cc83e8ffad84
+39333497e0de2d76eac835116cd67f4954fbb657 refs/tags/v1.12.4
+^5dc62d168aa4341641cffe1b11e6c5ee26347aa0
+65ab5852f7bb18eb30d7eb48a996c43ca4b3f709 refs/tags/v1.12.5
+^a6a46726f027a45ca651363d185b98d0fd8cb473
+5e2bff84d5e5e33f225099ec51bb2e648eec1a8f refs/tags/v1.12.6
+^375a48cf51608ab4228d8521105cad81ed7a69ec
+f06393de6b7d8e2bbc4288075a45c667c263dd6a refs/tags/v1.12.7
+^599b9f02f51b38caf227f71aa861623ebd928da6
+d562d8ed2b4d3bcab913f2ba4c925af523f808dd refs/tags/v1.12.8
+^6638585a455c9e6d429c2089cbf28ff032245482
+854bd9ac798419bc7ea69f4d9739136d86c7c459 refs/tags/v1.13.0
+^7e09a3bc6a81eeb7032e61412bcfee09b8361132
+d5df5981f02652e4cce59d8c24a5e1677fcc3c19 refs/tags/v1.13.1
+^909f2dc4bb792352e71f55b99f80240476cbab19
+49292b40398487c86129eac24072351cb06142d9 refs/tags/v1.13.2
+^91310afd5c441feea81d6b94ec232f5900ed948e
+2e8b5721535be02bb01f39194da19e383a399b00 refs/tags/v1.13.3
+^5fb49d253a137f601fc9f13819e404706f47154c
+e422b0a295a56dc48b3a14aea2d552c234122225 refs/tags/v1.13.4
+^87b35f76c88cb42b4ff439344328423d8c4b1227
+5225fbb3adbff3d81a2945ea72a006648ef4bdce refs/tags/v1.14.0
+^98bb9cf8652d9fa3f7882d5c3d5e15c21a1e55a9
+1b00711513ed63dca4572b76f3620517306abfd0 refs/tags/v1.15.0
+^ce709e08039407ee69ce1f638543652261742439
+57426020a5d25877c9159b31c27f2ffbbc1a4ff8 refs/tags/v1.15.1
+^ae89da57afcafb68d02e1e591db0bc2c9b03d5bd
+09a8bdfb1c6d3e13a9eb64603204ac685e111b6a refs/tags/v1.15.2
+^c319b987d287e0fbfe5e5b4ef5141f8826e07f46
+7b96d92c5ea57af1787013f85e5270aacf9dcb68 refs/tags/v1.15.3
+^51dbe894981ab0b576a42120a1ab087908f18995
+2560e12589513e8397aca9c009e32b5370e64b17 refs/tags/v1.16.0
+^600de4abb6c0cccc5ee575386635a7a4821f90d5
+82658443134c98d65f4dc3de2a0b3cc700e31a70 refs/tags/v1.17.0
+^02445eb1269f323e7c5eda1f0fa1645ab09fe01c
+89900d3776cc32e67d2da06711af7333681c0fca refs/tags/v1.18.0
+^35b46377ef584ebfb886daf499d4fb37b2bbcaa3
+149f36615926b01399dd0510ca50b274a4a6c6f1 refs/tags/v1.18.1
+^c2577b10255ed073a1862407d2675f1028c2ff9f
+6a29b2ff3bedd3ef9ef936ef943961a7864d2ce6 refs/tags/v1.18.2
+^33371459658997b296f90e1f297abbe1c9c3a2a7
+6dcb370752c45fcaf39ff08a976d53bce1259d26 refs/tags/v1.18.3
+^1c03b36ac944532688a39d9a6bd7f8a42aecf8f3
+2d509a1dea00dbf0515d81b14e680462c9f6b169 refs/tags/v1.2.0
+^45d8d3d5ff1eb6beaf5c879dd9ffead8f2442029
+57e87af20895c99c2a4be393335301357377bc35 refs/tags/v1.2.1
+^a30fb9ddddbc1d049af1401f4684cc9a1315bb7f
+90aee96d8063ed10cfeb76035180e0ccdcbe3edc refs/tags/v1.2.10
+^4fa149414c24126ec9c1252795f672cfcd648e73
+a70c171a8e1c9b07cd62d8a3898de63d7a8f55dd refs/tags/v1.2.11
+^c7ceced2db1cf0bef75e08a96e6a0a539f907b6a
+3ff0e43c6bf1ab206485d7351edd1de86bcf6b2e refs/tags/v1.2.12
+^154e742f3f4661808e59b6ccdac5198f02d40bf2
+38abbc90f74db804f276ca123481940033a165c8 refs/tags/v1.2.13
+^823be89b151c31bf932a5ca17f14137271cde3f1
+0b1c6bca82f89dd74018ca0fb5fc11e80bc10545 refs/tags/v1.2.14
+^9bb711aa9d9b69ed28e5394f2503d1eeb95a874b
+eaa16f4e72ee31f3147a3b2d5ca2f719e2505567 refs/tags/v1.2.15
+^4577b19c5718387f6d4f495ba7a175a097825a4b
+bcf4e0bdfd3f3a6dc6e0dab39e2f2f5de2d04a03 refs/tags/v1.2.16
+^c9bca12bc800f2417ee889d1167349bbef9a80ff
+a536315efbaacaab8a015d9585a3bd0beea10853 refs/tags/v1.2.17
+^f6b79e763d197ca057d943158e70146cdf683811
+7c65517e8a7fbb7b281ca2c955c30d58cd2cad07 refs/tags/v1.2.18
+^56fd68cfd53a29043f451c833a98b2dd880fe839
+365332e2423381bb769f97a59dd786ae9ef5186a refs/tags/v1.2.19
+^61d4c6ac56db3a51f668dbe042d94a608054d209
+66a225f91a21adaddc5e6716d0857a023871c282 refs/tags/v1.2.2
+^63e26b737af6f0257d0ccbc2c227744fc332f048
+098eb3bfb26c45906b4ac037528d03ba41c5b6f2 refs/tags/v1.2.20
+^8253957b7cc824c4867e45d7d296dc1c198eea83
+67f1fd18f23edca8965d14c44abb8324c9d3050a refs/tags/v1.2.3
+^53c88ba1bedf692f0619a6fa141ac224e2c7c066
+962e87f220dada4cc65e1ee5f17702a57d80082d refs/tags/v1.2.4
+^c849d99c5dc1caf3dd8a749498d22a2c9193d856
+9fd604716250390509b95acdb53df7a3b6cb4a30 refs/tags/v1.2.5
+^544bca5de2db4a132e8b06b723b7a368b9ed1322
+d9954d165df9ec96b7c9904a45fe06f297e57083 refs/tags/v1.2.6
+^ce4909fd1c1740650e093d87c1f40439771bd582
+9d275baad4ce430bde7fb0e4c8434b06abb66bcd refs/tags/v1.2.7
+^550528095ce5ad1d233cc5780ba33e1da6a8fdcf
+4e39f5f33291ade56c09cef31d1f3dcfde13fdac refs/tags/v1.2.8
+^0501e0d0d8ce8f40191a72693ae64ad1e12c0d7b
+f98ed84789de8e07a50e839ff18d4a534be29725 refs/tags/v1.2.9
+^d16738ecb9aaaad90d82a3c51f8fcc64f949b87e
+6b1c6ba08b0dffecb1f9afc267c121881c72ac0f refs/tags/v1.3.0
+^54b1f3a605f8678858e1ed373620c9a8b52dbc33
+3c0daef1f67f5c1cd08c1b36614e2e894b9bc1f4 refs/tags/v1.3.1
+^72ca58857912d3a1c77aa2940c650d5c3f469aee
+c0aac756df5c89ee7d058b51bda23e38eac2b509 refs/tags/v1.3.2
+^56a82c7fd103d66d522bd238ef816b500710aae0
+ca94c5a9f4d97b42ef970e0f5d95c5882343e61f refs/tags/v1.4.0
+^28dcfd7faa6891a8d6269209a142115493ae3b52
+2a91eabd691e9caf74276a1233227e2ff914b763 refs/tags/v1.4.1
+^4ce16c92c7fa055ef8a5ffe46378ab5ee59dfc97
+5105a037a14e1129bc179f1a32d9b50ec6d78569 refs/tags/v1.4.10
+^c9839249068b0becd03f55205ab70a16c8f4e5b7
+8688fa32d168c0edd0269c44ba3766a67e91b235 refs/tags/v1.4.2
+^37a9be3c8aa9b1efb444450b9f12cc0430460a28
+7001985cd753b6366ddc49d58eda1f8e9525dc0d refs/tags/v1.4.3
+^bd19af31c88a9e3793c2ad644c50e97681027a60
+037107abd62371325b1ace76785b1d1a334492ba refs/tags/v1.4.4
+^7e01b2d9925db7a4995f8a76d19e402607bd87d0
+d3c0e4337622c9b7511d2a8507c56cf0e5f2b88a refs/tags/v1.4.5
+^3f95cfef49fa30312152d0fa2ad5021c22ab0530
+9a3d6e9450969d2a8f872883d1d2a328e94f401d refs/tags/v1.4.6
+^99b6f34688f45206c7e2ce90351bd9323a23f049
+1f634f987e3dd9c211f5e844a81efae4843f1f9a refs/tags/v1.4.7
+^c20e584e6cdbcf054d259253d36483df94c93ab7
+1923c4289ffad347a68488f8b9c386d30278449c refs/tags/v1.4.8
+^f2cc1fca954bbe77446068557679dd172cf9c8b8
+ba29be49c8376223b6efa6e683dcbdfff830810e refs/tags/v1.4.9
+^b9d7524a2062c8929802a3863d0c1a55a4a135e8
+7e7dcaac8cf170f48321467c28b3c0c712343dd8 refs/tags/v1.5.0
+^bc0b977461ba29f9d6a521b75fb324164da69695
+f7f72a02f1ed646a4fe5ec2804b83629d114aa99 refs/tags/v1.6.0
+^0a7744fd1575d3374e94977f7f8c8f5986bf9839
+cd4669a97844000124087b82f8acf92d5c7d4b2b refs/tags/v1.7.0
+^c19fd7f549448639521ce89906be66d38d94608b
+397bfdd386c55955e20b1b1eb3a0401a81a9ddf6 refs/tags/v1.7.1
+^0d6fd83f72e3ace33b4656aa2e29a8bad7196957
+5bca91e59658706317e0e3f58204cbfee1ac5145 refs/tags/v1.7.2
+^f74acbb54f8c2d1b195ea5a86e57a9e757d16b9f
+c15a0bcff43dd29e7c6e5ccb6ffd44e6d0f8a0c4 refs/tags/v1.7.3
+^062a3b3213b821719dc9ee75f088737c0b8c80ef
+72f6f5d41d5e2c431eb43e54d7565d08fc21428a refs/tags/v1.8.0
+^0f9aae05b5b9f6602d9c7e14dd3be8c43a7cbc3f
+84dc238b6211c6b717b8e64d072d9f0db6e7d233 refs/tags/v1.8.1
+^4fa896a0037f14cfc10264929c4f3e532fa8058a
+c77f1c7228349cf797f473360fe7f43e4636f444 refs/tags/v1.9.0
+^83c03536152c8fbc7316f98d11c2bf304b5db962
+32861afe96d12ae18c1c2608c289f3fda6eff1e0 refs/tags/v1.9.1
+^b0dafff60d002ad4cf3157b7f1786380d5ae4127
+c5381cc0e9fab7443a6de2e91a8a0d1835faea33 refs/tags/v1.9.2
+^c48093cbc2a850274eef79515ba60fab59ef2871
+374e2bd13fc256c2b186f24d01982367e612f563 refs/tags/v1.9.3
+^f8e47a8cff48c319f404972bfa1a8848b2971065
+f1af303ec51f7ca40308a792c094e65f01e51325 refs/tags/v1.9.4
+^1ec00f7af2d702cf4d10f08a6e75664a3d31cb58
+1c40e615dbe5cc39c8fd24165223ad143c615bc4 refs/tags/v2.0.0
+^5d7f78254dc55d4130cb9f7604225bb7ee7c31c5
+2d5431f220c568bc38b0268efefab34d3866657e refs/tags/v2.0.1
+^eecac3a4177159d4f7e01ac94ca4e7b2ebaf2461
+64f05b683937c8012eff79852e6ac7eb064b4fcb refs/tags/v2.0.2
+^d41459d8b514d72d525e761fb4e34031e09f76e7
+d1f5ab194db1908064f6493508917bae92a66061 refs/tags/v2.1.0
+^e057dfc57efe0f938e27c4dff650b78a705458f4
+47e676bf7af1481700d85721c33e33c06f6db0e3 refs/tags/v2.1.1
+^af1fb5ae69b7cd92a1612ee4cd474b99b03ea9da
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+dfb5ce665121b9f3816522087ad6cad9b3ab4006
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.git/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+ref: refs/remotes/origin/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.gitignore	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,38 @@
+# Object files
+*.o
+*.ko
+*.obj
+*.elf
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Libraries
+*.lib
+*.a
+*.la
+*.lo
+
+# Shared objects (inc. Windows DLLs)
+*.dll
+*.so
+*.so.*
+*.dylib
+
+# Executables
+*.exe
+*.out
+*.app
+*.i*86
+*.x86_64
+*.hex
+
+yotta_modules
+yotta_targets
+build
+lcov/*
+coverage/*
+results/*
+output/*
+.yotta.json
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.mbedignore	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,4 @@
+config/*
+docs/*
+doxygen/*
+test/*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.meta	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<root>
+  <node _type="integer" _key="update">1</node>
+</root>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.msub	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+mbed-client-classic = https://github.com/ARMmbed/mbed-client-classic/#33:42f18d977122acd4f5ad9ce141b74304b357dec2
+mbed-client-mbed-tls = https://github.com/ARMmbed/mbed-client-mbed-tls/#98:7e1b6d81503843ee98192e11f31df12508938c9d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/.yotta_ignore	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,7 @@
+# files for linux builds
+
+# ignore linux test application
+test/lwm2mtestapplication/*
+test/lwm2m/*
+coverage/*
+results/*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/DOXYGEN_FRONTPAGE.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,11 @@
+ARM mbed Client
+================
+
+## Introduction
+This is the Doxygen generated documentation of mbed Client.
+It should be used in conjunction with the [mbed Client Guide](https://docs.mbed.com/docs/mbed-client-guide/en/latest/)
+hosted in http://docs.mbed.com.
+
+# API documentation
+
+See [Files](files.html) section to find a documentation about specific API.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/LICENSE	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,202 @@
+Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,59 @@
+#
+# Makefile for mbed Client C++ Library
+#
+# List of subdirectories to build
+TEST_FOLDER := ./test/
+
+# Define compiler toolchain with CC or PLATFORM variables
+# Example (GCC toolchains, default $CC and $AR are used)
+# make
+#
+# OR (Cross-compile GCC toolchain)
+# make PLATFORM=arm-linux-gnueabi-
+#
+# OR (ArmCC/Keil)
+# make CC=ArmCC AR=ArmAR
+#
+# OR (IAR-ARM)
+# make CC=iccarm
+
+LIB = libmbedclient.a
+
+# List of unit test directories for libraries
+UNITTESTS := $(sort $(dir $(wildcard $(TEST_FOLDER)*/utest/*)))
+
+# If configuration is not specified, use linux
+ifeq (,$(CONFIG))
+CONFIG := linux
+endif
+
+include sources.mk
+include include_dirs.mk
+include config/$(CONFIG).mk
+
+SERVLIB_DIR := ../../libService
+NSDL_C_DIR := ../../nsdl-c
+override CFLAGS += -I$(SERVLIB_DIR)/libService
+override CFLAGS += -I$(NSDL_C_DIR)/nsdl-c
+override CFLAGS += $(addprefix -I,$(INCLUDE_DIRS))
+override CFLAGS += $(addprefix -D,$(FLAGS))
+ifeq ($(DEBUG),1)
+override CFLAGS += -DHAVE_DEBUG
+endif
+
+COVERAGEFILE := ./lcov/coverage.info
+
+#
+# Define compiler toolchain
+#
+include ../../libService/toolchain_rules.mk
+
+$(eval $(call generate_rules,$(LIB),$(SRCS)))
+
+# Extend default clean rule
+clean: clean-extra
+
+$(CLEANDIRS):
+	@make -C $(@:clean-%=%) clean
+
+clean-extra: $(CLEANDIRS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/README.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+ARM mbed Client
+=======================
+
+This repository contains ARM mbed Client: a library that connects devices to mbed Device Connector Service, mbed Device Server (mDS) and to mbed-enabled cloud services from our partners.
+
+The documentation is collected under the docs directory and the **mbed Client Guide** is also hosted [here](https://docs.mbed.com/docs/mbed-client-guide/en/latest/).
+
+Running Unit Tests
+-----------------------
+
+Pre-requisites for the unit tests includes the following tools:
+- CppUTest
+- XSL
+- lcov
+- gcovr
+- Ninja 
+
+You can use these commands to get the tools if you are running Ubuntu.
+
+    sudo apt-get install cpputest
+    sudo apt-get install xsltproc
+    sudo apt-get install lcov
+    sudo apt-get install gcovr
+    sudo apt-get install ninja-build
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/config/linux.mk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+FLAGS += \
+	TARGET_LIKE_LINUX
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/Howto.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,468 @@
+# How to use the mbed Client API
+
+This section explains how to use our C++ API to create and configure different types of Objects, Object Instances and Resources for mbed Client to comply with the OMA LWM2M specifications. These resources can then be communicated to mbed Device Server.
+
+<span class="notes">**Note:** The API complies with the OMA LWM2M specifications.</span>
+
+As per the OMA LWM2M specification:
+
+- The client must have defined Objects, under which it can create Object Instances.
+- The client must have created Object Instances under Objects, which will eventually contain Resources.
+- The client must have Resources under Object Instances which belong to Objects.
+- The client must have created Resources under Object Instance. You can create M2MResource from the M2MObjectInstance class.
+- The client must have created Resource Instances under Resources. You can create M2MResourceInstance from the M2MObjectInstance class.
+
+Read the API doxygen documentation [here](https://docs.mbed.com/docs/mbed-client-guide/en/latest/api/index.html).
+
+## How to create and configure Objects
+
+With this API, you can create and configure the following Objects:
+
+- [Device Objects](#device-object)
+- [Security Objects](#security-object)
+- [Custom Objects](#custom-object)
+
+The M2MObject class is derived from the M2MBase class, so all the public methods can be used from the M2MObject and its derived classes.
+
+### Creating OMA-defined Objects
+
+#### Device Object
+
+To create a Device Object:
+
+`static M2MDevice *create_device();`
+
+Because there can be only one instance of M2MDevice, it is a static class and you can delete it as follows:
+
+`M2MDevice::delete_instance();`
+
+Check the [M2MDevice class documentation](https://docs.mbed.com/docs/mbed-client-guide/en/latest/api/m2mdevice_8h.html) to see how to configure the Device Object. 
+
+#### Security Object
+
+To create a Security Object:
+
+`static M2MSecurity *create_security(M2MSecurity::ServerType server_type);`
+
+You can create a Bootstrap or normal mbed Device Server by passing the appropriate `enum` value.
+
+Check the [M2MSecurity class documentation](https://docs.mbed.com/docs/mbed-client-guide/en/latest/api/m2msecurity_8h.html) to see how to configure the Security Object, as well as how to create appropriate Resources and assign values to them.
+
+#### Custom Object
+
+For a Custom Object, you need to pass the name of the Object that you would like to create (for example `Test`); this will create an Object with that name in mbed Device Server.
+
+To create an M2MObject:
+
+`static M2MObject *create_object(const String &name);`
+
+#### Configuring the Object
+
+Once you have created an Object (whether OMA-specific or custom), you can configure various parameters in it to control or modify  communication with mbed Device Server.
+
+```
+M2MObject * _object = M2MInterfaceFactory::create_object("Test");
+ if(_object) { 
+ _object->set_register_uri(true); // The registration message explicitly sends this object path as registered resource such as /Test.
+ }
+```
+
+Here, we discuss a few of the most important parameters, which you must configure properly to work with the Objects.
+
+##### Setting Operation Mode
+
+To set the operation mode of the Objects so that they can handle `GET`, `PUT`, `POST`, `DELETE` or a combination of these requests coming from mbed Device Server:
+
+```
+virtual void set_operation(M2MBase::Operation operation);
+_object->set_operation(M2MBase::GET_PUT_POST_ALLOWED); // This defines the REST operations that can be performed on this object.
+```
+
+##### Setting Observable Mode
+
+To set the Object to be an observable resource:
+
+`virtual void set_observable(bool observable);` 
+
+By default, all the created objects are non-observable. You can set them to be observable or not observable using this API.
+
+```
+_object->set_observable(true); // The object can be observed from server.
+_object->set_observable(false); // The object cannot be observed from server.
+```
+
+##### Setting CoAP content type
+
+Currently, the only available content type is the OMA TLV type. The OMA TLV type works only for Objects with a numeric value. For example, if you are creating a custom Object it must be of a numeric type such as `100`.
+
+`M2MObject * _object = M2MInterfaceFactory::create_object("100");`
+
+By default, all the numeric objects are assigned the CoAP content type of `99` by mbed Client but if you want your Object to assign any other CoAP content type, for example 120, you can do that by setting the object's CoAP content type as shown below:
+
+```
+virtual void set_coap_content_type(const uint8_t content_type);
+_object->set_coap_content_type(120);
+```
+
+<span class="tips">**Tip:** In future releases, we will introduce support for the JSON content types.</span>
+
+## How to create and configure Object Instances
+
+With this API, you can create and configure the following Object Instances:
+
+- [Device Object Instance](#device-object-instance)
+- [Security Object Instance](#security-object-instance)
+- [Custom Object Instance](#custom-object-instance)
+
+The `M2MObjectInstance` class is derived from the `M2MBase` class, so all the public methods from `M2MObjectInstance` and its derived classes can be used.
+
+### Creating an OMA-defined Object Instance
+
+#### Device Object Instance
+
+Because there can only be one instance for the Device Object, the Object Instance is automatically created when creating an M2MDevice Object.
+
+#### Security Object Instance
+
+Because there can only be one instance for the Security Object, the Object Instance is automatically created when creating an M2MDevice Object based on a selected server type.
+
+#### Custom Object Instances
+
+Object Instances need IDs. Normally, the IDs start from '0' and increment, 
+so the Object Instance structure on the mbed Device Server side would look like this:
+
+`Object/Object Instance ID`
+
+When you create an Object Instance, you therefore need to pass the ID that you would like to create. For example, if you pass `0`, you get an object `/Test/0` on mbed Device Server.
+
+To create an M2M Object Instance:
+
+`M2MObject::create_object_instance(uint16_t instance_id);`
+
+You can pass an Object Instance ID to create appropriate Object Instances. Normally, Object Instances will start from `0` and increment. So the Object Instance structure on the mbed Device Server side would look like this:
+
+`Object/Object Instance ID`
+
+```
+M2MObjectInstance * object_instance = _object->create_object_instance(0);
+ if(object_instance) { 
+     object_instance->set_register_uri(true);  // The registration message explicitly sends this object instance path as registered resource such as /Test/0.
+ }
+```
+
+### Configuring the Object Instance
+
+When you have created an Object Instance (whether OMA-specific or custom), you can configure various parameters in it to control or modify communication with mbed Device Server.
+
+Here, we present a few of the most important parameters that you must configure properly to work with the object instances.
+
+##### Setting Operation Mode
+
+To set the operation mode of the Objects so that they can handle `GET`, `PUT`, `POST`, `DELETE` or a combination of these requests coming from mbed Device Server:
+
+```
+virtual void set_operation(M2MBase::Operation operation);
+object_instance->set_operation(M2MBase::GET_PUT_POST_ALLOWED); // This defines the REST operations that can be performed on this object instance.
+```
+
+##### Setting Observable Mode
+
+To set the Object Instance to be an observing resource:
+
+`virtual void set_observable(bool observable);`
+
+By default, all the created Object Instances are non-observable. You can set them to be observable or not observable using this API.
+
+```
+_object_instance->set_observable(true); // This defines that the Object Instance can be observed from server.
+_object_instance->set_observable(false); // This defines that the Object Instance cannot be observed from server.
+```
+
+##### Setting CoAP content type
+
+Currently, the only available content type is the OMA TLV type. The OMA TLV type works only for Objects and Object Instances with a numeric value. For example, if you are creating a custom Object and Object Instances it must be of a numeric type such as `100`. 
+
+```
+M2MObject * _object = M2MInterfaceFactory::create_object("100");
+M2MObjectInstance * object_instance = _object->create_object_instance(0);
+```
+
+By default, all numeric objects are assigned the CoAP content type of `99` by mbed Client but if you want your Object Instance to assign any other CoAP content type, for example 120, you can do that by setting the object's CoAP content type as follows:
+
+```
+virtual void set_coap_content_type(const uint8_t content_type);
+object_instance->set_coap_content_type(120);
+```
+
+<span class="tips">**Tip:** In future version, we will introduce support for the JSON content types.</span>
+
+There are additional APIs that provide getter and remove functions for Object Instances in the `M2MObjectInstance` class; [check the API documentation](https://docs.mbed.com/docs/mbed-client-guide/en/latest/api/classM2MObjectInstance.html) for their usage. 
+
+## How to create and configure Resources and Resource Instances
+
+With this API, you can create and configure the following Resources and Resource Instances:
+
+- [Device Object Resources](#device-object-resources)
+- [Security Object Resources](#security-object-resources)
+- [Custom Resources](#custom-resources)
+
+
+The `M2MResource` class is derived from the `M2MResourceInstance`, which in turn is derived from the `M2MBase` class, so all the public methods can be used from `M2MResource` or `M2MResourceInstance` and their derived classes.
+
+### Creating OMA-defined Resources
+
+#### Device Object Resources
+
+There are direct APIs to create and set values for the Device Resources. You can create the required Resource and set values based on their data types.
+
+- For Resources that take string values:
+
+`M2MResource* create_resource(DeviceResource resource, const String &value);`
+
+- For Resources that take integer values:
+
+`M2MResource* create_resource(DeviceResource resource, uint32_t value);`
+
+- There are a few Resources that can have multiple instances. To create these Resources:
+
+`M2MResourceInstance* create_resource_instance(DeviceResource resource, uint32_t value,uint16_t instance_id);`
+
+Where `instance_id` is the Resource Instance ID, for example `/3/0/11/0`.
+
+Check the [M2MDevice API documentation](https://docs.mbed.com/docs/mbed-client-guide/en/latest/api/classM2MDevice.html) to find which enums are supported for `integer` or `string` value types.
+
+There are other APIs in the `M2MDevice` class that you can use to set, remove and modify new values for the resources.
+
+#### Security Object Resources
+
+_Mandatory Resources_
+
+Most of the mandatory Resources are created automatically when you create an M2MSecurity Object. You can set their values based on their data types. 
+
+Resources that are automatically created and their accepted data types:
+
+- `SecurityMode`
+- `ShortServerID`
+- `M2MServerUri`
+- `BootstrapServer`
+- `PublicKey`
+- `ServerPublicKey`
+- `Secretkey`
+
+For Resources (`SecurityMode`, `ShortServerID`) that take integer values, you can set the values as follows:
+
+`bool set_resource_value(SecurityResource resource,uint32_t value);`
+
+```
+security_object->set_resource_value(M2MSecurity::SecurityMode, 1);
+security_object->set_resource_value(M2MSecurity::ShortServerID, 1);
+```
+
+For Resources (`M2MServerUri`) that take string values, you can set the values as follows:
+
+`bool set_resource_value(SecurityResource resource,const String &value);`
+ 
+```
+security_object->set_resource_value(M2MSecurity::M2MServerUri, "coap://api.connector.mbed.com:5684");
+```
+
+For Resources (`PublicKey`, `ServerPublicKey`, `Secretkey`) that take binary values, you can set the values as follows:
+
+`bool set_resource_value(SecurityResource resource,onst uint8_t *value,const uint16_t length);`
+
+```
+uint8_t key[] = {"key"};
+security_object->set_resource_value(M2MSecurity::PublicKey, key, sizeof(key));
+```
+
+_Optional Resources_
+
+Optional Resources as defined in the Security Object:
+
+- `SMSSecurityMode`
+- `M2MServerSMSNumber`
+- `ClientHoldOffTime`
+
+To create and set values for the optional Resources that take an integer value:
+
+`M2MResource* create_resource(SecurityResource resource, uint32_t value);`
+
+`security_object->create_resource(M2MSecurity::M2MServerSMSNumber, 123542323);`
+
+
+Check the [M2MSecurity API documentation](https://docs.mbed.com/docs/mbed-client-guide/en/latest/api/classM2MSecurity.html) to find which enums are supported for `integer`, `string` or `uint8_t*` value types.
+
+There are more APIs in the `M2MSecurity` class that you can use to set, remove and modify Resource values.
+
+#### Custom Resources
+
+For Custom Objects, you can create Resources of two types:
+
+- **M2MResource**: a resource with a single instance, for example `/Test/0/Resource`.
+
+- **M2MResourceInstance**: a resource with multiple instances, for example `/Test/0/Resource/0`, `/Test/0/Resource/1`.
+
+For each of these types, the Resource and Resource Instances can be either static or dynamic:
+
+- **Static**: Resource and Resource Instances whose value does not change over time, these are not observable.
+- **Dynamic**: Resource and Resource Instances whose value can change. These can be made observable.
+
+**Creating dynamic and static single-instance Resources**
+
+- To create a single-instance Resource with a static value (`/Test/0/Resource`): 
+
+```
+M2MObject * object = M2MInterfaceFactory::create_object("Test");
+M2MObjectInstance * object_instance = object->create_object_instance(0);
+
+uint8_t value[] ={"value"};
+M2MResource* resource = object_instance->create_static_resource("Resource", "sensor",M2MResourceInstance::INTEGER,value,sizeof(value),false);
+```
+
+- To create an observable single-instance Resource (`/Test/0/Resource`) with a dynamic value that can be set later on:  
+
+```
+M2MObject * object = M2MInterfaceFactory::create_object("Test");
+M2MObjectInstance * object_instance = object->create_object_instance(0);
+
+M2MResource* resource = object_instance->create_dynamic_resource("Resource", "sensor",M2MResourceInstance::INTEGER, true, false);
+int64_t value = 1000;
+resource->set_value(value);
+```
+
+**Creating dynamic and static Resource Instances**
+
+- To create a Resource Instance (`/Test/0/Resource/0`) with a static value:
+
+```
+M2MObject * object = M2MInterfaceFactory::create_object("Test");
+M2MObjectInstance * object_instance = object->create_object_instance(0);
+
+uint8_t value[] ={"value"};
+M2MResourceInstance* resource_instance = object_instance->create_static_resource_instance("Resource", "sensor",M2MResourceInstance::INTEGER,value,sizeof(value),0);
+```
+
+
+- To create an observable Resource Instance (`/Test/0/Resource/0`) with a dynamic value that can be set later on: 
+
+```
+M2MObject * object = M2MInterfaceFactory::create_object("Test");
+M2MObjectInstance * object_instance = object->create_object_instance(0);
+
+uint8_t value[] ={"value"};
+M2MResourceInstance* resource_instance = object_instance->create_dynamic_resource_instance("Resource", "sensor",M2MResourceInstance::INTEGER, true, 0);
+int64_t value = 1000;
+resource_instance->set_value(value);
+
+```
+
+#### Configuring the Resource and Resource Instance
+
+When you have created a Resource or Resource Instance (whether OMA-specific or custom), you can configure various parameters to control or modify communication with mbed Device Server.
+
+Here, we present a few of the most important parameters that you must configure properly to work with the Resource and Resource Instance.
+
+##### Setting Operation Mode
+
+You can set the Resource or Resource Instance operation mode so that they can handle `GET`, `PUT`, `POST`, `DELETE` or a combination of these requests coming from mbed Device Server.
+
+To set the operation mode:
+
+```
+virtual void set_operation(M2MBase::Operation operation);
+resource->set_operation(M2MBase::GET_PUT_POST_ALLOWED); // This defines the REST operations that can be performed on this Resource.
+resource_instance->set_operation(M2MBase::GET_PUT_POST_ALLOWED); // This defines the REST operations that can be performed on this Resource Instance.
+```
+
+##### Setting Observable Mode
+
+To set the Resource or Resource Instance to be an observable resource:
+
+`virtual void set_observable(bool observable);`
+
+By default, all created static Resources or Resource Instances are non-observable. While creating a dynamic Resource or Resource Instance you can specify through API whether they are observable or not. You can change that later as well as follows:
+
+```
+resource->set_observable(true); // This defines that the Resource or Resource Instance can be observed from server.
+resource->set_observable(false); // This defines that the Resource or Resource Instance cannot be observed from server.
+```
+
+##### Setting the value of a dynamic Resource or Resource Instance
+
+You can set the value of a dynamic Resource or Resource Instance so that they can be sent to mbed Device Server using `GET` requests.
+
+To set the values:
+
+```
+virtual bool set_value(const uint8_t *value, const uint32_t value_length);
+uint8_t value[] = {"value"};
+resource->set_value(value,sizeof(value));
+```
+
+##### Setting an executable function
+
+For dynamic Resources, you can pass a function pointer to the Resource or Resource Instance. It will be executed when mbed Device Server calls a `POST` method on that resource. The Resource or Resource Instance must support the `POST` operation mode for this feature to work.
+
+To pass the function pointer:
+
+```
+virtual void set_execute_function(execute_callback callback);
+void execute_function_example(void *) {
+// Code
+};
+resource->set_execute_function(execute_callback(this,&execute_function_example));
+```
+
+In case execute callback function is defined as a global function and it's outside of your class scope you can use overloaded set_execute_function:
+```
+virtual void set_execute_function(execute_callback_2 callback);
+static void c_style_function(void *) {
+// Code
+}
+resource->set_execute_function(&c_style_function);
+```
+There are additional APIs that provide getter and remove functions for Resource and Resource Instances in the `M2MResource` and `M2MResourceInstance` classes. Check [the API documentation](https://docs.mbed.com/docs/mbed-client-guide/en/latest/api/annotated.html) for their usage.
+
+##### Setting an external handler for block-wise messages
+
+For dynamic Resources, you can pass a function pointer to the Resource Instance. It will be executed when mbed Device Server calls a `PUT` method on that resource with large payload using block-wise operation. The Resource must support the `PUT` operation mode for this feature to work. If the callback is set, the application will be notified for every incoming block-wise message and the message is not stored in mbed Client side anymore. In such case, it is application's responsibility to store each block-wise message and combine them when the last block has arrived. 
+
+<span class="notes">**Note:** Due to a limitation in the mbed-client-c library, GET request can only contain data up to 65KB.</span>
+
+To pass the function pointer for an incoming block-wise message:
+
+```
+virtual void set_incoming_block_message_callback(incoming_block_message_callback callback);
+void block_message_received(M2MBlockMessage *argument) {
+// Code
+}
+resource->set_incoming_block_message_callback(incoming_block_message_callback(this, &block_message_received));
+```
+
+To pass the function pointer for an outgoing block-wise message:
+
+```
+virtual void set_outgoing_block_message_callback(outgoing_block_message_callback callback);
+void block_message_requested(const String& resource, uint8_t *&data, uint32_t &len) {
+// Code
+}
+resource->set_outgoing_block_message_callback(outgoing_block_message_callback(this, &block_message_requested));
+```
+
+Applications can define their own maximum incoming message size in bytes at build time. For mbed OS, create a `mbed_app.json` file in the application level and overwrite the value as described below:
+
+```
+"target_overrides": {
+        "*": {
+            "mbed-client.sn-coap-max-incoming-message-size": 100000
+        }
+
+```
+
+For yotta based builds, you need to create a `config.json` file in the application level:
+
+```
+{
+"coap_max_incoming_block_message_size": 100000
+}
+```
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/Introduction.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,212 @@
+# ARM mbed Client overview
+
+ARM mbed Client is a library that provides the means to connect constrained embedded devices to mbed Device Connector Service, mbed Device Server and to mbed-enabled cloud services from our partners.
+
+The mbed Client high-level APIs allow mbed OS developers to create applications with LWM2M features as described in the [Lightweight Machine to Machine Technical Specification](http://technical.openmobilealliance.org/Technical/technical-information/release-program/current-releases/oma-lightweightm2m-v1-0):
+
+- Manage devices on mbed Device Server.
+- Securely communicate with internet services over the industry standard TLS/DTLS.
+- Fully control the endpoint and application logic. 
+
+The API is written in C++ to allow quick application development.
+
+## Managing devices on mbed Device Server
+
+mbed Client supports the following three features introduced in the subsequent chapters:
+
+- [Client Registration and Deregistration](client_reg_dereg.md)
+- [Device Management and Service Enablement](dev_man_serv_enable.md)
+- [Information Reporting](info_reporting.md)
+
+The API also provides an interface to define the application endpoint information. This information will be delivered to mbed Device Server during the registration operation.
+
+First, you need to create an interface for mbed Client:
+
+```
+#include "mbed-client/m2minterfacefactory.h"
+#include "mbed-client/m2minterface.h"
+
+M2MInterface* interface = M2MInterfaceFactory::create_interface(*this,
+                                                  "mbed-endpoint",
+                                                  "test",
+                                                  3600,
+                                                  5684,
+                                                  "",
+                                                  M2MInterface::UDP,
+                                                  M2MInterface::LwIP_IPv4,
+                                                  "");
+```
+
+### Setting up own random number generator function
+
+To provide a stronger security mechanism, mbed Client requires a random number generator to feed a random number into the underlying SSL library. There is a default PRNG seeded with RTC for security but some platforms do not have RTC, and for some, time value seeded PRNG is not secure enough. 
+
+Now, an application can pass its own RNG implementation to mbed Client as function pointer callback through an API, `set_random_number_callback(random_number_cb callback)`.
+
+Here is an example on how you can use it from an application:
+
+```
+#include "mbed-client/m2minterfacefactory.h"
+#include "mbed-client/m2minterface.h"
+
+uint32_t get_random_number(void)
+{
+    uint32_t i = 0;
+    printf("\Your application's RNG logic\n");
+    return i;
+}
+
+_interface->set_random_number_callback(&get_random_number);
+
+```
+
+### Setting up own entropy function for additional secure connectivity 
+
+mbed Client provides an API to add your own entropy source into the underlying SSL library. There is a default entropy source provided by mbed Client. It uses PRNG seeded with RTC for the security but some platforms do not have RTC, and for some, this level of security may not be strong enough. 
+
+Now, an application can pass its own entropy source to mbed Client as function pointer callback through an API  `set_entropy_callback(entropy_cb callback)`.
+
+Here is an example on how you can use it from an application:
+
+```
+#include "mbed-client/m2minterfacefactory.h"
+#include "mbed-client/m2minterface.h"
+
+entropy_cb ent_cb;
+
+int ent_poll( void *, unsigned char *output, size_t len,
+                           size_t *olen )
+{
+    for(uint16_t i=0; i < len; i++){
+        srand(time(NULL));
+        output[i] = rand() % 256;
+    }
+    *olen = len;
+
+    return( 0 );
+}
+
+    ent_cb.entropy_source_ptr = ent_poll;
+    ent_cb.p_source = NULL;
+    ent_cb.threshold = 128;
+    ent_cb.strong = 0;
+
+_interface->set_entropy_callback(ent_cb);
+
+```
+
+### Maximum UDP message size
+
+The maximum single UDP message size that mbed Client can receive is 1152 bytes. The actual payload size is 1137 bytes, the header information using the remaining 15 bytes. 
+
+For transferring larger amounts of data, the Blockwise feature must be deployed. When using this feature, mbed Client can handle messages up to 65KB by default. This feature is disabled by default. To receive more than 65KB, see [Setting an external handler for block-wise messages](Howto.md#setting-an-external-handler-for-block-wise-messages).
+
+To enable the Blockwise feature in mbed OS, create a `mbed_app.json` file in the application level and overwrite Blockwise value as described below:
+
+*Example:*
+```
+"target_overrides": {
+        "*": {
+            "mbed-client.sn-coap-max-blockwise-payload-size": 1024
+        }
+
+```
+
+To enable the Blockwise feature in yotta based builds, you need to create a `config.json` file in the application level. 
+
+*Example:*
+```
+{
+"coap_max_blockwise_payload_size": 1024
+}
+```
+
+Acceptable values for the `coap_max_blockwise_payload_size` flag are:
+0, 16, 32, 64, 128, 256, 512 and 1024. Value 0 means that the feature is not used.
+
+### CoAP message deduplication
+
+By default, message deduplication is disabled. More information about deduplication in the [CoAP specification](https://tools.ietf.org/html/rfc7252#page-24).
+
+For mbed OS, to enable message deduplication, create a `mbed_app.json` file in the application level and overwrite the deduplication value as described below:
+
+*Example:*
+```
+"target_overrides": {
+        "*": {
+            "mbed-client.sn-coap-duplication-max-msgs-count": 1
+        }
+
+```
+For yotta based builds, to enable message deduplication, you need to create a `config.json` file in the application level.
+
+*Example:*
+```
+{
+"coap_duplication_max_msgs_count": 1
+}
+```
+Recommended values for the `coap_duplication_max_msgs_count` flag are 0 to 6. Value 0 means that the feature is not used. It is not recommended to use higher value than 6, because it increases the memory consumption.
+
+### Reconnectivity
+
+Apart from standard CoAP features, mbed Client also handles reconnectivity logic on behalf of applications, thereby aiming to provide seamless connectivity experience and recovery from temporary network hiccups or service side disruptions.
+
+The reconnection logic handles the following:
+
+ - Reconnection towards mDS; establishing the network connection and re-registration to mDS.
+ - CoAP message resending logic. More information about resending in [CoAP specification](https://tools.ietf.org/html/rfc7252#section-4.8).
+
+There are two parameters in the reconnection logic, both configurable by the application:
+
+ - Reconnection Retry
+ - Reconnection Time Interval (in seconds)
+
+mbed Client tries to establish a successful connection to the server by incrementing the reconnection trials every time there is a failed connection attempt. 
+
+The logic of the `Reconnection Timeout` is `Reconnection Retry count * Reconnection Time Interval` , where `Reconnection Retry count` is incremented by 1 with every failed reconnection attempt.
+
+mbed Client continues to attempt a reconnection until `Reconnection Retry count` reaches the defined value (either by the application or the default value set in Client).
+
+If mbed Client still cannot establish a connection and the set `Reconnection Retry count` is reached, it returns an error through a callback with an appropriate error code defining the reason for failed connection.
+
+There are a few exceptions to the reconnection logic though. If mbed Client sends registration data that is rejected by the server, the client returns an error and does not attempt a reconnection as the server has rejected the data from the client. A typical example of such case would be passing a non-matching endpoint name or domain name against the client certificates.
+
+Applications can define their own parameters for the reconnection logic.
+
+For mbed OS, to overwrite the reconnection retry count and reconnection time interval, create a `mbed_app.json` file in the application level and overwrite the values as described below:
+
+*Example:*
+```
+"target_overrides": {
+        "*": {
+            "mbed-client.reconnection-count": 3,
+            "mbed-client.reconnection-interval": 5,
+        }
+
+```
+For yotta  based builds, to overwrite the reconnection retry count and reconnection time interval, you need to create a `config.json` file in the application level.
+
+*Example:*
+```
+{
+"reconnection_count": 3,
+"reconnection_interval": 5
+}
+```
+
+## How to use the API
+More information on how to use the API effectively to create and configure Objects, Object Instances and Resources, can be found [here](Howto.md).
+
+## API documentation
+
+The documentation for this API is [available here](https://docs.mbed.com/docs/mbed-client-guide/en/latest/api/annotated.html).
+
+## Example application
+
+We have an example application for
+
+1. [mbed OS](https://github.com/ARMmbed/mbed-client-examples).
+
+2. [Ubuntu](https://github.com/ARMmbed/mbed-client-linux-example).
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/client_reg_dereg.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,177 @@
+# The Client Registration feature
+
+The client uses the Client Registration to register with mbed Device Server, update registration and deregister.
+
+Currently, only one-to-one client-server registration is supported. One-to-many client-server registrations will be supported in an upcoming release.
+
+The Client Registration includes multiple sub-features. Currently supported:
+
+- [Register](#the-register-feature)
+- [Update](#the-update-feature)
+- [Deregister](#the-deregister-feature)
+
+## The Register feature
+
+This API enables the client registration functionality.
+
+When registering, the client:
+
+* Performs the **Register** operation and provides parameters that mbed Device Server requires to register the client (for example Endpoint Name).
+
+* Maintains the registration and session (for example, it sets the Lifetime and Queue Mode towards mbed Device Server).
+
+* Provides information on the Objects the client supports and existing Object Instances in the client.
+
+### Registering your client
+
+To provide information to mbed Device Server and issue the register command:
+
+**Step 1.** Create an mbed DS Object. This object contains information about mbed Device Server, such as its address and security mode.
+
+```
+#include "mbed-client/m2msecurity.h"
+ M2MSecurity *security = M2MInterfaceFactory::create_security(M2MSecurity::M2MServer);
+        if(security) {
+            security->set_resource_value(M2MSecurity::M2MServerUri, LWM2M_SERVER_ADDRESS);
+            security->set_resource_value(M2MSecurity::BootstrapServer, 0);
+            security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity);
+        }
+```
+
+**Step 2.** mbed Client supports both non-secure and secure mode operations. For secure mode, you need to provide a certificate, private key and server public key through the API.
+
+To create a secure mode operation:
+
+```
+#include "mbed-client/m2msecurity.h"
+ M2MSecurity *security = M2MInterfaceFactory::create_security(M2MSecurity::M2MServer);
+        if(security) {
+            security->set_resource_value(M2MSecurity::M2MServerUri, LWM2M_SERVER_ADDRESS);
+            security->set_resource_value(M2MSecurity::BootstrapServer, 0);
+            security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::Certificate);
+            security->set_resource_value(M2MSecurity::ServerPublicKey,<SERVER_CERT>,sizeof(<SERVER_CERT>));
+            security->set_resource_value(M2MSecurity::PublicKey,<CERT>,sizeof(<CERT>));
+            security->set_resource_value(M2MSecurity::Secretkey,<KEY>,sizeof(<KEY>));   
+        }
+```
+
+**Step 3.** Register all the resources that you would like to monitor or follow using mbed Device Server. To do this, create the resource objects and pass them to the Register API for registration purposes.
+
+For example, if you want to register your OMA LWM2M based Device object, you need to create the object and set the values for mandatory resources as follows:
+
+```
+#include "mbed-client/m2mdevice.h"
+M2MDevice *device = M2MInterfaceFactory::create_device();
+if(device) {
+    device->create_resource(M2MDevice::Manufacturer,MANUFACTURER);
+	device->create_resource(M2MDevice::DeviceType,TYPE);
+	device->create_resource(M2MDevice::ModelNumber,MODEL_NUMBER);
+	device->create_resource(M2MDevice::SerialNumber,SERIAL_NUMBER);
+    }
+```
+
+<span class="notes">**Note:** You can register other resources, including custom resources. Please check the [API documentation](https://docs.mbed.com/docs/mbed-client-guide/en/latest/api/annotated.html) for a detailed description of the M2MObject, M2MObjectInstance and M2MResource classes.</span>
+
+**Step 4.** You have the registration server object and resources that you want to register. Now, you need to call the register API and pass the following objects as parameters:
+
+```
+M2MInterface::register_object(M2MSecurity* register_object, M2MObjectList object_list);
+```
+
+**Success or failure callback**
+
+Because this is an asynchronous operation, you will receive the result of this operation through a callback defined in `m2minterfaceobserver.h` in your application.
+
+_Success_
+
+If the register operation is successful and the client can register all your resources to mbed DS, your application will receive the following callback:
+
+```
+void object_registered(M2MSecurity *server_object, const M2MServer& server)
+```
+
+The `M2MSecurity *server_object` specifies to which mbed Device Server instance the client has just registered and `M2MServer &server` contains the data related to mbed Device Server, including the Short ServerID and the client registration period.
+
+_Failure_
+
+If the registration operation fails for some reason, you will receive the following callback:
+
+```
+void error(M2MInterface::Error error)
+```
+
+You will get more information about the error from the `error` parameter passed with the callback; use it to fix the source of the error.
+
+## The Update feature
+
+Periodically, or in response to events within the client or as initiated by mbed Device Server, the client updates its registration information with mbed Device Server by sending it an **Update** operation.
+
+Normally, the enabler will update the registration automatically, but if you want to renew the registration before that, you can use this API.
+
+To update your registration:
+
+```
+M2MInterface::update_registration(M2MSecurity* security_object, const uint32_t lifetime)
+```
+
+To update your registration and publish newly created objects to mbed Device Server:
+
+```
+M2MInterface::update_registration(M2MSecurity *security_object, const M2MObjectList &object_list, const uint32_t lifetime);
+```
+
+**Success or failure callback**
+
+_Success_
+
+If the update operation is successful, your application will receive the following callback:
+
+```
+void registration_updated(M2MSecurity *const M2MServer& server)
+```
+
+The `M2MSecurity *server_object` specifies with which mbed Device Server instance the client has just updated the registration and `M2MServer &server` contains the data related to mbed Device Server, including the Short ServerID and the client registration period.
+
+_Failure_
+
+If the update operation fails for some reason, you will receive the following callback:
+
+```
+void error(M2MInterface::Error error)
+```
+
+## The Deregister feature
+
+The client can deregister from mbed Device Server when it no longer requires access to the server. When mbed Device Server receives the **Deregister** message it removes the device's registration information from its database. When the client needs mbed Device Server again, it has to register again.
+
+To deregister your endpoint client:
+
+If the endpoint has multiple server registrations, you need to provide the `server_object` of the server from which would like to deregister. If there is only one registration, you can pass `NULL` and the client will deregister from the default registration.
+
+```
+M2MInterface::unregister_object(M2MSecurity *object);
+```
+
+**Success or failure callback**
+
+Because this is an asynchronous operation, you will receive the result of this operation through a callback defined in `m2minterfaceobserver.h` in your application.
+
+_Success_
+
+If the client is successfully deregistered from mbed Device Server, your application will receive the following callback:
+
+```
+void object_unregistered(M2MSecurity *server_object)
+```
+
+The `M2MSecurity *server_object` specifies from which mbed Device Server instance the client has just deregistered.
+
+_Failure_
+
+If the deregistration operation fails for some reason, you will receive the following callback:
+
+```
+void error(M2MInterface::Error error)
+```
+
+You will get more information about the error from the `error` parameter passed with the callback; use it to fix the source of the problem.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/data_types.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,162 @@
+mbed Client data types
+======================
+
+This chapter describes how the different data types are processed in the mbed Client and the REST API.
+
+The following two aspects are considered:
+ 
+- How the different data types should be passed to API on mbed Client.
+- How the data is received on REST API side, and how it is converted into right data type.
+
+## Using mbed Client data types
+
+When data is transferred from mbed Client to mbed Device Server, the following need to be kept in mind:
+
+- mbed Client is based on CoAP client. The Resource values are represented as text/plain format. 
+- Different data type values have to be converted into corresponding text/plain format.
+- For example, an integer value 100 is passed in a text buffer format of 100 and it appears on the web service side as 100 in text format. 
+- The service must interpret this data to an appropriate format.
+
+### Transferring integers from mbed Client to mbed Device Server
+
+**Integer (from the application)**:
+
+```
+int value = 1;
+M2MResource* instance = objinst->create_dynamic_resource(“D", “IntegerType“,M2MResourceInstance::INTEGER, true);
+char buffer[20];
+int size = sprintf(buffer,"%d",value);
+instance->set_value((const uint8_t*)buffer, size);
+```
+
+If you want the value of the resource to be stored in the server cache for a certain period of time, you can set the `max_age` parameter. Subsequent requests to the same resource will get the response directly from the cache:
+
+```
+instance->set_max_age(15) ; // This is the resource lifetime in the server cache (in seconds).
+```
+
+**Response on the REST API**:
+
+```
+{"async-response-id":...{ "id" : "1131895768#f4b93d6e-4652-4874-82e4-41a3ced0cd56@b02ac40a-a501-44d9-be29-e6e0e5303f85/Test/0/D", "status" : 200, "payload" : "MQ==", "ct" : "text/plain", "max-age" : 0 }
+```
+
+- Base64 encoded value of the payload -> `MQ==`
+- Base64 decoded value of the payload -> `1`
+
+<span class="notes">**Note**: If the resource value is stored in the server cache and is still valid, the response comes straight from the cache in **plain text**, neither inside any json object nor encoded in B64.</span>
+
+### Transferring a float value from mbed Client to mbed Device Server
+
+**Float (from the application)**:
+
+```
+float value = 1.0232f;
+M2MResource* instance = objinst->create_dynamic_resource(“D", “IntegerType“,M2MResourceInstance::FLOAT, true);
+char buffer[20];
+int size = sprintf(buffer,"%f",_value);
+instance->set_value((const uint8_t*)buffer, size);
+```
+
+If you want the value of the resource to be stored in the server cache for a certain period of time, you can set the `max_age` parameter. Subsequent requests to the same resource will get the response directly from the cache:
+
+```
+instance->set_max_age(15) ; // This is the resource lifetime in the server cache (in seconds).
+```
+
+**Response on the REST API**:
+
+```
+{"async-response-id":...{ "id" : "1132945328#f4b93d6e-4652-4874-82e4-41a3ced0cd56@b02ac40a-a501-44d9-be29-e6e0e5303f85/Test/0/D", "status" : 200, "payload" : "MS4wMjMyMDA=", 
+"ct" : "text/plain", "max-age" : 0 }
+```
+
+- Base64 encoded value of the payload -> `MS4wMjMyMDA=`
+- Base64 decoded value of the payload -> `1.023200`
+
+<span class="notes">**Note**: If the resource value is stored in the server cache and is still valid, the response comes straight from the cache in **plain text**, neither inside any json object nor encoded in B64.</span>
+
+### Transferring a boolean value from mbed Client to mbed Device Server
+
+**Boolean (from the application)**:
+
+```
+bool value = true;
+M2MResource* instance = objinst->create_dynamic_resource(“D", “IntegerType“,M2MResourceInstance::BOOLEAN, true);
+char buffer[20];
+int size = sprintf(buffer,"%d",_value);
+instance->set_value((const uint8_t*)buffer, size);
+```
+
+If you want the value of the resource to be stored in the server cache for a certain period of time, you can set the `max_age` parameter. Subsequent requests to the same resource will get the response directly from the cache:
+
+```
+instance->set_max_age(15) ; // This is the resource lifetime in the server cache (in seconds).
+```
+
+**Response on the REST API**:
+
+```
+{"async-response-id":….{ "id" : "1131895768#f4b93d6e-4652-4874-82e4-41a3ced0cd56@b02ac40a-a501-44d9-be29-e6e0e5303f85/Test/0/D", "status" : 200, "payload" : "MQ==", "ct" : "text/plain", "max-age" : 0 }
+```
+
+- Base64 encoded value of the payload -> `MQ==`
+- Base64 decoded value of the payload -> `1`
+
+<span class="notes">**Note**: If the resource value is stored in the server cache and is still valid, the response comes straight from the cache in **plain text**, neither inside any json object nor encoded in B64.</span>
+
+### Transferring a string value from mbed Client to mbed Device Server
+
+**String (from the application)**:
+
+```
+M2MResource* instance = objinst->create_dynamic_resource(“D", “IntegerType“,M2MResourceInstance::STRING, true);
+char buffer[10] = “Test Data”;
+instance->set_value((const uint8_t*)buffer, 10);
+```
+
+If you want the value of the resource to be stored in the server cache for a certain period of time, you can set the `max_age` parameter. Subsequent requests to the same resource will get the response directly from the cache:
+
+```
+instance->set_max_age(15) ; // This is the resource lifetime in the server cache (in seconds).
+```
+
+**Response on the REST API**:
+
+```
+{"async-response-id":... { "id" : "1133335779#f4b93d6e-4652-4874-82e4-41a3ced0cd56@b02ac40a-a501-44d9-be29-e6e0e5303f85/Test/0/D", "status" : 200, "payload" : "VGVzdCBEYXRh", 
+"ct" : "text/plain", "max-age" : 0 }
+```
+
+- Base64 encoded value of the payload -> `VGVzdCBEYXRh`
+- Base64 decoded value of the payload -> `Test Data`
+
+<span class="notes">**Note**: If the resource value is stored in the server cache and is still valid, the response comes straight from the cache in **plain text**, neither inside any json object nor encoded in B64.</span>
+
+### Transferring an opaque value from mbed Client to mbed Device Server
+
+**Opaque(from the application)**:
+
+```
+M2MResource* instance = objinst->create_dynamic_resource(“D", “IntegerType“,M2MResourceInstance::OPAQUE, true);
+uint8_t buffer[12] = “Opaque Data”;
+instance->set_value(buffer, 12);
+```
+
+If you want the value of the resource to be stored in the server cache for a certain period of time, you can set the `max_age` parameter. Subsequent requests to the same resource will get the response directly from the cache:
+
+```
+instance->set_max_age(15) ; // This is the resource lifetime in the server cache (in seconds).
+```
+
+**Response on the REST API**:
+
+```
+{"async-response-id":... { "id" : "1134045351#f4b93d6e-4652-4874-82e4-41a3ced0cd56@b02ac40a-a501-44d9-be29-e6e0e5303f85/Test/0/D", "status" : 200, "payload" : "T3BhcXVlIERhdGEA", 
+"ct" : "application/octet-stream", "max-age" : 0 }
+```
+
+- Base64 encoded value of the payload -> `T3BhcXVlIERhdGEA`
+- Base64 decoded value of the payload -> `Opaque Data`
+
+<span class="notes">**Note**: If the resource value is stored in the server cache and is still valid, the response comes straight from the cache in **plain text**, neither inside any json object nor encoded in B64.</span>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/dev_man_serv_enable.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,219 @@
+# The Device Management and Service Enabler feature
+
+mbed Device Server uses the Device Management and Service Enabler to access Object Instances and Resources available on the client. The interface provides this access through the following operations:
+
+- [Create](#the-create-operation)
+- Delete
+- [Read](#the-read-operation)
+- [Write](#the-write-operation)
+- [Write Attributes](#the-write-attributes-operation)
+- [Execute](#the-execute-operation)
+
+Currently, support for the Create and Delete actions is limited to Object Instances.
+
+The Device Management and Service Enabler Interface supports the following data types:
+
+- Text: for Resources.
+- TLV: for Object and Object Instances.
+
+## The Create operation
+
+There are two types of resources you can create:
+
+- Static: you set the value of the resource once and it does not change during the course of operations.
+- Dynamic: the value is expected to change during the course of operations. Therefore, the value is fetched from setter APIs every time the server requests a read operation.
+
+Here is an example of creating a custom static Resource:
+
+```
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+_object = M2MInterfaceFactory::create_object("Test");
+if(_object) {
+    M2MObjectInstance* inst = _object->create_object_instance();
+    if(inst) {
+    	inst->create_static_resource("S",
+        			     "ResourceTest",
+                                     STATIC_VALUE,
+                                     sizeof(STATIC_VALUE)-1);
+```
+
+And here is an example of creating a custom dynamic Resource:
+
+```
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+_object = M2MInterfaceFactory::create_object("Test");
+if(_object) {
+    M2MObjectInstance* inst = _object->create_object_instance();
+    if(inst) {
+	M2MResource* res = inst->create_dynamic_resource("D","ResourceTest",true);
+        char buffer[20];
+        int size = sprintf(buffer,"%d",_value);
+        res->set_operation(M2MBase::GET_PUT_ALLOWED);
+        res->set_value((const uint8_t*)buffer,
+                                   (const uint32_t)size);
+```
+
+For more information on different resource functionalities, please check the [API documentation](https://docs.mbed.com/docs/mbed-client-guide/en/latest/api/annotated.html) for the M2MObject, M2MObjectInstance and M2MResource classes.
+
+## The Read operation
+
+The Client API allows setting values to Resources, an array of Resource Instances, an Object Instance or all the Object Instances of an Object (TLV format supported). mbed Device Server can then read these values using the **Read** operation.
+
+## The Write operation
+
+The **Write** operation is used to overwrite the value of a Resource, an array of Resource Instances or multiple Resources from an Object Instance. 
+
+Whenever there is a valid `PUT` operation for any of the resources, the application will receive a callback: 
+
+```
+void value_updated(M2MBase *base, M2MBase::BaseType type) 
+```
+Where `M2MBase` is the Object whose value has been updated and `M2MBase::BaseType` is the object type.
+
+Check the code snippet below for usage.
+```
+void value_updated(M2MBase *base, M2MBase::BaseType type) {
+        M2MResource* resource = NULL;
+        M2MResourceInstance* res_instance = NULL;
+        M2MObjectInstance* obj_instance = NULL;
+        M2MObject* obj = NULL;
+        String object_name = "";
+        String resource_name = "";
+        uint16_t object_instance_id = 0;
+        uint16_t resource_instance_id = 0;
+        if(base) {
+            switch(base->base_type()) {
+                case M2MBase::Object:
+                    obj = (M2MObject *)base;
+                    object_name = obj->name();
+                break;
+                case M2MBase::ObjectInstance:
+                    obj_instance = (M2MObjectInstance *)base;
+                    object_name = obj_instance->name();
+                    object_instance_id = obj_instance->instance_id();
+                break;
+                case M2MBase::Resource: {
+                    resource = (M2MResource*)base;
+                    object_name = resource->object_name();
+                    object_instance_id = resource->object_instance_id();
+                    resource_name = resource->name();
+                    printf("Value updated, object name %s, object instance id %d, resource name %s\r\n",
+                           resource->object_name().c_str(), resource->object_instance_id(), resource->name().c_str());
+                }
+                break;
+                case M2MBase::ResourceInstance: {
+                    res_instance = (M2MResourceInstance*)base;
+                    object_name = res_instance->object_name();
+                    object_instance_id = res_instance->object_instance_id();
+                    resource_name = res_instance->name();
+                    resource_instance_id = res_instance->instance_id();
+                }
+                break;
+            default:
+                break;
+            }
+        }
+    }
+```
+By default, callbacks are handled in the `value_updated()` function but the application can also define a callback function for an individual resource.
+
+Check the code snippet below for usage.
+
+```
+static void value_updated_global(const char *name) {
+    if(name) {
+        ...
+    }
+}
+
+void M2MLWClient::value_updated_function(const char* name) {
+    if (name) {
+        ...
+    }
+}
+
+M2MResource* res = inst->create_dynamic_resource("D", "ResourceTest", true);
+char buffer[20];
+int size = sprintf(buffer,"%d",_value);
+res->set_operation(M2MBase::GET_PUT_POST_DELETE_ALLOWED);
+res->set_value((const uint8_t*)buffer, (const uint32_t)size);
+res->set_value_updated_function(value_updated_callback(this,&MbedClient::value_updated_function));
+/* Overloaded function can be used If callback function is not in class scope. 
+res2->set_value_updated_function(value_updated_callback2(&value_updated_global));
+*/
+
+```
+
+## The Write Attributes operation
+
+Any readable Resource can have attributes that are considered during the [**Observe** operation](info_reporting.md#the-observe-feature). The following attributes are used:
+
+- Minimum Period (pmin)
+- Maximum Period (pmax)
+- Greater Than (gt)
+- Less Than (lt)
+- Step (st)
+
+mbed Device Server sets the endpoint attribute values that are used to determine when the endpoint sends the Resource value to the server.
+
+Check the [LWM2M Specification](http://technical.openmobilealliance.org/Technical/technical-information/release-program/current-releases/oma-lightweightm2m-v1-0) for details of all the possible **Write Attributes** defined for different types of Objects and Resources.
+
+## The Execute operation
+
+mbed Device Server uses the **Execute** operation to perform an action. This operation can only be performed on individual Resources. 
+
+<span class="notes">**Note:** mbed Client returns an error when the **Execute** operation is received for Object Instances or Resource Instances.</span>
+
+If you want to execute a piece of code in your application, you can pass a `POST` request from mbed Device Server.
+When your Resource receives the `POST` request, mbed Client parses the payload from the request and wraps it in the `M2MResource::M2MExecuteParameter` class. The class object is passed through the execute callback function.
+You can then typecast the `void*` argument into the corresponding `M2MResource::M2MExecuteParameter` and access the passed payload and its length through the given API. M2MResource::M2MExecuteParameter contains also information which object and object instance resource belongs to. Make sure that the payload sent through POST request is in `plain/text` format and that the content-type is set as “plain/text” on the POST request call.
+
+Check the code snippet below for usage.
+
+```
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+    static void execute_function_2(void *argument) {
+        if(argument) {
+            M2MResource::M2MExecuteParameter* param = (M2MResource::M2MExecuteParameter*)argument;
+            int payload_length = param->get_argument_value_length();
+            uint8_t* payload = param->get_argument_value();
+            String object_name = param->get_argument_object_name();
+            uint16_t object_instance_id = param->get_argument_object_instance_id();
+            String resource_name = param->get_argument_resource_name();
+    }
+    
+    void M2MLWClient::execute_function(void *argument) {
+        if(argument) {
+            M2MResource::M2MExecuteParameter* param = (M2MResource::M2MExecuteParameter*)argument;
+            int payload_length = param->get_argument_value_length();
+            uint8_t* payload = param->get_argument_value();
+            String object_name = param->get_argument_object_name();
+            uint16_t object_instance_id = param->get_argument_object_instance_id();
+            String resource_name = param->get_argument_resource_name();
+    }
+
+_object = M2MInterfaceFactory::create_object("Test");
+if(_object) {
+    M2MObjectInstance* inst = _object->create_object_instance();
+    if(inst) {
+	M2MResource* res = inst->create_dynamic_resource("D","ResourceTest",true);
+        char buffer[20];
+        int size = sprintf(buffer,"%d",_value);
+        res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+        res->set_value((const uint8_t*)buffer,
+                       (const uint32_t)size);
+        res->set_execute_function(execute_callback(this,&M2MLWClient::execute_function));
+        /* Overloaded function can be used If callback function is not in class scope. 
+        res->set_execute_function(execute_callback_2(&execute_function_2));
+        */
+```
+
+The POST method allows the client to respond immediately with the updated payload value as a piggyback response. If you want to send the payload response to the server later (because the Execute operation may take longer time on device to complete), you can handle this through the API.
+
+You can set the resource API `void set_delayed_response(bool)` to `true`. In this case, the POST request response to the server is an empty acknowledgment. When your resource is ready with the response, you can simply call `send_delayed_post_response()` on that resource and the client sends the latest resource value to the server as part of a separate response to the POST request. By default, `void set_delayed_response(bool)` is `false`, which means that the POST response returns the resource value as a piggyback payload immediately. 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/further-reading.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,14 @@
+# Useful reading
+
+[Getting started with mbed Device Connector](https://docs.mbed.com/docs/getting-started-with-mbed-device-connector/en/latest/) provides you:
+
+- a generic introduction to mbed Device Connector.
+- a quick start guide for using mbed Device Connector.
+
+[mbed Device Connector Web Interfaces](https://docs.mbed.com/docs/mbed-device-connector-web-interfaces/en/latest/) provides you:
+
+- an overview to the Web Interfaces, explaining how the web applications interact with mbed Device Connector using the REST API.
+
+[mbed Device Connector developer site](https://www.mbed.com/en/development/cloud/mbed-device-connector-service/)
+
+- a web site for developers
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/index.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,17 @@
+About this document
+=====================
+
+This document introduces the mbed Client and the use of its API. The document is divided into the following chapters:
+
+- [**Introduction**](Introduction.md) is a brief introduction to the mbed Client and its features.
+- [**The Client Registration feature**](client_reg_dereg.md) introduces the Client Registration feature in detail.
+- [**The Device Management and Service Enabler feature**](dev_man_serv_enable.md) introduces the Device Management and Service Enabler feature in detail.
+- [**The Information Reporting feature**](info_reporting.md) introduces the Information Reporting feature in detail.
+- [**mbed Client data types**](data_types.md) describes how the different data types are processed in the mbed Client and the REST API.
+- [**How to use the mbed Client API**](Howto.md) contains detailed instructions on using the mbed Client API.
+- [**Porting mbed Client**](porting-guide.md) is meant for advanced users and tells how to build mbed Client and port it for different platforms.
+- [**Useful reading**](further-reading.md) links you to mbed Device Connector documentation and the developer site.
+
+Read the doxygen API documentation [here](https://docs.mbed.com/docs/mbed-client-guide/en/latest/api/index.html).
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/info_reporting.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,20 @@
+# The Information Reporting feature
+
+mbed Device Server uses the Information Reporting to observe any changes in a registered Resource on the client. The server registers to observe the Resource. When the Resource changes, it sends a notification with its new value to all servers who asked to observe it.
+
+The interface supports the following sub-features:
+
+## The Observe feature
+
+mbed Device Server initiates an observation request to observe the changing value of either an Object, Object Instance or Resource.
+
+<span class="tips">**Tip:** Related parameters for the **Observe** operation are described in the [Write Attributes](dev_man_serv_enable.md#write-attributes) section.</span>
+
+## The Notify feature
+
+The client sends the **Notify** operation to mbed Device Server during a valid observation on a Resource, when the notification conditions are met.
+
+## Cancel
+
+mbed Device Server sends the **Cancel Observation** operation to the client to end an observation relationship for an Object Instance or a Resource.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/known-issues-mbed-client1511.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,59 @@
+# Known Issues
+
+## About this document
+
+This is the list of known issues for the 15.11 release of [mbed Client](https://github.com/ARMmbed/mbed-client). We publish mbed-client as module in GitHub, and track open issues as tickets in the repository. That makes for an easy development flow, but doesn’t make it very easy for you to get a single view of all the issues that affect the whole release. 
+
+The purpose of this document is to provide that single view of all the key issues we are aware of. It isn’t a complete list; it’s a filtered and reviewed list, focusing on the issues we thought you’d want to be aware of. Each item explains the problem, as well as workarounds if those are possible. For items filed through GitHub, we’ve included a link to the issue so that you can follow the discussion and code - or even suggest a solution.
+
+For more information about an issue, contact us on the [mbed forums](http://forums.mbed.com).
+
+### Other information not in this document
+
+We’re still very actively building mbed Client and the 15.11 release is a technology preview. As such there are some other limitations of the release that you can find described in the [release note](https://www.mbed.com/en/development/software/mbed-client/releases/mbed-client1511).
+
+#### Important Note for Windows Users
+
+If you are using this release on Microsoft Windows, please be advised that because of the way Windows handles filename and paths, you may have problems if you attempt to use this in a deep directory hierarchy with a long path name (e.g. `c:\some\very\long\path`). If you experience problems unpacking or building this release, please try it in a location with a shorter path before filing a bug. Thanks.
+
+***
+### mbed Client API may not be fully interoperable with other LWM2M servers.
+
+*Description*: mbed Client API is OMA LWM2M compatible. However, some features may not be fully interoperable against other open source LWM2M servers. This is the first release version and more features will be made interoperable over coming releases.
+
+*Workaround*: mbed Client is compatible with mbed Device Connector Service, which can be tested at [https://connector.mbed.com](https://connector.mbed.com).
+
+*Reported Issue*: ARM internal reference IOTCLT-366
+
+*Priority*: Major
+
+### mbed Client for Linux doesn't support IPv6 connectivity
+
+*Description*: mbed Client for Linux platform currently works only for IPv4-enabled LWM2M server addresses. IPv6 address support is currently broken.
+
+*Workaround*: mbed Client is compatible with mbed Device Connector Service which can be tested from [https://connector.mbed.com](https://connector.mbed.com) over IPv4 Address.
+
+*Reported Issue*: https://github.com/ARMmbed/mbed-client-linux/issues/19
+
+*Priority*: Major
+
+### mbed Client will occasionally disconnect from LWM2M Server because of network errors
+
+*Description*: If mbed Client is kept running for long durations (over 24 hours) with long lifetime values, it occasionally  goes offline due to unstable network conditions - and doesn't send periodic updates to LWM2M server.
+
+*Workaround*: Set the periodic lifetime value to less than 15 minutes if you want to run stability tests. Also, implement a network error handling mechanism on the application side, to handle `error()` callbacks received from the mbed-client library.
+
+*Reported Issue*: ARM internal reference IOTCLT-206
+
+*Priority*: Major
+
+### mbed Client might experience a memory leak when running for long durations
+
+*Description*: mbed Client might have memory leak issues when left running for longer than 12 hours.
+
+*Workaround*: None
+
+*Reported Issue*: ARM internal reference IOTCLT-290
+
+*Priority*: Major
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/mbed_Client_Known_Issues_16_03.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,42 @@
+# mbed Client Known Issues
+
+## About this document
+
+This is the list of known issues for the [16.03 release of mbed Client](Release_Note.md).
+
+We publish mbed Client as a collection of modules on GitHub. Issues are raised in the specific repositories and then tracked internally. 
+
+The purpose of this document is to provide a single view of the outstanding key issues that have not been addressed for this release. As such it is a filtered and reviewed list based on priority and potential impact. Each item summarises the problem and includes any known workarounds, along with a link to the GitHub issue (if applicable). We welcome any comments or proposed solutions.
+
+For more information about an issue, contact us on the [forums](http://forums.mbed.com).
+
+## Additional information
+
+For further information regarding this release please refer to the release notes referenced above.
+
+# Known issues
+
+## mbed Client API does not support float data type
+* **Description**: mbed Client API doesn't work correctly with float data type, as it is disabled in the FRDM target configuration.
+* **Workaround**: No workaround at the moment. There will be a fix for target-mbed-gcc soon, which will enable float data type usage.
+* **Reported Issue**: ARM internal reference IOTCLT-649
+* **Priority**: Critical
+
+## mbed-trace module has a missing test dependency on Linux and Windows build targets.
+* **Description**: The mbed-trace library has a test-dependency on cpputest, which is not yet available in the yotta registry. Since you can't download this dependency, "yt test" for mbed-trace will fail.
+* **Workaround**: No workaround available.
+* **Reported Issue**: ARM internal reference IOTCLT-650
+* **Priority**: Critical
+
+## mbed Client API may not be fully interoperable with other LWM2M servers.
+* **Description**: mbed Client API is OMA LWM2M compatible. However, some features may not be fully interoperable against other open source LWM2M servers.
+* **Workaround**: mbed Client is compatible with mbed Device Connector Service, which can be tested at [https://connector.mbed.com](https://connector.mbed.com).
+* **Reported Issue**: ARM internal reference IOTCLT-366
+* **Priority**: Major
+
+## mbed Client example application may drop off from Connector if kept running for a long duration.
+* **Description**: mbed Client example application sometimes drops off from Connector after a few hours. This may happen when mbed Client is kept running for long durations (over 24 hours) - it occasionally goes offline due to unstable network conditions, and doesn't send periodic updates to Connector.
+* **Workaround**: Set the periodic lifetime value to less than 15 minutes if you want to run stability tests. Also, implement a network error handling mechanism on the application side, to handle error() callbacks received from the mbed-client library.
+* **Reported Issue**: [https://github.com/ARMmbed/mbed-client-examples/issues/52](https://github.com/ARMmbed/mbed-client-examples/issues/52)
+* **Priority**: Major
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/mbed_Client_Release_Note_16_03.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,79 @@
+
+# Release note for mbed Client 16.03
+ 
+mbed Client is an OS-agnostic embedded software library that provides the means to connect and manage constrained embedded devices to web applications through mbed Device Server.
+ 
+## Release summary
+ 
+This is an iterative release of mbed Client, which is available for mbed OS as well as for Ubuntu-like Linux distributions. We’re continuously maturing mbed Client and adding new features to mbed Client.. This release builds on the Technology Preview 15.11 release through the introduction of new APIs, enhanced functionalities and bug fixes.
+## Collaboration
+We’re building mbed Client as a collaborative project, bringing together industry and open source community contributions. If you’d like to work on mbed Client with us, we’d encourage you [to pitch in](https://github.com/ARMmbed/mbed-os/blob/master/CONTRIBUTING.md). With this technology preview we’re ready to start receiving contributions back from the community.
+## Documentation
+To get started with mbed Client, please visit our [getting started guide](https://docs.mbed.com/docs/mbed-client-guide/en/latest/). 
+# Changes since last release
+ 
+## New APIs and functions
+
+* New APIs:
+ * Setting the max-age of a resource value. See [https://tools.ietf.org/html/draft-ietf-core-coap-09#section-5.10.6](https://tools.ietf.org/html/draft-ietf-core-coap-09#section-5.10.6).
+ * Omitting registered resources' URI path from the registration message's body (which is sent from the client to the server). 
+ * Allowing the client to send a delayed response to POST requests. See [https://tools.ietf.org/html/draft-ietf-core-coap-09#section-5.2.2](https://tools.ietf.org/html/draft-ietf-core-coap-09#section-5.2.2).
+ * Getting Object and Object Instance information from Resource Object.
+* Added a new class for handling arguments received from POST method for Resource. 
+* Enabled CoAP Blockwise payload handling by client. See  [https://tools.ietf.org/html/draft-ietf-core-block-08#section-2](https://tools.ietf.org/html/draft-ietf-core-block-08#section-2).
+* Added support for handling observation cancellation through a RESET message from Device Connector Server.
+* Disabled Bootstrap API functionality from source code.
+
+## Bug fixes
+ 
+1. Multiple fixes related to Object, Object Instance and Resource Observation.
+2. Multiple fixes related to Write Attributes parameter handling for Object, Object Instance and Resource.
+3. Multiple fixes for creating and deleting object instances.
+4. Fixes related to sending notifications from multiple resource levels.
+5. Fixing memory leaks.
+6. Fixing mbed Client IPv6 connectivity for Linux.
+7. Memory handling in the ``m2mstring`` class.
+8. Fix for preventing the client from sending multiple confirmable messages on mbed OS.
+ 
+# Modules versions
+ 
+mbed Client is available as part of mbed OS or as a standalone component for Ubuntu-like Linux distributions.
+
+The yotta modules & versions released for these different product configurations are listed below.
+
+mbed Client as part of mbed OS:
+
+1. mbed-client-quickstart (example)
+1. mbed-client - 1.6.x
+1. mbed-client-c - 2.2.x
+1. nanostack-libservice - 3.1.x
+1. mbed-client-mbedtls - 1.0.x
+1. mbedtls - 2.2.0
+1. mbed-client-mbed-os - 1.1.x
+1. mbed-client-examples
+1. target-frdm-k64f-gcc - 2.0.0
+
+
+mbed Client as a standalone distribution for Ubuntu-like Linux distributions:
+
+1. mbed-client-linux-example
+1. mbed-client - 1.6.x
+1. mbed-client-c - 2.2.x
+1. nanostack-libservice - 3.1.x
+1. mbed-client-mbedtls - 1.0.x
+1. mbedtls - 2.2.0
+1. mbed-client-linux - 1.1.x
+1. target-x86-linux-native - 1.0.0
+1. target-linux-native - 1.0.0
+ 
+ 
+### Known issues
+ 
+The known issues list for this release is available as [a separate document](Known_Issues.md)
+
+### Other ways of accessing this release
+
+
+We prefer that you access and collaborate with mbed Client online. However, the release may also be downloaded as a [tar archive file](https://mbed-media.mbed.com/filer_public/7b/75/7b75d9fe-bf15-4818-b959-c54e11e767af/mbed-client-1603.zip).
+ 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/porting-guide.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,558 @@
+<span class="notes">**Note:** To port mbed Client, you need to [install yotta and its dependencies](https://github.com/ARMmbed/yotta/blob/master/docs/index.md).</span>
+
+# mbed Client structure and build process
+
+<span class="tips">**Tip:** Before embarking on your own port, you should build the core mbed Client for an existing compilation target to get an understanding of how the mbed Client builds.</span>
+
+mbed Client is structured as a set of modules. Each module declares which other modules it depends on. When you build a module, our build system `yotta` looks at these dependencies and installs the necessary modules before completing the build.
+
+This is also the process to build applications for the mbed Client (including the example application in the release). The application declares dependencies on the mbed Client and when it is built, `yotta` ensures that the modules (and anything that they depend on, recursively) are present before building. 
+
+In general, `yotta` downloads and installs the necessary modules over the internet from the public yotta Registry (which saves published versions of modules) or from a specified source control URL.
+
+# Components of mbed Client
+
+## Component software modules
+
+mbed Client consists of one main component. More major components will be added in future development phases:
+
+ * `mbed-client` is the core mbed Client, providing C++ APIs for the mbed Client.
+
+This module depends on further internal modules:
+
+```
+mbed-client x.x.x
+|
+|_mbed-client-c x.x.x
+|   |_mbed-client-libservice x.x.x
+|
+|_mbed-client-linux x.x.x
+```
+
+To list the dependency trees, use the [`yotta list --all` command](http://docs.yottabuild.org/reference/commands.html).
+
+<span class="notes">**Note**: In this case, we have listed the dependencies for the `x86-linux-native` compilation target. Different modules are needed for different compilation targets.</span>
+
+We are using the [mbed Client Linux example](https://github.com/ARMmbed/mbed-client-linux-example) in this document. You can see that it depends directly only on the `mbed-client` and `mbed-client-linux` modules. These modules depend internally on various other modules.
+
+```
+mbed-client-linux-example x.x.x
+|
+|_mbed-client x.x.x
+   |
+   |_mbed-client-c x.x.x
+   |   |_mbed-client-libservice x.x.x
+   |
+   |_mbed-client-linux x.x.x
+```
+
+## Compilation targets
+
+To compile for a target board, you need a [target description](http://docs.yottabuild.org/tutorial/targets.html) that describes how to compile for the target. 
+
+The `mbed-client` module uses the platform name that each target defines to choose which `mbed-client-<platform-name>` module to depend on to provide the platform-specific implementation.
+
+# Porting mbed Client to a different platform
+
+To port mbed Client to a new platform:
+
+ 1. [Request for a development repository](#requesting-for-a-development-repository).
+ 2. [Create a yotta compilation target for your board](#creating-a-yotta-compilation-target).
+ 3. [Implement the `mbed-client-xxx` module for your target platform](#implementing-mbed-client-xxx).
+ 4. [Modify the `module.json` of the `mbed-client` module](#modifying-the-json-file-in-the-mbed-client-module).
+ 5. [Verify that your implementation is correct](#testing-and-verification).
+
+The `yotta` build system is designed for easy reuse of generic modules. If you intend to support multiple platforms that share common features, we recommend moving the common functionality into a separate module and use it for each platform.
+
+## Requesting for a development repository
+
+We provide private git repositories to our partners porting mbed Client. Only the members of the mbed Client team and relevant partner contacts and engineers have access to these repositories.
+
+When you contact `support@mbed.org`, a repository will be created for your module. You also need to provide the target description of your board as follows:
+
+- **`mbed-client-<platform-name>`** is the module that provides the `mbed-client-xxx` implementation for your platform. You may choose to split it into further modules in the future, to enable sharing of code, but we recommend that you implement the port for your first board in this module itself. 
+
+- **`target-<targetname>`** contains the yotta target description of the target you are porting to. This is usually your platform name.
+
+## Creating a yotta compilation target
+
+An example on compiling for linux target can be found in the `yotta_targets` directory of [the example application] (https://github.com/ARMmbed/mbed-client-linux-example).
+
+Please, refer to the [yotta documentation](http://yottadocs.mbed.com/tutorial/targets.html) for setting up your compilation target.
+
+1.To make your target available locally (without publishing it), you use the `yotta link-target` command to link it into the global install targets directory:
+
+```
+# in the directory of your target:
+yotta link-target
+```
+
+2.Use `yotta link-target <targetname>` command to make the globally linked target available when compiling another module.
+
+3.Use the `yotta target <targetname>` command to select your target for the compilation.
+
+## Implementing mbed-client-xxx
+
+Clone your `mbed-client-<your-platform-name>` module and `mbed-client` modules from GitHub.
+
+The `mbed-client-<your-platform-name>` module needs to provide a socket and timer implementation for your target platform. The `mbed-client-xxx` module should include files `m2mconnectionhandler.h`and `m2mtimer.h` from `mbed-client` and implement a corresponding `.cpp` file that points to the platform-specific private implementations of the timer and the socket.
+
+<span class="notes">**Note**: Private implementation classes **must** be named as `M2MConnectionHandlerPimpl` and `M2MTimerPimpl`, because of forward declarations.</span>
+
+An example of mbed-client-platform:
+
+```
+|_module.json
+|
+|_mbed-client-platform
+|    |_m2mconnectionhandlerpimpl.h
+|    |_m2mtimerpimpl.h
+|
+|_source
+    |_m2mconnectionhandler.cpp
+    |_m2mconnectionhandlerpimpl.cpp
+    |_m2mtimer.cpp
+    |_m2mtimerpimpl.cpp
+```
+
+To make your module available to other modules that you want to build, you need to use the [`yotta link`](http://docs.yottabuild.org/reference/commands.html#yotta-link) command to link it to the module where you want to test it out.
+
+For example, to use your local your in-development mbed-client implementation, use the command `yotta link mbed-client-xxx` in the main `mbed-client` module.
+
+```
+# in mbed-client, link your module:
+yotta link mbed-client-xxx
+```
+
+You can also just commit and push your untested code to GitHub, but it is always a good idea to test before committing.
+
+Your `mbed-client-xxx` module must provide a platform-specific implementation for the mbed-client. The APIs that need porting are defined in the `mbed-client-linux` module. The header files contain documentation alongside the declaration of each function, where the function is described along with its parameters and return value.
+
+There are two header files that require porting for your platform:
+
+- `m2mconnectionhandler.h`
+- `m2mtimer.h` 
+
+To see how this is done in Linux, check the `mbed-client-linux` module from the mbed [Client Linux Example](https://github.com/ARMmbed/mbed-client-linux-example).
+
+### Implementing the M2MConnectionHandler class for your platform
+
+```
+/*
+ * Copyright (c) 2015 ARM. All rights reserved.
+ */
+#ifndef M2M_CONNECTION_HANDLER_H__
+#define M2M_CONNECTION_HANDLER_H__
+
+#include "mbed-client/m2mconfig.h"
+#include "mbed-client/m2minterface.h"
+#include "mbed-client/m2mconnectionobserver.h"
+#include "nsdl-c/sn_nsdl.h"
+
+/**
+ * \brief M2MConnectionHandler.
+ * This class handles the socket connection for the LWM2M Client.
+ */
+
+class M2MConnectionHandler {
+public:
+
+    /**
+     * @enum ConnectionError
+     * This enum defines an error that can come from
+     * socket read and write operation.
+     */
+    typedef enum {
+        CONNECTION_ERROR_WANTS_READ = -1000,
+        CONNECTION_ERROR_WANTS_WRITE = -1001,
+        ERROR_NONE = 0,
+        SSL_CONNECTION_ERROR,
+        SOCKET_READ_ERROR,
+        SOCKET_SEND_ERROR,
+        SOCKET_ABORT,
+        DNS_RESOLVING_ERROR,
+        SSL_HANDSHAKE_ERROR
+    }ConnectionError;
+
+
+public:
+
+    /**
+    * \brief Constructor
+    */
+    M2MConnectionHandler(M2MConnectionObserver &observer,
+                         M2MConnectionSecurity* sec,
+                         M2MInterface::BindingMode mode,
+                         M2MInterface::NetworkStack stack);
+
+    /**
+    * \brief Destructor
+    */
+    ~M2MConnectionHandler();
+
+    /**
+    * \brief This binds the socket connection.
+    * \param listen_port Port to be listened to for an incoming connection.
+    * \return True if successful, else false.
+    */
+    bool bind_connection(const uint16_t listen_port);
+
+    /**
+    * \brief This resolves the server address. Output is
+    * returned through a callback.
+    * \param String The server address.
+    * \param uint16_t The server port.
+    * \param ServerType The server type to be resolved.
+    * \param security The M2MSecurity object that determines which
+    * type of secure connection will be used by the socket.
+    * \return True if address is valid, else false.
+    */
+    bool resolve_server_address(const String& server_address,
+                                const uint16_t server_port,
+                                M2MConnectionObserver::ServerType server_type,
+                                const M2MSecurity* security);
+
+    /**
+    * \brief Sends data to the connected server.
+    * \param data_ptr The data to be sent.
+    * \param data_len The length of data to be sent.
+    * \param address_ptr The address structure to which the data needs to be sent.
+    * \return True if data is sent successfully, else false.
+    */
+    bool send_data(uint8_t *data_ptr,
+                           uint16_t data_len,
+                           sn_nsdl_addr_s *address_ptr);
+
+    /**
+    * \brief Listens to the incoming data from a remote server.
+    * \return True if successful, else false.
+    */
+    bool start_listening_for_data();
+
+    /**
+    * \brief Stops listening to the incoming data.
+    */
+    void stop_listening();
+
+    /**
+     * \brief Sends directly to the socket. This is used by
+     * security classes to send the data after it has been encrypted.
+     * \param buf Buffer to send.
+     * \param len The length of the buffer.
+     * \return Number of bytes sent or -1 if failed.
+     */
+    int send_to_socket(const unsigned char *buf, size_t len);
+
+    /**
+     * \brief Receives directly from the socket. This
+     * is used by the security classes to receive raw data to be decrypted.
+     * \param buf Buffer to send.
+     * \param len The length of the buffer.
+     * \return Number of bytes read or -1 if failed.
+     */
+    int receive_from_socket(unsigned char *buf, size_t len);
+
+    /**
+    * \brief Closes the open connection.
+    */
+    void close_connection();
+
+    /**
+    * \brief Error handling for DTLS connectivity.
+    * \param error Error code from the TLS library.
+    */
+    void handle_connection_error(int error);
+
+    /**
+     * \brief Sets the network interface handler that is used by client to connect
+     * to a network over IP..
+     * \param handler A network interface handler that is used by client to connect.
+     *  This API is optional but provides a mechanism for different platforms to
+     * manage usage of underlying network interface by client.
+     */
+    void set_platform_network_handler(void *handler = NULL);
+
+    /**
+    * \brief Claims mutex to prevent thread clashes
+    * in multithreaded environment.
+    */
+    void claim_mutex();
+
+    /**
+    * \brief Releases mutex to prevent thread clashes
+    * in multithreaded environment.
+    */
+    void release_mutex();
+
+private:
+
+    M2MConnectionObserver                       &_observer;
+    M2MConnectionHandlerPimpl                   *_private_impl;
+
+friend class Test_M2MConnectionHandler;
+friend class Test_M2MConnectionHandler_mbed;
+friend class Test_M2MConnectionHandler_linux;
+friend class M2MConnection_TestObserver;
+};
+
+#endif //M2M_CONNECTION_HANDLER_H__
+
+```
+
+Please note that some of these functions are asynchronous in nature and some are expecting a callback from the network. For example, receiving data from a socket needs to be communicated back to `mbed-client` so that the library can act on the data received. The callback comes through the Observer class defined in `M2MConnectionObserver`.
+
+The file `m2mconnectionobserver.h` is present in `mbed-client`. To see how the callback needs to be called, check the implementation in `m2mconnectionhandlerpimpl.cpp` in  `mbed-client-linux`. 
+
+```
+/*
+ * Copyright (c) 2015 ARM. All rights reserved.
+ */
+#ifndef M2M_CONNECTION_OBSERVER_H__
+#define M2M_CONNECTION_OBSERVER_H__
+
+#include "mbed-client/m2minterface.h"
+
+/**
+ * @brief Observer class for informing socket activity to the state machine
+ */
+
+class M2MConnectionObserver
+{
+
+public :
+
+    /**
+      * \enum ServerType, Defines the type of the
+      * server that the client wants to use.
+      */
+    typedef enum {
+        Bootstrap,
+        LWM2MServer
+    }ServerType;
+
+    /**
+     * \brief The M2MSocketAddress struct.
+     * Unified container for holding socket address data
+     * across different platforms.
+     */
+    struct SocketAddress{
+        M2MInterface::NetworkStack  _stack;
+        void                        *_address;
+        uint8_t                     _length;
+        uint16_t                    _port;
+    };
+
+    /**
+    * \brief Indicates that data is available from socket.
+    * \param data The data read from the socket.
+    * \param data_size The length of the data read from the socket.
+    * \param address The address of the server where the data is coming from.
+    */
+    virtual void data_available(uint8_t* data,
+                                uint16_t data_size,
+                                const M2MConnectionObserver::SocketAddress &address) = 0;
+
+    /**
+    * \brief Indicates an error occured in socket.
+    * \param error_code The error code from socket, it cannot be used any further.
+    * \param retry Indicates whether to re-establish connection.
+    */
+    virtual void socket_error(uint8_t error_code, bool retry = true) = 0;
+
+    /**
+    * \brief Indicates that the server address resolving is ready.
+    * \param address The resolved socket address.
+    * \param server_type The type of the server.
+    * \param server_port The port of the resolved server address.
+    */
+    virtual void address_ready(const M2MConnectionObserver::SocketAddress &address,
+                               M2MConnectionObserver::ServerType server_type,
+                               const uint16_t server_port) = 0;
+
+    /**
+    * \brief Indicates that data has been sent successfully.
+    */
+    virtual void data_sent() = 0;
+};
+
+#endif // M2M_CONNECTION_OBSERVER_H__
+
+```
+
+### Implementing M2MTimer class for your platform
+
+This class provides the periodic timer functionality for your platform.
+
+```
+/*
+ * Copyright (c) 2015 ARM. All rights reserved.
+ */
+#ifndef M2M_TIMER_H
+#define M2M_TIMER_H
+
+#include <stdint.h>
+
+class M2MTimerObserver;
+/**
+ * @brief M2MTimerImpl
+ * Private implementation class for timer, this can be
+ * modified based on the board on which mbed Client needs
+ * to be used.
+ */
+class M2MTimerImpl
+{
+private:
+
+    // Prevents the use of assignment operator
+    M2MTimer& operator=(const M2MTimer& other);
+
+    // Prevents the use of copy constructor
+    M2MTimer(const M2MTimer& other);
+    
+public:
+
+    /**
+    * Constructor.
+    */
+    M2MTimer(M2MTimerObserver& _observer);
+
+    /**
+    * Destructor.
+    */
+    virtual ~M2MTimer();
+
+    /**
+     * Starts timer
+     * @param interval Timer's interval in milliseconds
+    * @param single_shot defines if timer is ticked
+    * once or is it restarted everytime timer expires.
+    */
+    void start_timer(uint64_t interval, bool single_shot = true);
+
+    /**
+     * @brief Starts timer in DTLS manner.
+     * @param intermediate_interval Intermediate interval to use, must be smaller than tiotal (usually 1/4 of total).
+     * @param total_interval Total interval to use, this is the timeout value of a DTLS packet.
+     * @param type Type of the timer
+     */
+    void start_dtls_timer(uint64_t intermediate_interval, uint64_t total_interval, 
+                          M2MTimerObserver::Type type = M2MTimerObserver::Dtls);
+
+    /**
+    * Stops timer.
+    * This cancels the ongoing timer.
+    */
+    void stop_timer();
+    
+    /**
+     * @brief Checks if the intermediate interval has passed.
+     * @return true if interval has passed, false otherwise.
+     */
+    bool is_intermediate_interval_passed();
+
+    /**
+     * @brief Checks if the total interval has passed.
+     * @return true if interval has passed, false otherwise.
+     */
+    bool is_total_interval_passed();
+
+};
+
+#endif // M2M_TIMER_H
+```
+
+The timer API functions are asynchronous in nature and whenever a timer event is available, `mbed-client` is notified, so that the library can act on the _timer expired_ signal. The callback is received through an Observer class defined in `M2MTimerObserver` .
+
+The file `m2mtimerobserver.h` is present in `mbed-client`. To see how the callback needs to be called, check the implementation in `m2mtimerimpl.cpp` in `mbed-client-linux`. 
+
+```
+/*
+ * Copyright (c) 2015 ARM. All rights reserved.
+ */
+#ifndef M2M_TIMER_OBSERVER_H
+#define M2M_TIMER_OBSERVER_H
+
+/**
+ *  Observer class for informing the parent class of the timer expiry.
+ */
+class M2MTimerObserver
+{
+public:
+    /**
+      * \enum Defines the types of timer
+      * that can be created for mbed Client.
+      */
+    typedef enum {
+        Notdefined,
+        Registration,
+        NsdlExecution,
+        PMinTimer,
+        PMaxTimer,
+        Dtls,
+        QueueSleep,
+        RetryTimer
+    }Type;
+
+    /**
+    * \brief Indicates that the timer has expired.
+    * \param type The type of the timer that has expired.
+    */
+    virtual void timer_expired(M2MTimerObserver::Type type =
+                               M2MTimerObserver::Notdefined) = 0;
+};
+
+#endif // M2M_TIMER_OBSERVER_H
+```
+
+## Modifying the `json` file in the `mbed-client` module
+
+You need to add your target name to `module.json` so that when you set `yt target <platform>`, yotta can resolve the dependency correctly and link the main library with your module.
+
+Two platforms, mbed OS and Linux, are already supported. You just need to add your module support after that.
+
+```
+{
+  "name": "mbed-client",
+  "version": "1.12.0",
+  "description": "Mbed Client API",
+  "private": true,
+  "keywords": [],
+  "author": "XXX XXX <xxx.xxx@xxx.com>",
+  "homepage": "https://github.com/ARMmbed/mbed-client",
+  "licenses": [
+    {
+      "url": "https://spdx.org/licenses/Apache-2.0",
+      "type": "Apache-2.0"
+    }
+  ],
+  "dependencies": {
+    "mbed-client-c": "^2.0.0"
+  },
+  "targetDependencies": {
+    "arm": {
+      "mbed-client-mbed": "^3.0.0"
+    },
+    "linux": {
+      "mbed-client-linux": "^3.0.0"
+    },
+    "<your platform as defined in target.json>" : {
+      "mbed-client-platform": "<published version , can be done later, first link locally as explained in the steps above>"
+    },
+  }
+}
+```
+
+## Testing and verification
+
+You can build your mbed-client port immediately:
+
+```
+# use the target we previously made locally available (not necessary if your target has been published):
+yotta link-target <yourtargetname>
+# build!
+yotta build
+```
+
+A `helloworld-mbedclient` program will be produced inside the `build/<yourtargetname>/test/` directory. This test application may require some changes to compile and run for your platform. Check for compilation errors. If you find any, fix the test application for your testing. 
+
+Follow the `readme` [instructions](https://github.com/ARMmbed/mbed-client-linux-example) of the `mbed-client-linux` example to see what the test application can do.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/docs/release-note-mbed-client-1511.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,56 @@
+# mbed Client 15.11 Technology Preview Release Note
+
+This is the first Technology Preview of mbed Client, which is available for mbed OS as well as Linux. We’re actively working on mbed Client and we expect to make exciting changes in the next six months. We’re making this technology preview available so you can see the trajectory we’re on. Our focus in this release is on laying the foundation for mbed Client development and collaboration, particularly core tools, technology and testing.
+
+We expect mbed Client developers to be able to access, build and run example projects and to explore the underlying code.
+
+## About this release
+
+Note that this is a technology preview release, which means that this release is not yet suitable for volume production use. The software is still maturing, and a number of things may change, including module names, repository URLs, APIs, header file names and configuration parameters. We'll try to mitigate the impact that these changes have on your code where possible.
+
+Note that in this release we're changing our version numbering scheme for mbed Client releases, to a calendar-based (year and month YY.MM) scheme. This release (15.11) has previously been called 3.0 in some communications.
+
+## Collaboration
+
+We’re building mbed Client as a collaborative project, bringing together industry and open source community contributions. If you’d like to work on mbed Client with us, we’d encourage you [to pitch in](https://github.com/ARMmbed/mbed-os/blob/master/CONTRIBUTING.md). With this technology preview we’re ready to start receiving contributions back from the community.
+
+## Documentation
+
+To get started with mbed Client, please visit our [getting started guide](https://docs.mbed.com/docs/mbed-client-guide/en/latest/).
+
+## Changes since the last release
+
+This section documents the changes between this release and the earlier mbed Client Beta (15.09) release.
+
+This release contains the following new features:
+Securely connect to mbed Device Server (mbed DS) over TCP connection through TLS. The supported secure connection includes Certificate mode. We still support non-secure connection mode for fast development and debugging.
+
+New LWM2M Firmware Object class preview for application development.
+
+## Known issues
+
+The known issues for this release are described [on GitHub](https://github.com/ARMmbed/mbed-client/blob/master/docs/known-issues-mbed-client1511.md).
+
+## Other ways of accessing this release
+
+We prefer that you access and collaborate with mbed Client online. However, the release may also be downloaded as an archive [on mbed.com](https://www.mbed.com/en/development/software/mbed-client/releases/mbed-client1511/).
+
+# Module versions in this release
+
+This release comprises the following yotta modules and their versions:
+ 
+
+| Module                           |  Version   |
+|----------------------------------|------------|
+| `mbed-client`                    |   1.2.1	   |
+| `mbed-client-c`                  |   1.1.1	   |
+| `mbed-client-libservice`         |   3.0.8	   |
+| `mbed-client-linux`              |   1.1.0	   |
+| `mbed-client-linux-example`  	   |   1.0.0	   |
+| `mbedtls`  	 		                  |   2.2.0	   |
+| `mbed-client-mbed-tls`           |   1.0.9	   |
+| `target-x86-linux-native`        |   1.0.0	   |
+| `target-linux-native`            |   1.0.0	   |
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/doxygen/mbedclient_doxy	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1850 @@
+# Doxyfile 1.8.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should 
+# identify the project. Note that if you do not use Doxywizard you need 
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = mbed-client
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description 
+# for a project that appears at the top of each page and should give viewer 
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = "mbed Client C++ library"
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is 
+# included in the documentation. The maximum height of the logo should not 
+# exceed 55 pixels and the maximum width should not exceed 200 pixels. 
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = ../docs
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, 
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip. Note that you specify absolute paths here, but also 
+# relative paths, which will be relative from the directory where doxygen is 
+# started.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful if your file system 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 16
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only). 
+# A mapping has the form "name=value". For example adding 
+# "class=itcl::class" will allow you to use the command class in the 
+# itcl::class meaning.
+
+TCL_SUBST              = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it 
+# parses. With this tag you can assign which parser to use for a given 
+# extension. Doxygen has a built-in mapping, but you can override or extend it 
+# using this tag. The format is ext=language, where ext is a file extension, 
+# and language is one of the parsers supported by doxygen: IDL, Java, 
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, 
+# C++. For instance to make doxygen treat .inc files as Fortran files (default 
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note 
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the 
+# files are not read by doxygen.
+
+EXTENSION_MAPPING      = 
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all 
+# comments according to the Markdown format, which allows for more readable 
+# documentation. See http://daringfireball.net/projects/markdown/ for details. 
+# The output of markdown processing is further processed by doxygen, so you 
+# can mix doxygen, HTML, and XML commands with Markdown formatting. 
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented classes, 
+# or namespaces to their corresponding documentation. Such a link can be 
+# prevented in individual cases by by putting a % sign in front of the word or 
+# globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also makes the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to 
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES (the
+# default) will make doxygen replace the get and set methods by a property in
+# the documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and 
+# unions are shown inside the group in which they are included (e.g. using 
+# @ingroup) instead of on a separate page (for HTML and Man pages) or 
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and 
+# unions with only public data fields will be shown inline in the documentation 
+# of the scope in which they are defined (i.e. file, namespace, or group 
+# documentation), provided this scope is documented. If set to NO (the default), 
+# structs, classes, and unions are shown on a separate page (for HTML and Man 
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
+# determine which symbols to keep in memory and which to flush to disk. 
+# When the cache is full, less often used symbols will be written to disk. 
+# For small to medium size projects (<1000 input files) the default value is 
+# probably good enough. For larger projects a too small cache size can cause 
+# doxygen to be busy swapping symbols to and from disk most of the time 
+# causing a significant performance penalty. 
+# If the system has enough physical memory increasing the cache will improve the 
+# performance by keeping more symbols in memory. Note that the value works on 
+# a logarithmic scale so increasing the size by one will roughly double the 
+# memory usage. The cache size is given by this formula: 
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be 
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given 
+# their name and scope. Since this can be an expensive process and often the 
+# same symbol appear multiple times in the code, doxygen keeps a cache of 
+# pre-resolved symbols. If the cache is too small doxygen will become slower. 
+# If the cache is too large, memory is wasted. The cache size is given by this 
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, 
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal 
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = NO
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = YES
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = YES
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = YES
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = YES
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 
+# will list include files with double quotes in the documentation 
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen 
+# will sort the (brief and detailed) documentation of class members so that 
+# constructors and destructors are listed first. If set to NO (the default) 
+# the constructors will appear in the respective orders defined by 
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. 
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO 
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to 
+# do proper type resolution of all parameters of a function it will reject a 
+# match between the prototype and the implementation of a member function even 
+# if there is only one candidate or it is obvious which candidate to choose 
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen 
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or macro consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and macros in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 18
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
+# This will remove the Files entry from the Quick Index and from the 
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index 
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 
+# by doxygen. The layout file controls the global structure of the generated 
+# output files in an output format independent way. To create the layout file 
+# that represents doxygen's defaults, run doxygen with the -l option. 
+# You can optionally specify a file name after the option, if omitted 
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            = 
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files 
+# containing the references data. This must be a list of .bib files. The 
+# .bib extension is automatically appended if omitted. Using this command 
+# requires the bibtex tool to be installed. See also 
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style 
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this 
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES         = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = ../mbed-client
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py 
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.d \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.idl \
+                         *.odl \
+                         *.cs \
+                         *.php \
+                         *.php3 \
+                         *.inc \
+                         *.m \
+                         *.markdown \
+                         *.md \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.f90 \
+                         *.f \
+                         *.for \
+                         *.vhd \
+                         *.vhdl
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag. 
+# Note that relative paths are relative to the directory from which doxygen is 
+# run.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or 
+# directories that are symbolic links (a Unix file system feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = */config/*
+EXCLUDE_PATTERNS       += */docs/*
+EXCLUDE_PATTERNS       += */doxygen/*
+EXCLUDE_PATTERNS       += */source/*
+EXCLUDE_PATTERNS       += */test/*
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty or if 
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) 
+# and it is also possible to disable source filtering for a specific pattern 
+# using *.ext= (so without naming a filter). This option only has effect when 
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS = 
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
+# link to the source code.  Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header. Note that when using a custom header you are responsible  
+# for the proper inclusion of any scripts and style sheets that doxygen 
+# needs, which is dependent on the configuration options used. 
+# It is advised to generate a default header using "doxygen -w html 
+# header.html footer.html stylesheet.css YourConfigFile" and then modify 
+# that header. Note that the header is subject to change so you typically 
+# have to redo this when upgrading to a newer version of doxygen or when 
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If left blank doxygen will 
+# generate a default style sheet. Note that it is recommended to use 
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this 
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET        = 
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional 
+# user-defined cascading style sheet that is included after the standard 
+# style sheets created by doxygen. Using this option one can overrule 
+# certain style aspects. This is preferred over using HTML_STYLESHEET 
+# since it does not replace the standard style sheet and is therefor more 
+# robust against future updates. Doxygen will copy the style sheet file to 
+# the output directory.
+
+HTML_EXTRA_STYLESHEET  = 
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 
+# other source files which should be copied to the HTML output directory. Note 
+# that these files will be copied to the base HTML output directory. Use the 
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that 
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       = 
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 
+# Doxygen will adjust the colors in the style sheet and background images 
+# according to this color. Hue is specified as an angle on a colorwheel, 
+# see http://en.wikipedia.org/wiki/Hue for more information. 
+# For instance the value 0 represents red, 60 is yellow, 120 is green, 
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 
+# the colors in the HTML output. For a value of 0 the output will use 
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 
+# the luminance component of the colors in the HTML output. Values below 
+# 100 gradually make the output lighter, whereas values above 100 make 
+# the output darker. The value divided by 100 is the actual gamma applied, 
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
+# page will contain the date and time when the page was generated. Setting 
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of 
+# entries shown in the various tree structured indices initially; the user 
+# can expand and collapse entries dynamically later on. Doxygen will expand 
+# the tree to such a level that at most the specified number of entries are 
+# visible (unless a fully collapsed tree already exceeds this amount). 
+# So setting the number of entries 1 will produce a full collapsed tree by 
+# default. 0 is a special value representing an infinite number of entries 
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup. 
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely 
+# identify the documentation publisher. This should be a reverse domain-name 
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
+# content.
+
+CHM_INDEX_ENCODING     = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated 
+# that can be used as input for Qt's qhelpgenerator to generate a 
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
+# be used to specify the file name of the resulting .qch file. 
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               = 
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to 
+# add. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   = 
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the 
+# custom filter to add. For more information please see 
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> 
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  = 
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 
+# project's 
+# filter section matches. 
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> 
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  = 
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
+# be used to specify the location of Qt's qhelpgenerator. 
+# If non-empty doxygen will try to run qhelpgenerator on the generated 
+# .qhp file.
+
+QHG_LOCATION           = 
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files  
+# will be generated, which together with the HTML files, form an Eclipse help 
+# plugin. To install this plugin and make it available under the help contents 
+# menu in Eclipse, the contents of the directory containing the HTML and XML 
+# files needs to be copied into the plugins directory of eclipse. The name of 
+# the directory within the plugins directory should be the same as 
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before 
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin 
+# the directory name containing the HTML and XML files should also have 
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) 
+# at top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it. Since the tabs have the same information as the 
+# navigation tree you can set this option to NO if you already set 
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
+# structure should be generated to display hierarchical information. 
+# If the tag value is set to YES, a side panel will be generated 
+# containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
+# Windows users are probably better off using the HTML help feature. 
+# Since the tree basically has the same information as the tab index you 
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML 
+# documentation. Note that a value of 0 will completely suppress the enum 
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open 
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included 
+# as images in the HTML documentation. The default is 10. Note that 
+# when you change the font size after a successful doxygen run you need 
+# to manually remove any form_*.png images from the HTML output directory 
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images 
+# generated for formulas are transparent PNGs. Transparent PNGs are 
+# not supported properly for IE 6.0, but are supported on all modern browsers. 
+# Note that when changing this option you need to delete any form_*.png files 
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax 
+# (see http://www.mathjax.org) which uses client side Javascript for the 
+# rendering instead of using prerendered bitmaps. Use this if you do not 
+# have LaTeX installed or if you want to formulas look prettier in the HTML 
+# output. When enabled you may also need to install MathJax separately and 
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the 
+# HTML output directory using the MATHJAX_RELPATH option. The destination 
+# directory should contain the MathJax.js script. For instance, if the mathjax 
+# directory is located at the same level as the HTML output directory, then 
+# MATHJAX_RELPATH should be ../mathjax. The default value points to 
+# the MathJax Content Delivery Network so you can quickly see the result without 
+# installing MathJax.  However, it is strongly recommended to install a local 
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension 
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     = 
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box 
+# for the HTML output. The underlying search engine uses javascript 
+# and DHTML and should work on any modern browser. Note that when using 
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets 
+# (GENERATE_DOCSET) there is already a search function so this one should 
+# typically be disabled. For large projects the javascript based search engine 
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be 
+# implemented using a PHP enabled web server instead of at the web client 
+# using Javascript. Doxygen will generate the search PHP script and index 
+# file to put on the web server. The advantage of the server 
+# based approach is that it scales better to large projects and allows 
+# full text search. The disadvantages are that it is more difficult to setup 
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name. 
+# Note that when enabling USE_PDFLATEX this option is only used for 
+# generating bitmaps for formulas in the HTML output, but not in the 
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for 
+# the generated latex document. The footer should contain everything after 
+# the last chapter. If it is left blank doxygen will generate a 
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include 
+# source code with syntax highlighting in the LaTeX output. 
+# Note that which sources are shown also depends on other settings 
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the 
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See 
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition that 
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all references to function-like macros 
+# that are alone on a line, have an all uppercase name, and do not end with a 
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each 
+# tag file the location of the external documentation should be added. The 
+# format of a tag file without this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths 
+# or URLs. Note that each tag file must have a unique name (where the name does 
+# NOT include the path). If a tag file is not located in the directory in which 
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option also works with HAVE_DOT disabled, but it is recommended to 
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = NO
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
+# allowed to run in parallel. When set to 0 (the default) doxygen will 
+# base this on the number of processors available in the system. You can set it 
+# explicitly to a value larger than 0 to get control over the balance 
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that 
+# doxygen generates. When you want a differently looking font you can specify 
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find 
+# the font, which can be done by putting it in a standard location or by setting 
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the 
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font. 
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to 
+# set the path where dot can find it.
+
+DOT_FONTPATH           = 
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside 
+# the class node. If there are many fields or methods and many nodes the 
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS 
+# threshold limits the number of items for each type to make the size more 
+# managable. Set this to 0 for no limit. Note that the threshold may be 
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = YES
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include 
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are svg, png, jpg, or gif. 
+# If left blank png will be used. If you choose svg you need to set 
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to 
+# enable generation of interactive SVG images that allow zooming and panning. 
+# Note that this requires a modern browser other than Internet Explorer. 
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you 
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that 
+# contain msc files that are included in the documentation (see the 
+# \mscfile command).
+
+MSCFILE_DIRS           = 
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 44
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, because dot on Windows does not 
+# seem to support this out of the box. Warning: Depending on the platform used, 
+# enabling this option may lead to badly anti-aliased labels on the edges of 
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/get_sizes.sh	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,88 @@
+#!/bin/bash
+# Copyright (c) 2016 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# * http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+echo
+echo "Build mbed Client API for executable size collection"
+echo
+
+BUILD_TARGET="frdm-k64f-armcc"
+
+yt target $BUILD_TARGET
+yt build
+
+SIZE_CMD="size --totals"
+
+OUTPUT_PATH="results/"
+OUTPUT_FILE_POSTFIX="_${BUILD_TARGET}_size.txt"
+
+MAIN_MODULE_NAME="mbed-client"
+
+# yotta dependencies
+YOTTA_DEPS=(
+    'cmsis-core'
+    'cmsis-core-k64f'
+    'core-util'
+    'dlmalloc'
+    'greentea-client'
+    'mbed-client-c'
+    'mbed-client-mbed-os'
+    'mbed-client-mbedtls'
+    'mbed-drivers'
+    'mbed-hal'
+    'mbed-hal-frdm-k64f'
+    'mbed-hal-k64f'
+    'mbed-hal-ksdk-mcu'
+    'mbedtls'
+    'mbed-trace'
+    'minar'
+    'minar-platform-mbed'
+    'nanostack-libservice'
+    'sal'
+    'sal-driver-lwip-k64f-eth'
+    'sal-iface-eth'
+    'sal-stack-lwip'
+    'sockets'
+    'ualloc'
+    'uvisor-lib'
+)
+
+
+# yotta dummy dependencies, which have different naming
+YOTTA_DUMMY_DEPS=(
+    'cmsis-core-freescale'
+    'compiler-polyfill'
+    'mbed-hal-freescale'
+    'minar-platform'
+)
+
+
+echo "Writing object file size informations to ${OUTPUT_PATH}"
+
+# the "main" module is in build/<target>/source/<module>.ar
+${SIZE_CMD} ./build/${BUILD_TARGET}/source/${MAIN_MODULE_NAME}.ar >${OUTPUT_PATH}${MAIN_MODULE_NAME}${OUTPUT_FILE_POSTFIX}
+
+# these are the direct deps, found as build/<target>/ym/<module>/source/<module>.ar
+for MODULE in "${YOTTA_DEPS[@]}"
+do
+    ${SIZE_CMD} ./build/${BUILD_TARGET}/ym/${MODULE}/source/${MODULE}.ar >${OUTPUT_PATH}${MODULE}${OUTPUT_FILE_POSTFIX}
+done
+
+# dummy libs, which are named with different logic
+for MODULE in "${YOTTA_DUMMY_DEPS[@]}"
+do
+    # on paths the "-" char needs to be converted to "_"
+    MODULE_PATH=${MODULE//-/_}
+    ${SIZE_CMD} ./build/${BUILD_TARGET}/ym/${MODULE}/yotta_dummy_lib_${MODULE_PATH}/${MODULE}.ar >${OUTPUT_PATH}${MODULE}${OUTPUT_FILE_POSTFIX}
+done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/include_dirs.mk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,14 @@
+INCLUDE_DIRS := \
+	../ \
+	. \
+	../../nsdl-c \
+	../../libService/libService \
+	../../libService/exported-libs/mbed-client-libservice \
+	../../libService \
+	../../mbedtls/include \
+        ../lwm2m-client-linux \
+        ../lwm2m-client-linux/source \
+        ../lwm2m-client-mbedtls \
+        source \
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/junit_xsl.xslt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:output encoding="UTF-8" indent="yes" method="html"/>
+<xsl:strip-space elements="*"/>
+
+<xsl:variable name="list"
+  select="document('index.xml')/list" />
+
+<xsl:template match="/">
+    <h1>
+        Unittest report
+    </h1>
+
+    <p>
+        <b>
+    Total tests run <xsl:value-of select="sum(document($list/entry/@name)/testsuite/@tests)"/>
+    , failures: <xsl:value-of select="sum(document($list/entry/@name)/testsuite/@failures) + sum(document($list/entry/@name)/testsuite/@errors)"/>
+        </b>
+
+    <xsl:for-each select="document($list/entry/@name)" >
+        <xsl:apply-templates select="testsuite"/>
+    </xsl:for-each>
+    </p>
+</xsl:template>
+
+<xsl:template match="testsuite">
+    <h2>
+        <xsl:value-of select="@name" />
+    </h2>
+    <table border="1" cellSpacing="0" cellPadding="10" >
+    <tr>
+        <th>Tests run</th>
+        <th>Tests failed</th>
+        <th>Other errors</th>
+    </tr>
+    <tr>
+        <td><xsl:value-of select="@tests"/></td>
+        <td><xsl:value-of select="@failures"/></td>
+        <td><xsl:value-of select="@errors"/></td>
+    </tr>
+    </table>
+    <br/>
+    <table border="1" cellSpacing="0" cellPadding="10" >
+    <tr>
+        <th>Tests name</th>
+        <th>PASS/FAIL</th>
+        <th>Failing case</th>
+        <th>Reason</th>
+    </tr>
+    <xsl:apply-templates select="testcase"/>
+    </table>
+</xsl:template>
+
+<xsl:template match="testcase">
+    <xsl:choose>
+        <xsl:when test="failure">
+            <tr><td><font color="#FF0000"><xsl:value-of select="@name" /></font></td><xsl:apply-templates select="failure"/></tr>
+        </xsl:when>
+        <xsl:when test="error">
+            <tr><td><font color="#FF0000"><xsl:value-of select="@name" /></font></td><xsl:apply-templates select="error"/></tr>
+        </xsl:when>
+        <xsl:otherwise>
+            <tr><td><xsl:value-of select="@name" /></td><td><font color="#00FF00">PASS</font></td><td></td><td></td></tr>
+        </xsl:otherwise>
+    </xsl:choose>
+</xsl:template>
+
+<xsl:template match="failure">
+    <td>
+        <b><font color="#FF0000">FAIL</font></b>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@message" />
+        </font>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@type" />
+        </font>
+    </td>
+</xsl:template>
+
+<xsl:template match="error">
+    <td>
+        <b><font color="#FF0000">FAIL</font></b>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@message" />
+        </font>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@type" />
+        </font>
+    </td>
+</xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic.lib	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-client-classic/#42f18d977122acd4f5ad9ce141b74304b357dec2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/FETCH_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,31 @@
+ab45c556ce14c55261981eb0bf0459c4f7984945	not-for-merge	branch 'IAR-fix' of https://github.com/ARMmbed/mbed-client-classic
+fb36c255e218812180d6910b921cdb8f9f29d045	not-for-merge	branch 'IOTCLT-1077' of https://github.com/ARMmbed/mbed-client-classic
+b222048f1fd1ea8e1d9cd8dac022b1d9eb50e09e	not-for-merge	branch 'IOTCLT-961' of https://github.com/ARMmbed/mbed-client-classic
+7c9cab77d88847facc48f2432da4c115142ae4ee	not-for-merge	branch 'LinuxPort' of https://github.com/ARMmbed/mbed-client-classic
+e519ac01ae4584229639655bad454c9a53f778db	not-for-merge	branch 'assert_change' of https://github.com/ARMmbed/mbed-client-classic
+70e13d9c64b2b81705f879315dd17d9a407090a9	not-for-merge	branch 'bootstrap-integration' of https://github.com/ARMmbed/mbed-client-classic
+26997ff599c1a1fdf65ab11b705956e8c6297a3a	not-for-merge	branch 'compiler_warning_fix' of https://github.com/ARMmbed/mbed-client-classic
+6e0fb21d0d19f302cb315d93c884f9e2de76a06d	not-for-merge	branch 'config-parameter' of https://github.com/ARMmbed/mbed-client-classic
+6b18fbdb7c731d9b09201d39dd55da50214f0b08	not-for-merge	branch 'debug-event-counters' of https://github.com/ARMmbed/mbed-client-classic
+16d4919e2f0bc4ef1ef52233c2d8eaf14aa6ba41	not-for-merge	branch 'define-issue' of https://github.com/ARMmbed/mbed-client-classic
+cf688ce91bee9dd6a924e446ad30eee264e3c7ee	not-for-merge	branch 'error_case_trace_improvements' of https://github.com/ARMmbed/mbed-client-classic
+dafed66933d2766a871248a7c4cf1e670c57235b	not-for-merge	branch 'fix-utests' of https://github.com/ARMmbed/mbed-client-classic
+0a925d14ae18c5f984e42159ad52dc3b33462d48	not-for-merge	branch 'init' of https://github.com/ARMmbed/mbed-client-classic
+07c96080a2842abb53866a069017ccc2edae3dbe	not-for-merge	branch 'keep-alive' of https://github.com/ARMmbed/mbed-client-classic
+57ed5393fd64d95780a17223c5677d1055ae8835	not-for-merge	branch 'master' of https://github.com/ARMmbed/mbed-client-classic
+c5c613dca759f1913178a9501c439c205ec02909	not-for-merge	branch 'mbed-cloud-client-rel1.2' of https://github.com/ARMmbed/mbed-client-classic
+f0b4fb01df4011c4aee0006faf4f2c2de1354381	not-for-merge	branch 'mbed-cloud-client-rel1.2-int' of https://github.com/ARMmbed/mbed-client-classic
+d378109ec5cdd633c8fd5490e6fa9d533d821e05	not-for-merge	branch 'memory_optimizations' of https://github.com/ARMmbed/mbed-client-classic
+e7f378b3e283894f2ebf3fbb3cb381f124286679	not-for-merge	branch 'non-thread' of https://github.com/ARMmbed/mbed-client-classic
+31381dfcd9d62db5932a76a6b61b810ce61a6aa4	not-for-merge	branch 'nsapi_updates' of https://github.com/ARMmbed/mbed-client-classic
+5c3874e012ac1ffaa4c0512d5d023b9571c8e21b	not-for-merge	branch 'pal-port-patch' of https://github.com/ARMmbed/mbed-client-classic
+810f7872099cfc992d9e13b60882a15464bf9ef8	not-for-merge	branch 'pal_socket' of https://github.com/ARMmbed/mbed-client-classic
+a8b97a97b42d59abb02656795b48bebfc3ddb927	not-for-merge	branch 'pal_socket_integration_test' of https://github.com/ARMmbed/mbed-client-classic
+30e71c3d240de439bacaa29c55c1f035159ddc29	not-for-merge	branch 'put-post-fix' of https://github.com/ARMmbed/mbed-client-classic
+a1090e9b19afc9edb516856d26991679f286e4b8	not-for-merge	branch 'release-fix' of https://github.com/ARMmbed/mbed-client-classic
+e81f1a60e94e2b8a7eae5005dffcd1524279ee7e	not-for-merge	branch 'tcp-fix' of https://github.com/ARMmbed/mbed-client-classic
+4c69af1d9ecd22178fe806e9dfb94391638f15a8	not-for-merge	branch 'tcp_socket_connect_fix' of https://github.com/ARMmbed/mbed-client-classic
+0b23a089039d8b97cdb8bab4ee289e752fa4cf8a	not-for-merge	branch 'template' of https://github.com/ARMmbed/mbed-client-classic
+c83e0b7cf10bba25dcd77dd15ce51c436f016c37	not-for-merge	branch 'tls-retry-only-for-udp' of https://github.com/ARMmbed/mbed-client-classic
+6b5141649ffb109e5f0a201b0866b6aff795e6d5	not-for-merge	branch 'trace_improvements' of https://github.com/ARMmbed/mbed-client-classic
+2160016a9320f986fa9734178ec7afdfc921c7bb	not-for-merge	branch 'unit-tests' of https://github.com/ARMmbed/mbed-client-classic
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+42f18d977122acd4f5ad9ce141b74304b357dec2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/ORIG_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+57ed5393fd64d95780a17223c5677d1055ae8835
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/config	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,11 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[remote "origin"]
+	fetch = +refs/heads/*:refs/remotes/origin/*
+	url = https://github.com/ARMmbed/mbed-client-classic/
+[branch "master"]
+	remote = origin
+	merge = refs/heads/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/description	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/hooks/applypatch-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/hooks/commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/hooks/post-update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/hooks/pre-applypatch.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/hooks/pre-commit.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	echo "Error: Attempt to add a non-ascii file name."
+	echo
+	echo "This can cause problems if you want to work"
+	echo "with people on other platforms."
+	echo
+	echo "To be portable it is advisable to rename the file ..."
+	echo
+	echo "If you know what you are doing you can disable this"
+	echo "check using:"
+	echo
+	echo "  git config hooks.allownonascii true"
+	echo
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/hooks/pre-rebase.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/hooks/prepare-commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/hooks/update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
Binary file mbed-client/mbed-client-classic/.git/index has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/info/exclude	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+.hg
+.git
+.svn
+.CVS
+.cvs
+*.orig
+.build
+.export
+.msub
+.meta
+.ctags*
+*.uvproj
+*.uvopt
+*.project
+*.cproject
+*.launch
+*.ewp
+*.eww
+Makefile
+Debug
+*.htm
+*.settings
+mbed_settings.py
+*.py[cod]
+# subrepo ignores
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/logs/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+0000000000000000000000000000000000000000 57ed5393fd64d95780a17223c5677d1055ae8835 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056540 +0000	clone: from https://github.com/ARMmbed/mbed-client-classic/
+57ed5393fd64d95780a17223c5677d1055ae8835 42f18d977122acd4f5ad9ce141b74304b357dec2 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056541 +0000	checkout: moving from master to 42f18d977122acd4f5ad9ce141b74304b357dec2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/logs/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 57ed5393fd64d95780a17223c5677d1055ae8835 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056540 +0000	clone: from https://github.com/ARMmbed/mbed-client-classic/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/logs/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 57ed5393fd64d95780a17223c5677d1055ae8835 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056540 +0000	clone: from https://github.com/ARMmbed/mbed-client-classic/
Binary file mbed-client/mbed-client-classic/.git/objects/pack/pack-825e8023c1881c41506bf63f535dd9a10f0419c1.idx has changed
Binary file mbed-client/mbed-client-classic/.git/objects/pack/pack-825e8023c1881c41506bf63f535dd9a10f0419c1.pack has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/packed-refs	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,68 @@
+# pack-refs with: peeled 
+ab45c556ce14c55261981eb0bf0459c4f7984945 refs/remotes/origin/IAR-fix
+fb36c255e218812180d6910b921cdb8f9f29d045 refs/remotes/origin/IOTCLT-1077
+b222048f1fd1ea8e1d9cd8dac022b1d9eb50e09e refs/remotes/origin/IOTCLT-961
+7c9cab77d88847facc48f2432da4c115142ae4ee refs/remotes/origin/LinuxPort
+e519ac01ae4584229639655bad454c9a53f778db refs/remotes/origin/assert_change
+70e13d9c64b2b81705f879315dd17d9a407090a9 refs/remotes/origin/bootstrap-integration
+26997ff599c1a1fdf65ab11b705956e8c6297a3a refs/remotes/origin/compiler_warning_fix
+6e0fb21d0d19f302cb315d93c884f9e2de76a06d refs/remotes/origin/config-parameter
+6b18fbdb7c731d9b09201d39dd55da50214f0b08 refs/remotes/origin/debug-event-counters
+16d4919e2f0bc4ef1ef52233c2d8eaf14aa6ba41 refs/remotes/origin/define-issue
+cf688ce91bee9dd6a924e446ad30eee264e3c7ee refs/remotes/origin/error_case_trace_improvements
+dafed66933d2766a871248a7c4cf1e670c57235b refs/remotes/origin/fix-utests
+0a925d14ae18c5f984e42159ad52dc3b33462d48 refs/remotes/origin/init
+07c96080a2842abb53866a069017ccc2edae3dbe refs/remotes/origin/keep-alive
+57ed5393fd64d95780a17223c5677d1055ae8835 refs/remotes/origin/master
+c5c613dca759f1913178a9501c439c205ec02909 refs/remotes/origin/mbed-cloud-client-rel1.2
+f0b4fb01df4011c4aee0006faf4f2c2de1354381 refs/remotes/origin/mbed-cloud-client-rel1.2-int
+d378109ec5cdd633c8fd5490e6fa9d533d821e05 refs/remotes/origin/memory_optimizations
+e7f378b3e283894f2ebf3fbb3cb381f124286679 refs/remotes/origin/non-thread
+31381dfcd9d62db5932a76a6b61b810ce61a6aa4 refs/remotes/origin/nsapi_updates
+5c3874e012ac1ffaa4c0512d5d023b9571c8e21b refs/remotes/origin/pal-port-patch
+810f7872099cfc992d9e13b60882a15464bf9ef8 refs/remotes/origin/pal_socket
+a8b97a97b42d59abb02656795b48bebfc3ddb927 refs/remotes/origin/pal_socket_integration_test
+30e71c3d240de439bacaa29c55c1f035159ddc29 refs/remotes/origin/put-post-fix
+a1090e9b19afc9edb516856d26991679f286e4b8 refs/remotes/origin/release-fix
+e81f1a60e94e2b8a7eae5005dffcd1524279ee7e refs/remotes/origin/tcp-fix
+4c69af1d9ecd22178fe806e9dfb94391638f15a8 refs/remotes/origin/tcp_socket_connect_fix
+0b23a089039d8b97cdb8bab4ee289e752fa4cf8a refs/remotes/origin/template
+c83e0b7cf10bba25dcd77dd15ce51c436f016c37 refs/remotes/origin/tls-retry-only-for-udp
+6b5141649ffb109e5f0a201b0866b6aff795e6d5 refs/remotes/origin/trace_improvements
+2160016a9320f986fa9734178ec7afdfc921c7bb refs/remotes/origin/unit-tests
+63fe229f7b63fd52b3894ff9439ee1c7c2f0e1ec refs/tags/RR1.2.0-RC1
+^f0b4fb01df4011c4aee0006faf4f2c2de1354381
+6f7e738f9e9eb652244c92d6699bf6867a60806b refs/tags/RR1.2.0-RC2
+^c5c613dca759f1913178a9501c439c205ec02909
+c89e9e8d1229cd1e5fa9151d8f3e2adc53e52219 refs/tags/RR1.2.0-RC3
+^c5c613dca759f1913178a9501c439c205ec02909
+bafa0ed48d6074fbc563889a23741b6ddb86a3d1 refs/tags/RR1.2.0-RC4
+^c5c613dca759f1913178a9501c439c205ec02909
+18116b16c5448e2f558f2e12c69658c1a4d3c196 refs/tags/mbed-os-5.0-rc1
+^ea45eac305a9f4bc069b6e0d1cceb0bec8aac78e
+b8df6fb864f9de0804616b6057d36075c808f1b5 refs/tags/mbed-os-5.0-rc2
+^6a4dfe61f86121ed249883e58c53e876b0a1a9cd
+e552da1e9244f57bac50b778c8fb9d27445867ed refs/tags/mbed-os-5.1.3-rc1
+^e35a2aeb46bf31bfc53a4379441c0eaab72bd902
+085c5a5dcf8bd92d64205edad9dc7a377e7e4227 refs/tags/mbed-os-5.1.4-rc1
+^586e697365999fc7d976afc8360e26e068f264ae
+c7ee38fe07cf0151cbc2a305b4fabdeea5f48995 refs/tags/mbedCloudClient-R1.1
+^42f18d977122acd4f5ad9ce141b74304b357dec2
+bbfcd12a9033f16593a7a8c0108dbc4c8faebbce refs/tags/mbedCloudClient-R1.1-RC1
+^42f18d977122acd4f5ad9ce141b74304b357dec2
+2ea6cef1d69babbf1110b748fd16beb5fec72860 refs/tags/mbedCloudClient-R1.1-RC2
+^42f18d977122acd4f5ad9ce141b74304b357dec2
+88e16e8dd081991c0020f8e7e9ec1a12861edcf8 refs/tags/mbedCloudClient-R1.1-RC3
+^42f18d977122acd4f5ad9ce141b74304b357dec2
+8e93b22f86ccb24f40013ee0ba37759847095773 refs/tags/mbedCloudClient-r0.8
+^656f13cd48640bce1f57f042eb2d735ddc48b315
+1ab62d8116a09ebbc23e14224a53ad7157446714 refs/tags/mbedCloudClient-r0.8.1
+^656f13cd48640bce1f57f042eb2d735ddc48b315
+13f415aafaaba8d8a73c087a60001cb2bd0def9d refs/tags/mbedCloudClient-r0.8.2
+^656f13cd48640bce1f57f042eb2d735ddc48b315
+aa7d60e199d16664362ee5ae9440bc99c7d152f3 refs/tags/mbedCloudClient-r1.0
+^656f13cd48640bce1f57f042eb2d735ddc48b315
+f7187bddd5c7a24f19dd3062835be38938219ef3 refs/tags/r0.5-rc4
+^fbfb300d622aaa8ccd0fc5a158f4d327ecf78416
+353075192ef6c7dac6838a62b75557acbd2db081 refs/tags/test_tag
+^656f13cd48640bce1f57f042eb2d735ddc48b315
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+57ed5393fd64d95780a17223c5677d1055ae8835
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.git/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+ref: refs/remotes/origin/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/.mbedignore	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+test/*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/LICENSE	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/Makefile.test	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,63 @@
+#
+# Makefile.test for mbed-client-classic unit tests
+#
+
+
+# List of subdirectories to build
+TEST_FOLDER := ./test/
+# List of unit test directories for libraries
+UNITTESTS := $(sort $(dir $(wildcard $(TEST_FOLDER)*/unittest/*)))
+TESTDIRS := $(UNITTESTS:%=build-%)
+CLEANTESTDIRS := $(UNITTESTS:%=clean-%)
+COVERAGEFILE := ./lcov/coverage.info
+
+.PHONY: clone
+clone:
+	@rm -rf ./test_modules
+	@mkdir -p test_modules
+	@git clone --depth 1 git@github.com:ARMmbed/mbed-os.git ./test_modules/mbed-os
+	@git clone --depth 1 git@github.com:ARMmbed/mbed-trace.git ./test_modules/mbed-trace
+	@git clone --depth 1 git@github.com:ARMmbed/sal-stack-nanostack-eventloop.git ./test_modules/sal-stack-nanostack-eventloop
+	@git clone --depth 1 git@github.com:ARMmbed/nanostack-libservice.git ./test_modules/nanostack-libservice
+	@git clone --depth 1 git@github.com:ARMmbed/mbed-client-c.git ./test_modules/mbed-client-c
+	@git clone --depth 1 git@github.com:ARMmbed/mbed-client.git ./test_modules/mbed-client
+	@git clone --depth 1 git@github.com:ARMmbed/mbed-client-pal.git ./test_modules/mbed-client-pal
+
+.PHONY: test
+test: $(TESTDIRS)
+	@rm -rf ./lcov
+	@rm -rf ./coverage
+	@mkdir -p lcov
+	@mkdir -p lcov/results
+	@mkdir coverage
+	@find ./test -name '*.xml' | xargs cp -t ./lcov/results/
+	@rm -f lcov/index.xml
+	@./xsl_script.sh
+	@cp junit_xsl.xslt lcov/.
+	@xsltproc -o lcov/testresults.html lcov/junit_xsl.xslt lcov/index.xml
+	@rm -f lcov/junit_xsl.xslt
+	@rm -f lcov/index.xml
+	@find ./ -name '*.gcno' | xargs cp --backup=numbered -t ./coverage/
+	@find ./ -name '*.gcda' | xargs cp --backup=numbered -t ./coverage/
+	@gcovr --object-directory ./coverage  --exclude-unreachable-branches -e '.*/builds/.*' -e '.*/test/.*' -e '.*/test_modules/.*' -e '.*/stubs/.*' -e '.*/mbed-client-classic/.*' -e '.*/usr/.*' -x -o ./lcov/gcovr.xml
+	@lcov -d test/. -c -o $(COVERAGEFILE)
+	@lcov -q -r $(COVERAGEFILE) "/usr*" -o $(COVERAGEFILE)
+	@lcov -q -r $(COVERAGEFILE) "/test*" -o $(COVERAGEFILE)
+	@lcov -q -r $(COVERAGEFILE) "/mbed-client-libservice*" -o $(COVERAGEFILE)
+	@genhtml -q $(COVERAGEFILE) --show-details --output-directory lcov/html
+	@echo mbed-client-classic module unit tests built
+
+$(TESTDIRS):
+	@make -C $(@:build-%=%)
+
+$(CLEANDIRS):
+	@make -C $(@:clean-%=%) clean
+
+$(CLEANTESTDIRS):
+	@make -C $(@:clean-%=%) clean
+
+# Extend default clean rule
+clean: clean-extra
+
+clean-extra: $(CLEANDIRS) \
+$(CLEANTESTDIRS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/README.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,10 @@
+ARM mbed Client Classic
+=======================
+
+This repository contains ARM mbed Client Classic. You should not use this repo directly. This repo is the mbed
+Client team's working area and we publish the official, tested versions as part of [mbed Client](https://github.com/ARMmbed/mbed-client).
+
+If you want to see an example application - a better starting point would be the [mbed OS example client](https://github.com/ARMmbed/mbed-os-example-client).
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/junit_xsl.xslt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:output encoding="UTF-8" indent="yes" method="html"/>
+<xsl:strip-space elements="*"/>
+
+<xsl:variable name="list"
+  select="document('index.xml')/list" />
+
+<xsl:template match="/">
+    <h1>
+        Unittest report
+    </h1>
+
+    <p>
+        <b>
+    Total tests run <xsl:value-of select="sum(document($list/entry/@name)/testsuite/@tests)"/>
+    , failures: <xsl:value-of select="sum(document($list/entry/@name)/testsuite/@failures) + sum(document($list/entry/@name)/testsuite/@errors)"/>
+        </b>
+
+    <xsl:for-each select="document($list/entry/@name)" >
+        <xsl:apply-templates select="testsuite"/>
+    </xsl:for-each>
+    </p>
+</xsl:template>
+
+<xsl:template match="testsuite">
+    <h2>
+        <xsl:value-of select="@name" />
+    </h2>
+    <table border="1" cellSpacing="0" cellPadding="10" >
+    <tr>
+        <th>Tests run</th>
+        <th>Tests failed</th>
+        <th>Other errors</th>
+    </tr>
+    <tr>
+        <td><xsl:value-of select="@tests"/></td>
+        <td><xsl:value-of select="@failures"/></td>
+        <td><xsl:value-of select="@errors"/></td>
+    </tr>
+    </table>
+    <br/>
+    <table border="1" cellSpacing="0" cellPadding="10" >
+    <tr>
+        <th>Tests name</th>
+        <th>PASS/FAIL</th>
+        <th>Failing case</th>
+        <th>Reason</th>
+    </tr>
+    <xsl:apply-templates select="testcase"/>
+    </table>
+</xsl:template>
+
+<xsl:template match="testcase">
+    <xsl:choose>
+        <xsl:when test="failure">
+            <tr><td><font color="#FF0000"><xsl:value-of select="@name" /></font></td><xsl:apply-templates select="failure"/></tr>
+        </xsl:when>
+        <xsl:when test="error">
+            <tr><td><font color="#FF0000"><xsl:value-of select="@name" /></font></td><xsl:apply-templates select="error"/></tr>
+        </xsl:when>
+        <xsl:otherwise>
+            <tr><td><xsl:value-of select="@name" /></td><td><font color="#00FF00">PASS</font></td><td></td><td></td></tr>
+        </xsl:otherwise>
+    </xsl:choose>
+</xsl:template>
+
+<xsl:template match="failure">
+    <td>
+        <b><font color="#FF0000">FAIL</font></b>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@message" />
+        </font>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@type" />
+        </font>
+    </td>
+</xsl:template>
+
+<xsl:template match="error">
+    <td>
+        <b><font color="#FF0000">FAIL</font></b>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@message" />
+        </font>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@type" />
+        </font>
+    </td>
+</xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/mbed-client-classic/m2mconnectionhandlerpimpl.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,255 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_CONNECTION_HANDLER_PIMPL_H__
+#define M2M_CONNECTION_HANDLER_PIMPL_H__
+
+#include "ns_types.h"
+#include "mbed-client/m2mconfig.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2minterface.h"
+#include "mbed-client/m2mconnectionobserver.h"
+#include "mbed-client/m2mconnectionsecurity.h"
+#include "nsdl-c/sn_nsdl.h"
+
+#include "pal_network.h"
+
+
+class M2MConnectionSecurity;
+class M2MConnectionHandler;
+class M2MSecurity;
+
+/**
+ * @brief M2MConnectionHandlerPimpl.
+ * This class handles the socket connection for LWM2M Client
+ */
+
+
+class M2MConnectionHandlerPimpl {
+public:
+
+    enum SocketEvent {
+        ESocketIdle         = 0x00,
+        ESocketReadytoRead  = 0x02,
+        ESocketDnsHandler   = 0x04,
+        ESocketSend         = 0x08
+    };
+
+    struct TaskIdentifier {
+        M2MConnectionHandlerPimpl *pimpl;
+        void                      *data_ptr;
+    };
+
+    /**
+    * @brief Constructor
+    */
+    M2MConnectionHandlerPimpl(M2MConnectionHandler* base, M2MConnectionObserver &observer,
+                              M2MConnectionSecurity* sec,
+                              M2MInterface::BindingMode mode,
+                              M2MInterface::NetworkStack stack);
+
+    /**
+    * @brief Destructor
+    */
+    ~M2MConnectionHandlerPimpl();
+    
+    void start_timer(void);
+
+    /**
+    * @brief This binds the socket connection.
+    * @param listen_port Port to listen for incoming connection.
+    * @return true if successful else false.
+    */
+    bool bind_connection(const uint16_t listen_port);
+
+    /**
+    * @brief This resolves the server address. Output is
+    * returned through callback
+    * @param String server address.
+    * @param uint16_t Server port.
+    * @param ServerType, Server Type to be resolved.
+    * @return true if address is valid else false.
+    */
+    bool resolve_server_address(const String& server_address,
+                                const uint16_t server_port,
+                                M2MConnectionObserver::ServerType server_type,
+                                const M2MSecurity* security);
+
+    /**
+    * @brief Sends data, to the connected sent to server.
+    * @param data, Data to be sent.
+    */
+    bool send_data(uint8_t *data_ptr,
+                   uint16_t data_len,
+                   sn_nsdl_addr_s *address_ptr);
+
+    /**
+    * @brief Listens for incoming data from remote server
+    * @return true if successful else false.
+    */
+    bool start_listening_for_data();
+
+    /**
+    * @brief Stops listening for incoming data
+    */
+    void stop_listening();
+
+    /**
+     * @brief send_to_socket Sends directly to socket. This is used by
+     * security classes to send after data has been encrypted.
+     * @param buf Buffer to send
+     * @param len Length of a buffer
+     * @return Number of bytes sent or -1 if failed
+     */
+    int send_to_socket(const unsigned char *buf, size_t len);
+
+    /**
+     * \brief Receives directly from the socket. This
+     * is used by the security classes to receive raw data to be decrypted.
+     * \param buf Buffer to send.
+     * \param len The length of the buffer.
+     * \param timeout Timeout defined from DTLS to wait for blocking receive calls
+     * before timing out, by default value is 0.
+     * \return Number of bytes read or negative number if failed.
+     */
+    int receive_from_socket(unsigned char *buf, size_t len);
+
+    /**
+    * @brief Error handling for DTLS connectivity.
+    * @param error, Error code from TLS library
+    */
+    void handle_connection_error(int error);
+
+    /**
+     * \brief Sets the network interface handler that is used by client to connect
+     * to a network over IP..
+     * \param handler A network interface handler that is used by client to connect.
+     *  This API is optional but provides a mechanism for different platforms to
+     * manage usage of underlying network interface by client.
+     */
+    void set_platform_network_handler(void *handler = NULL);
+
+    /**
+    * \brief Claims mutex to prevent thread clashes
+    * in multithreaded environment.
+    */
+    void claim_mutex();
+
+    /**
+    * \brief Releases mutex to prevent thread clashes
+    * in multithreaded environment.
+    */
+    void release_mutex();
+
+    /**
+    * @brief Callback handler for sending data over socket.
+    */
+    void send_handler();
+
+    /**
+    * @brief Callback handler for receiving data over socket.
+    */
+    void receive_handler();
+
+    /**
+    * @brief Callback handler for receiving data for secured connection.
+    */
+    void receive_handshake_handler();
+
+    /**
+    * @brief Returns true if DTLS handshake is still ongoing.
+    */
+    bool is_handshake_ongoing();
+
+    /**
+    * @brief Returns connection handler tasklet ID.
+    */
+    int8_t connection_tasklet_handler();
+
+    /**
+    * @brief Handles DNS resolving through event loop.
+    */
+    void dns_handler();
+
+    /**
+    * @brief Sends data to socket through event loop.
+    */
+    void send_socket_data(uint8_t *data, uint16_t data_len);
+    
+    void send_receive_event(void);
+
+
+private:
+
+    /**
+    * @brief Callback handler for socket events.
+    */
+    void socket_event();
+
+    /**
+    * @brief Initialize mbed OS socket
+    */
+    bool init_socket();
+
+    /**
+    * @brief Check socket type
+    * @return True if TCP connection otherwise false
+    */
+    bool is_tcp_connection();
+
+    /**
+    * @brief Close and delete socket
+    */
+    void close_socket();
+
+    /**
+    * @brief Enables keepalive for TCP connections.
+    */
+    void enable_keepalive();
+
+private:
+    M2MConnectionHandler                        *_base;
+    M2MConnectionObserver                       &_observer;
+    M2MConnectionSecurity                       *_security_impl; //owned
+    const M2MSecurity                           *_security; //non-owned
+    bool                                        _use_secure_connection;
+    M2MInterface::BindingMode                   _binding_mode;
+    M2MInterface::NetworkStack                  _network_stack;
+    M2MConnectionObserver::SocketAddress        _address;
+
+    // _address._address will point to one of these two
+    palIpV4Addr_t                               _ipV4Addr; 
+    palIpV6Addr_t                               _ipV6Addr;
+
+    palSocket_t                                 _socket;
+    bool                                        _is_handshaking;
+    bool                                        _listening;
+    M2MConnectionObserver::ServerType           _server_type;
+    uint16_t                                    _server_port;
+    uint16_t                                    _listen_port;
+    bool                                        _running;
+    unsigned char                               _recv_buffer[BUFFER_LENGTH];
+    uint32_t                                    _net_iface;
+    palSocketAddress_t                          _socket_address;
+    static int8_t                               _tasklet_id;
+    String                                      _server_address;
+
+friend class Test_M2MConnectionHandlerPimpl;
+friend class Test_M2MConnectionHandlerPimpl_mbed;
+friend class Test_M2MConnectionHandlerPimpl_classic;
+friend class M2MConnection_TestObserver;
+};
+
+#endif //M2M_CONNECTION_HANDLER_PIMPL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/mbed-client-classic/m2mtimerpimpl.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef M2M_TIMER_PIMPL_H__
+#define M2M_TIMER_PIMPL_H__
+
+#include "ns_types.h"
+#include "mbed-client/m2mtimerobserver.h"
+
+class M2MTimerPimpl {
+private:
+
+    // Prevents the use of assignment operator
+    M2MTimerPimpl& operator=(const M2MTimerPimpl& other);
+
+    // Prevents the use of copy constructor
+    M2MTimerPimpl(const M2MTimerPimpl& other);
+public:
+
+    /**
+     * Constructor.
+     */
+    M2MTimerPimpl(M2MTimerObserver& _observer);
+
+    /**
+     * Destructor.
+     */
+    virtual ~M2MTimerPimpl();
+
+    /**
+     * Starts timer
+     * @param interval Timer's interval in milliseconds
+     * @param single_shot defines if timer is ticked
+     * once or is it restarted everytime timer is expired.
+     */
+    void start_timer(uint64_t interval, M2MTimerObserver::Type type, bool single_shot = true);
+
+    /**
+     * @brief Starts timer in DTLS manner
+     * @param intermediate_interval Intermediate interval to use, must be smaller than tiotal (usually 1/4 of total)
+     * @param total_interval Total interval to use; This is the timeout value of a DTLS packet
+     * @param type Type of the timer
+     */
+    void start_dtls_timer(uint64_t intermediate_interval, uint64_t total_interval, M2MTimerObserver::Type type);
+
+    /**
+     * Stops timer.
+     * This cancels the ongoing timer.
+     */
+    void stop_timer();
+
+    /**
+     * Callback function for timer completion.
+     */
+    void timer_expired();
+
+    /**
+     * @brief Checks if the intermediate interval has passed
+     * @return true if interval has passed, false otherwise
+     */
+    bool is_intermediate_interval_passed();
+
+    /**
+     * @brief Checks if the total interval has passed
+     * @return true if interval has passed, false otherwise
+     */
+    bool is_total_interval_passed();
+
+    /**
+     * @brief Start long period timer
+     */
+    void start_still_left_timer();
+
+    /**
+     * @brief Get timer id
+     * @return Timer id
+     */
+    inline int8_t get_timer_id() const;
+
+    /**
+     * @brief Get still left time
+     * @return Time left in milliseconds
+     */
+    uint64_t get_still_left_time() const;
+
+private:
+
+    void start();
+    void cancel();
+
+private:
+    M2MTimerObserver&   _observer;
+    bool                _single_shot;
+    uint64_t            _interval;
+    M2MTimerObserver::Type  _type;
+
+    uint64_t            _intermediate_interval;
+    uint64_t            _total_interval;
+    uint64_t            _still_left;
+    uint8_t             _status;
+    bool                _dtls_type;
+
+    // this is the timer-id of this object, used to map the
+    // timer event callback to the correct object.
+    int8_t              _timer_id;
+
+    static int8_t       _tasklet_id;
+    static int8_t       _next_timer_id;
+
+    friend class M2MTimer;
+    friend class Test_M2MTimerPimpl_classic;
+};
+
+inline int8_t M2MTimerPimpl::get_timer_id() const
+{
+    return _timer_id;
+}
+
+#endif //M2M_TIMER_PIMPL_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/run_unit_tests_with_valgrind.sh	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,14 @@
+#!/bin/bash
+# Execute script with root path where to find binaries. 
+# For example ./run_unit_tests_with_valgrind.sh ./build/x86-linux-native-coverage/test/mbedclient/
+
+input="binaries.txt"
+valgrind_logs="valgrind_logs"
+rm -rf $valgrind_logs
+mkdir $valgrind_logs
+find $1 -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print > $input
+while file= read -r binary
+do
+    valgrind --track-origins=yes --xml=yes --xml-file="${valgrind_logs}/valgrind_$(basename $binary).xml" "$binary"
+
+done < "$input"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/source/m2mconnectionhandler.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client-classic/m2mconnectionhandlerpimpl.h"
+#include "mbed-client/m2mconnectionobserver.h"
+#include "mbed-client/m2mconnectionhandler.h"
+#include "mbed-client/m2mconstants.h"
+
+M2MConnectionHandler::M2MConnectionHandler(M2MConnectionObserver &observer,
+                                           M2MConnectionSecurity* sec,
+                                           M2MInterface::BindingMode mode,
+                                           M2MInterface::NetworkStack stack)
+:_observer(observer)
+{
+    _private_impl = new M2MConnectionHandlerPimpl(this, observer, sec, mode, stack);
+}
+
+M2MConnectionHandler::~M2MConnectionHandler()
+{
+    delete _private_impl;
+}
+
+bool M2MConnectionHandler::bind_connection(const uint16_t listen_port)
+{
+
+    return _private_impl->bind_connection(listen_port);
+}
+
+bool M2MConnectionHandler::resolve_server_address(const String& server_address,
+                                                      const uint16_t server_port,
+                                                      M2MConnectionObserver::ServerType server_type,
+                                                      const M2MSecurity* security)
+{
+    return _private_impl->resolve_server_address(server_address, server_port,
+                                                 server_type, security);
+}
+
+bool M2MConnectionHandler::start_listening_for_data()
+{
+    return _private_impl->start_listening_for_data();
+}
+
+void M2MConnectionHandler::stop_listening()
+{
+    _private_impl->stop_listening();
+}
+
+int M2MConnectionHandler::send_to_socket(const unsigned char *buf, size_t len)
+{
+    return _private_impl->send_to_socket(buf, len);
+}
+
+int M2MConnectionHandler::receive_from_socket(unsigned char *buf, size_t len)
+{
+    return _private_impl->receive_from_socket(buf, len);
+}
+
+bool M2MConnectionHandler::send_data(uint8_t *data,
+                                     uint16_t data_len,
+                                     sn_nsdl_addr_s *address)
+{
+    return _private_impl->send_data(data, data_len, address);
+}
+
+void M2MConnectionHandler::handle_connection_error(int error)
+{
+    _private_impl->handle_connection_error(error);
+}
+
+void M2MConnectionHandler::set_platform_network_handler(void *handler)
+{
+    _private_impl->set_platform_network_handler(handler);
+}
+
+void M2MConnectionHandler::claim_mutex()
+{
+    _private_impl->claim_mutex();
+}
+
+void M2MConnectionHandler::release_mutex()
+{
+    _private_impl->release_mutex();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/source/m2mconnectionhandlerpimpl.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,640 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client-classic/m2mconnectionhandlerpimpl.h"
+#include "mbed-client/m2mconnectionobserver.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2msecurity.h"
+#include "mbed-client/m2mconnectionhandler.h"
+
+#include "pal.h"
+#include "pal_rtos.h"
+#include "pal_errors.h"
+#include "pal_macros.h"
+#include "pal_network.h"
+
+#include "eventOS_scheduler.h"
+#include "eventOS_event.h"
+
+#include "mbed-trace/mbed_trace.h"
+#include "mbed.h"
+
+#define TRACE_GROUP "mClt"
+
+int8_t M2MConnectionHandlerPimpl::_tasklet_id = -1;
+
+static M2MConnectionHandlerPimpl *connection_handler = NULL;
+
+extern "C" void connection_event_handler(arm_event_s *event)
+{
+    if(!connection_handler){
+        return;
+    }
+
+    switch(event->event_type){
+        case M2MConnectionHandlerPimpl::ESocketReadytoRead:
+            connection_handler->receive_handler();
+            break;
+
+        case M2MConnectionHandlerPimpl::ESocketSend:
+            connection_handler->send_socket_data((uint8_t*)event->data_ptr, event->event_data);
+            free(event->data_ptr);
+            break;
+
+        case M2MConnectionHandlerPimpl::ESocketDnsHandler:
+            connection_handler->dns_handler();
+            break;
+
+        default:
+            break;
+    }
+}
+
+void M2MConnectionHandlerPimpl::send_receive_event(void)
+{
+    arm_event_s event;
+    event.receiver = M2MConnectionHandlerPimpl::_tasklet_id;
+    event.sender = 0;
+    event.event_type = ESocketReadytoRead;
+    event.data_ptr = NULL;
+    event.priority = ARM_LIB_HIGH_PRIORITY_EVENT;
+    eventOS_event_send(&event);
+}
+
+extern "C" void socket_event_handler(void)
+{
+    if(!connection_handler) {
+        return;
+    }
+    connection_handler->send_receive_event();
+}
+
+M2MConnectionHandlerPimpl::M2MConnectionHandlerPimpl(M2MConnectionHandler* base, M2MConnectionObserver &observer,
+                                                     M2MConnectionSecurity* sec,
+                                                     M2MInterface::BindingMode mode,
+                                                     M2MInterface::NetworkStack stack)
+:_base(base),
+ _observer(observer),
+ _security_impl(sec),
+ _security(NULL),
+ _use_secure_connection(false),
+ _binding_mode(mode),
+ _network_stack(stack),
+ _socket(0),
+ _is_handshaking(false),
+ _listening(true),
+ _server_type(M2MConnectionObserver::LWM2MServer),
+ _server_port(0),
+ _listen_port(0),
+ _running(false),
+ _net_iface(0)
+{
+#ifndef PAL_NET_TCP_AND_TLS_SUPPORT
+    if (is_tcp_connection()) {
+        tr_error("ConnectionHandler: TCP support not available.");
+        return;
+    }
+#endif
+
+    if(PAL_SUCCESS != pal_init()){
+        tr_error("PAL init failed.");
+    }
+
+    memset(&_address, 0, sizeof _address);
+    memset(&_socket_address, 0, sizeof _socket_address);
+    connection_handler = this;
+    eventOS_scheduler_mutex_wait();
+    if (M2MConnectionHandlerPimpl::_tasklet_id == -1) {
+        M2MConnectionHandlerPimpl::_tasklet_id = eventOS_event_handler_create(&connection_event_handler, ESocketIdle);
+    }
+    eventOS_scheduler_mutex_release();
+}
+
+M2MConnectionHandlerPimpl::~M2MConnectionHandlerPimpl()
+{
+    tr_debug("~M2MConnectionHandlerPimpl()");
+    stop_listening();
+
+    close_socket();
+
+    delete _security_impl;
+    tr_debug("~M2MConnectionHandlerPimpl() - OUT");
+}
+
+bool M2MConnectionHandlerPimpl::bind_connection(const uint16_t listen_port)
+{
+    _listen_port = listen_port;
+    return true;
+}
+
+bool M2MConnectionHandlerPimpl::resolve_server_address(const String& server_address,
+                                                       const uint16_t server_port,
+                                                       M2MConnectionObserver::ServerType server_type,
+                                                       const M2MSecurity* security)
+{
+    arm_event_s event;
+
+    tr_debug("resolve_server_address()");
+
+    _security = security;
+    _server_port = server_port;
+    _server_type = server_type;
+    _server_address = server_address;
+
+    event.receiver = M2MConnectionHandlerPimpl::_tasklet_id;
+    event.sender = 0;
+    event.event_type = ESocketDnsHandler;
+    event.data_ptr = NULL;
+    event.priority = ARM_LIB_HIGH_PRIORITY_EVENT;
+
+    return !eventOS_event_send(&event);
+}
+
+void M2MConnectionHandlerPimpl::dns_handler()
+{
+    palStatus_t status;
+    uint32_t interface_count;
+    status = pal_getNumberOfNetInterfaces(&interface_count);
+    if(PAL_SUCCESS != status ) {
+        _observer.socket_error(M2MConnectionHandler::SOCKET_ABORT);
+        return;
+    }
+    if(interface_count <= 0) {
+        _observer.socket_error(M2MConnectionHandler::SOCKET_ABORT);
+        return;
+    }
+
+    palSocketLength_t _socket_address_len;
+
+    if(PAL_SUCCESS != pal_getAddressInfo(_server_address.c_str(), &_socket_address, &_socket_address_len)){
+        _observer.socket_error(M2MConnectionHandler::SOCKET_ABORT);
+        return;
+    }
+    pal_setSockAddrPort(&_socket_address, _server_port);
+
+    if(_network_stack == M2MInterface::LwIP_IPv4 ||
+       _network_stack == M2MInterface::ATWINC_IPv4){
+        if(PAL_SUCCESS != pal_getSockAddrIPV4Addr(&_socket_address,_ipV4Addr)){
+            _observer.socket_error(M2MConnectionHandler::SOCKET_ABORT);
+            return;
+        }
+
+        tr_debug("IP Address %s",tr_array(_ipV4Addr, 4));
+
+        _address._address = (void*)_ipV4Addr;
+        _address._length = PAL_IPV4_ADDRESS_SIZE;
+        _address._port = _server_port;
+        _address._stack = _network_stack;
+    }
+    else if(_network_stack == M2MInterface::LwIP_IPv6 ||
+            _network_stack == M2MInterface::Nanostack_IPv6){
+        if(PAL_SUCCESS != pal_getSockAddrIPV6Addr(&_socket_address,_ipV6Addr)){
+            _observer.socket_error(M2MConnectionHandler::SOCKET_ABORT);
+            return;
+        }
+
+        tr_debug("IP Address %s",tr_array(_ipV6Addr,sizeof(_ipV6Addr)));
+
+        _address._address = (void*)_ipV6Addr;
+        _address._length = PAL_IPV6_ADDRESS_SIZE;
+        _address._port = _server_port;
+        _address._stack = _network_stack;
+    }
+    else {
+        tr_error("socket config error, %d", (int)_network_stack);
+        _observer.socket_error(M2MConnectionHandler::SOCKET_ABORT);
+        return;
+    }
+
+    close_socket();
+    if(!init_socket()) {
+        _observer.socket_error(M2MConnectionHandler::SOCKET_ABORT);
+        return;
+    }
+
+    if(is_tcp_connection()) {
+#ifdef PAL_NET_TCP_AND_TLS_SUPPORT
+       tr_debug("resolve_server_address - Using TCP");
+        if (pal_connect(_socket, &_socket_address, sizeof(_socket_address)) != PAL_SUCCESS) {
+            _observer.socket_error(M2MConnectionHandler::SOCKET_ABORT);
+            return;
+        }
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+    }
+
+    _running = true;
+
+    if (_security) {
+        if (_security->resource_value_int(M2MSecurity::SecurityMode) == M2MSecurity::Certificate ||
+            _security->resource_value_int(M2MSecurity::SecurityMode) == M2MSecurity::Psk) {
+            if( _security_impl != NULL ){
+                _security_impl->reset();
+                if (_security_impl->init(_security) == 0) {
+                    _is_handshaking = true;
+                    tr_debug("resolve_server_address - connect DTLS");
+                    if(_security_impl->start_connecting_non_blocking(_base) < 0 ){
+                        tr_debug("dns_handler - handshake failed");
+                        _is_handshaking = false;
+                        _observer.socket_error(M2MConnectionHandler::SSL_CONNECTION_ERROR);
+                        close_socket();
+                        return;
+                    }
+                } else {
+                    tr_error("resolve_server_address - init failed");
+                    _observer.socket_error(M2MConnectionHandler::SSL_CONNECTION_ERROR, false);
+                    close_socket();
+                    return;
+                }
+            } else {
+                tr_error("dns_handler - sec is null");
+                _observer.socket_error(M2MConnectionHandler::SSL_CONNECTION_ERROR, false);
+                close_socket();
+                return;
+            }
+        }
+    }
+    if(!_is_handshaking) {
+        enable_keepalive();
+        _observer.address_ready(_address,
+                                _server_type,
+                                _address._port);
+    }
+}
+
+bool M2MConnectionHandlerPimpl::send_data(uint8_t *data,
+                                          uint16_t data_len,
+                                          sn_nsdl_addr_s *address)
+{
+    arm_event_s event;
+
+    tr_debug("send_data()");
+    if (address == NULL || data == NULL || !data_len || !_running) {
+        return false;
+    }
+
+    event.data_ptr = (uint8_t*)malloc(data_len);
+    if(!event.data_ptr) {
+        return false;
+    }
+    memcpy(event.data_ptr, data, data_len);
+
+    event.receiver = M2MConnectionHandlerPimpl::_tasklet_id;
+    event.sender = 0;
+    event.event_type = ESocketSend;
+    event.event_data = data_len;
+    event.priority = ARM_LIB_HIGH_PRIORITY_EVENT;
+
+    if (eventOS_event_send(&event) != 0) {
+        // Event push failed, free the buffer
+        free(event.data_ptr);
+        return false;
+    }
+
+    return true;
+}
+
+void M2MConnectionHandlerPimpl::send_socket_data(uint8_t *data, uint16_t data_len)
+{
+    size_t sent_len;
+    bool success = false;
+    palStatus_t ret = PAL_ERR_GENERIC_FAILURE;
+
+    if(!data || ! data_len || !_running) {
+        return;
+    }
+
+    tr_debug("send_handler()");
+
+    if( _use_secure_connection ){
+        if( _security_impl->send_message(data, data_len) > 0){
+            success = true;
+        }
+    } else {
+        if(is_tcp_connection()){
+#ifdef PAL_NET_TCP_AND_TLS_SUPPORT
+            //We need to "shim" the length in front
+            uint8_t* d = (uint8_t*)malloc(data_len+4);
+            if(d){
+                d[0] = 0;
+                d[1] = 0;
+                d[2] = (data_len >> 8 )& 0xff;
+                d[3] = data_len & 0xff;
+                memcpy(d + 4, data, data_len);
+                ret = pal_send(_socket, d, data_len+4, &sent_len);
+                free(d);
+            }
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+        } else {
+            ret = pal_sendTo(_socket, data, data_len, &_socket_address, sizeof(_socket_address), &sent_len);
+        }
+        if (ret == PAL_SUCCESS) {
+            success = true;
+        }
+    }
+
+    if (!success) {
+        _observer.socket_error(M2MConnectionHandler::SOCKET_SEND_ERROR, true);
+        close_socket();
+    }
+    else{
+        _observer.data_sent();
+    }
+}
+
+bool M2MConnectionHandlerPimpl::start_listening_for_data()
+{
+    tr_debug("start_listening_for_data()");
+    _listening = true;
+    return true;
+}
+
+void M2MConnectionHandlerPimpl::stop_listening()
+{
+    tr_debug("stop_listening()");
+    _listening = false;
+
+    if(_security_impl) {
+        _security_impl->reset();
+    }
+}
+
+int M2MConnectionHandlerPimpl::send_to_socket(const unsigned char *buf, size_t len)
+{
+    size_t sent_len = 0;
+    palStatus_t status = PAL_ERR_GENERIC_FAILURE;
+
+    if(!_running) {
+        return (-1);
+    }
+
+    tr_debug("send_to_socket len - %d", len);
+
+    if(is_tcp_connection()) {
+#ifdef PAL_NET_TCP_AND_TLS_SUPPORT
+        status = pal_send(_socket, buf, len, &sent_len);
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+    } else {
+        status = pal_sendTo(_socket, buf, len, &_socket_address, sizeof(_socket_address), &sent_len);
+    }
+
+    if(status == PAL_SUCCESS){
+        return sent_len;
+    }
+
+    return (-1);
+}
+
+int M2MConnectionHandlerPimpl::receive_from_socket(unsigned char *buf, size_t len)
+{
+    size_t recv_len;
+    palStatus_t status = PAL_ERR_GENERIC_FAILURE;
+    tr_debug("receive_from_socket");
+
+    if(!_running) {
+        return (-1);
+    }
+
+    if(is_tcp_connection()) {
+#ifdef PAL_NET_TCP_AND_TLS_SUPPORT
+        status = pal_recv(_socket, buf, len, &recv_len);
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+    } else {
+        status = pal_receiveFrom(_socket, buf, len, NULL, NULL, &recv_len);
+    }
+
+    if(status == PAL_SUCCESS){
+        return recv_len;
+    }
+    else if(status == PAL_ERR_SOCKET_WOULD_BLOCK || status == (-65536)){
+        return M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ;
+    }
+    else {
+        tr_info("PAL Socket returned: %d", status);
+    }
+
+    return (-1);
+}
+
+void M2MConnectionHandlerPimpl::handle_connection_error(int error)
+{
+    tr_debug("handle_connection_error");
+    _observer.socket_error(error);
+}
+
+void M2MConnectionHandlerPimpl::set_platform_network_handler(void *handler)
+{
+    tr_debug("set_platform_network_handler");
+    if(PAL_SUCCESS != pal_registerNetworkInterface(handler, &_net_iface)) {
+        tr_error("Interface registration failed.");
+    }
+}
+
+void M2MConnectionHandlerPimpl::receive_handshake_handler()
+{
+    tr_debug("receive_handshake_handler()");
+    if( _is_handshaking ){
+        int ret = _security_impl->continue_connecting();
+        tr_debug("ret %d", ret);
+        if( ret == M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ ){ //We wait for next readable event
+            tr_debug("We wait for next readable event");
+            return;
+        } else if( ret == 0 ){
+            _is_handshaking = false;
+            _use_secure_connection = true;
+            enable_keepalive();
+            _observer.address_ready(_address,
+                                    _server_type,
+                                    _server_port);
+        } else if( ret < 0 ){
+            _is_handshaking = false;
+            _observer.socket_error(M2MConnectionHandler::SSL_CONNECTION_ERROR, true);
+            close_socket();
+        }
+    }
+}
+
+bool M2MConnectionHandlerPimpl::is_handshake_ongoing()
+{
+    return _is_handshaking;
+}
+
+void M2MConnectionHandlerPimpl::receive_handler()
+{
+    tr_debug("receive_handler()");
+    if(_is_handshaking){
+        receive_handshake_handler();
+        return;
+    }
+
+    if(!_listening || !_running) {
+        return;
+    }
+
+    if( _use_secure_connection ){
+        int rcv_size;
+        do{
+            rcv_size = _security_impl->read(_recv_buffer, sizeof(_recv_buffer));
+            if(rcv_size > 0){
+                _observer.data_available((uint8_t*)_recv_buffer,
+                                         rcv_size, _address);
+            } else if (M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ != rcv_size && rcv_size < 0) {
+                _observer.socket_error(M2MConnectionHandler::SOCKET_READ_ERROR, true);
+                close_socket();
+                return;
+            }
+        } while(M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ != rcv_size);
+    } else{
+        size_t recv;
+        palStatus_t status;
+        do{
+            if(is_tcp_connection()){
+#ifdef PAL_NET_TCP_AND_TLS_SUPPORT
+                status = pal_recv(_socket, _recv_buffer, sizeof(_recv_buffer), &recv);
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+            } else{
+                status = pal_receiveFrom(_socket, _recv_buffer, sizeof(_recv_buffer), NULL, NULL, &recv);
+            }
+
+            if(status == PAL_ERR_SOCKET_WOULD_BLOCK){
+                return;
+            }
+            else if (status != PAL_SUCCESS) {
+                _observer.socket_error(M2MConnectionHandler::SOCKET_READ_ERROR, true);
+                close_socket();
+                return;
+            }
+
+            tr_debug("data received, len: %zu", recv);
+
+            if(!is_tcp_connection()){ // Observer for UDP plain mode
+                _observer.data_available((uint8_t*)_recv_buffer, recv, _address);
+            } else {
+#ifdef PAL_NET_TCP_AND_TLS_SUPPORT
+                if( recv < 4 ){
+                    _observer.socket_error(M2MConnectionHandler::SOCKET_READ_ERROR, true);
+                    close_socket();
+                    return;
+                }
+
+                //We need to "shim" out the length from the front
+                uint32_t len = (_recv_buffer[0] << 24 & 0xFF000000) + (_recv_buffer[1] << 16 & 0xFF0000);
+                len += (_recv_buffer[2] << 8 & 0xFF00) + (_recv_buffer[3] & 0xFF);
+                if(len > 0 && len <= recv - 4) {
+                    // Observer for TCP plain mode
+                    _observer.data_available(_recv_buffer + 4, len, _address);
+                }
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+            }
+        } while(status != PAL_ERR_SOCKET_WOULD_BLOCK);
+    }
+}
+
+void M2MConnectionHandlerPimpl::claim_mutex()
+{
+    eventOS_scheduler_mutex_wait();
+}
+
+void M2MConnectionHandlerPimpl::release_mutex()
+{
+    eventOS_scheduler_mutex_release();
+}
+
+static palNetInterfaceInfo_t interface_info;
+static palIpV4Addr_t interface_address4 = {0,0,0,0};
+static palIpV6Addr_t interface_address6 = {0};
+
+bool M2MConnectionHandlerPimpl::init_socket()
+{
+    tr_debug("init_socket - IN");
+    _is_handshaking = false;
+    _running = true;
+    palSocketType_t socket_type = PAL_SOCK_DGRAM;
+    palStatus_t status;
+    palSocketDomain_t domain;
+    palSocketAddress_t bind_address;
+
+    if(is_tcp_connection()) {
+#ifdef PAL_NET_TCP_AND_TLS_SUPPORT
+        socket_type = PAL_SOCK_STREAM;
+#else
+        _observer.socket_error(M2MConnectionHandler::SOCKET_ABORT);
+        return;
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+    }
+
+    if(_network_stack == M2MInterface::LwIP_IPv4){
+        domain = PAL_AF_INET;
+    } else if(_network_stack == M2MInterface::LwIP_IPv6){
+        domain = PAL_AF_INET6;
+    } else {
+        domain = PAL_AF_UNSPEC;
+    }
+
+    uint32_t interface_count;
+    pal_getNumberOfNetInterfaces(&interface_count);
+    tr_debug("Interface count: %d",interface_count);
+    pal_getNetInterfaceInfo(_net_iface, &interface_info);
+    tr_debug("Interface name: %s",interface_info.interfaceName);
+    tr_debug("Interface no: %d", _net_iface);
+
+    tr_debug("init_socket - port %d", _listen_port);
+
+    status = pal_asynchronousSocket(domain, socket_type, 1, _net_iface, &socket_event_handler, &_socket);
+
+    if(PAL_SUCCESS != status) {
+        _observer.socket_error(M2MConnectionHandler::SOCKET_ABORT);
+        return false;
+    }
+
+    if(_network_stack == M2MInterface::LwIP_IPv4){
+        pal_setSockAddrIPV4Addr(&bind_address, interface_address4);
+    } else if(_network_stack == M2MInterface::LwIP_IPv6){
+        pal_setSockAddrIPV6Addr(&bind_address, interface_address6);
+    }
+
+    pal_setSockAddrPort(&bind_address, _listen_port);
+    pal_bind(_socket, &bind_address, sizeof(bind_address));
+
+    tr_debug("init_socket - OUT");
+    return true;
+}
+
+bool M2MConnectionHandlerPimpl::is_tcp_connection()
+{
+    return ( _binding_mode == M2MInterface::TCP ||
+             _binding_mode == M2MInterface::TCP_QUEUE );
+}
+
+void M2MConnectionHandlerPimpl::close_socket()
+{
+    tr_debug("close_socket() - IN");
+    if(_running) {
+       _running = false;
+       pal_close(&_socket);
+    }
+    tr_debug("close_socket() - OUT");
+}
+
+void M2MConnectionHandlerPimpl::enable_keepalive()
+{
+#if MBED_CLIENT_TCP_KEEPALIVE_TIME
+#ifdef PAL_NET_TCP_AND_TLS_SUPPORT
+    if(is_tcp_connection()) {
+        int enable = 1;
+        pal_setSocketOptions(_socket, PAL_SO_KEEPALIVE, &enable, sizeof(enable));
+    }
+#endif
+#endif
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/source/m2mtimer.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2mtimer.h"
+#include "mbed-client/m2mtimerobserver.h"
+#include "mbed-client-classic/m2mtimerpimpl.h"
+
+
+M2MTimer::M2MTimer(M2MTimerObserver& observer)
+: _observer(observer)
+{
+    _private_impl = new M2MTimerPimpl(observer);
+}
+
+M2MTimer::~M2MTimer()
+{
+    delete _private_impl;
+    //_private_impl = NULL;
+}
+
+void M2MTimer::start_timer( uint64_t interval,
+                            M2MTimerObserver::Type type,
+                            bool single_shot)
+{
+    _private_impl->start_timer(interval,
+                               type,
+                               single_shot);
+}
+
+void M2MTimer::start_dtls_timer(uint64_t intermediate_interval, uint64_t total_interval, M2MTimerObserver::Type type){
+    _private_impl->start_dtls_timer(intermediate_interval, total_interval, type);
+}
+
+void M2MTimer::stop_timer()
+{
+    _private_impl->stop_timer();
+}
+
+bool M2MTimer::is_intermediate_interval_passed(){
+    return _private_impl->is_intermediate_interval_passed();
+}
+
+bool M2MTimer::is_total_interval_passed(){
+    return _private_impl->is_total_interval_passed();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/source/m2mtimerpimpl.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,231 @@
+/*
+ * Copyright (c) 2015-2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <assert.h>
+#include <time.h>
+
+#include "mbed-client-classic/m2mtimerpimpl.h"
+#include "mbed-client/m2mtimerobserver.h"
+#include "mbed-client/m2mvector.h"
+
+#include "eventOS_event.h"
+#include "eventOS_event_timer.h"
+#include "eventOS_scheduler.h"
+#include "ns_hal_init.h"
+
+#define MBED_CLIENT_TIMER_TASKLET_INIT_EVENT 0 // Tasklet init occurs always when generating a tasklet
+#define MBED_CLIENT_TIMER_EVENT 10
+
+#ifdef MBED_CONF_MBED_CLIENT_EVENT_LOOP_SIZE
+#define MBED_CLIENT_EVENT_LOOP_SIZE MBED_CONF_MBED_CLIENT_EVENT_LOOP_SIZE
+#else
+#define MBED_CLIENT_EVENT_LOOP_SIZE 1024
+#endif
+
+int8_t M2MTimerPimpl::_tasklet_id = -1;
+
+int8_t M2MTimerPimpl::_next_timer_id = 1;
+
+static m2m::Vector<M2MTimerPimpl*> timer_impl_list;
+
+extern "C" void tasklet_func(arm_event_s *event)
+{
+    // skip the init event as there will be a timer event after
+    if (event->event_type == MBED_CLIENT_TIMER_EVENT) {
+        bool timer_found = false;
+        eventOS_scheduler_mutex_wait();
+        int timer_count = timer_impl_list.size();
+        for (int index = 0; index < timer_count; index++) {
+            M2MTimerPimpl* timer = timer_impl_list[index];
+            if (timer->get_timer_id() == event->event_id) {
+                eventOS_scheduler_mutex_release();
+                timer_found = true;
+                if (timer->get_still_left_time() > 0) {
+                    timer->start_still_left_timer();
+                }else {
+                    timer->timer_expired();
+                }
+                break;
+            }
+        }
+        if(!timer_found) {
+            eventOS_scheduler_mutex_release();
+        }
+    }
+}
+
+M2MTimerPimpl::M2MTimerPimpl(M2MTimerObserver& observer)
+: _observer(observer),
+  _single_shot(true),
+  _interval(0),
+  _type(M2MTimerObserver::Notdefined),
+  _intermediate_interval(0),
+  _total_interval(0),
+  _still_left(0),
+  _status(0),
+  _dtls_type(false)
+{
+    ns_hal_init(NULL, MBED_CLIENT_EVENT_LOOP_SIZE, NULL, NULL);
+    eventOS_scheduler_mutex_wait();
+    if (_tasklet_id < 0) {
+        _tasklet_id = eventOS_event_handler_create(tasklet_func, MBED_CLIENT_TIMER_TASKLET_INIT_EVENT);
+        assert(_tasklet_id >= 0);
+    }
+
+    // XXX: this wraps over quite soon
+    _timer_id = M2MTimerPimpl::_next_timer_id++;
+    timer_impl_list.push_back(this);
+    eventOS_scheduler_mutex_release();
+}
+
+M2MTimerPimpl::~M2MTimerPimpl()
+{
+    // cancel the timer request, if any is pending
+    cancel();
+
+    // there is no turning back, event os does not have eventOS_event_handler_delete() or similar,
+    // so the tasklet is lost forever. Same goes with timer_impl_list, which leaks now memory.
+
+    // remove the timer from object list
+    eventOS_scheduler_mutex_wait();
+    int timer_count = timer_impl_list.size();
+    for (int index = 0; index < timer_count; index++) {
+        const M2MTimerPimpl* timer = timer_impl_list[index];
+        if (timer->get_timer_id() == _timer_id) {
+            timer_impl_list.erase(index);
+            break;
+        }
+    }
+    eventOS_scheduler_mutex_release();
+}
+
+void M2MTimerPimpl::start_timer( uint64_t interval,
+                                 M2MTimerObserver::Type type,
+                                 bool single_shot)
+{
+    _dtls_type = false;
+    _intermediate_interval = 0;
+    _total_interval = 0;
+    _status = 0;
+    _single_shot = single_shot;
+    _interval = interval;
+    _type = type;
+    _still_left = 0;
+    start();
+}
+
+void M2MTimerPimpl::start_dtls_timer(uint64_t intermediate_interval, uint64_t total_interval, M2MTimerObserver::Type type)
+{
+    _dtls_type = true;
+    _intermediate_interval = intermediate_interval;
+    _total_interval = total_interval;
+    _interval = _intermediate_interval;
+    _status = 0;
+    _single_shot = false;
+    _type = type;
+    start();
+}
+
+void M2MTimerPimpl::start()
+{
+    int status;
+    if(_interval > INT32_MAX) {
+        _still_left = _interval - INT32_MAX;
+        status = eventOS_event_timer_request(_timer_id, MBED_CLIENT_TIMER_EVENT,
+                                            M2MTimerPimpl::_tasklet_id,
+                                            INT32_MAX);
+    }
+    else {
+        status = eventOS_event_timer_request(_timer_id, MBED_CLIENT_TIMER_EVENT,
+                                            M2MTimerPimpl::_tasklet_id,
+                                            _interval);
+    }
+    assert(status == 0);
+}
+
+void M2MTimerPimpl::cancel()
+{
+    eventOS_event_timer_cancel(_timer_id, M2MTimerPimpl::_tasklet_id);
+}
+
+void M2MTimerPimpl::stop_timer()
+{
+    _interval = 0;
+    _single_shot = true;
+    _still_left = 0;
+    cancel();
+}
+
+void M2MTimerPimpl::timer_expired()
+{
+    _status++;
+    _observer.timer_expired(_type);
+
+    if ((!_dtls_type) && (!_single_shot)) {
+        // start next round of periodic timer
+        start();
+    } else if ((_dtls_type) && (!is_total_interval_passed())) {
+        // if only the intermediate time has passed, we need still wait up to total time
+        _interval = _total_interval - _intermediate_interval;
+        start();
+    }
+}
+
+bool M2MTimerPimpl::is_intermediate_interval_passed()
+{
+    if (_status > 0) {
+        return true;
+    }
+    return false;
+}
+
+bool M2MTimerPimpl::is_total_interval_passed()
+{
+    if (_status > 1) {
+        return true;
+    }
+    return false;
+}
+
+uint64_t M2MTimerPimpl::get_still_left_time() const
+{
+   return _still_left;
+}
+
+void M2MTimerPimpl::start_still_left_timer()
+{
+    if (_still_left > 0) {
+        int status;
+        if( _still_left > INT32_MAX) {
+            _still_left = _still_left - INT32_MAX;
+            status = eventOS_event_timer_request(_timer_id, MBED_CLIENT_TIMER_EVENT,
+                                                M2MTimerPimpl::_tasklet_id,
+                                                INT32_MAX);
+        }
+        else {
+            status = eventOS_event_timer_request(_timer_id, MBED_CLIENT_TIMER_EVENT,
+                                                M2MTimerPimpl::_tasklet_id,
+                                                _still_left);
+            _still_left = 0;
+        }
+        assert(status == 0);
+    } else {
+        _observer.timer_expired(_type);
+        if(!_single_shot) {
+            start_timer(_interval, _type, _single_shot);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,23 @@
+#scan for folders having "Makefile" in them and remove 'this' to prevent loop
+ifeq ($(OS),Windows_NT)
+all:
+clean:
+else
+DIRS := $(filter-out ./, $(sort $(dir $(shell find . -name 'Makefile'))))
+
+all:	
+	for dir in $(DIRS); do \
+		cd $$dir; make gcov; cd ..;\
+	done
+	
+clean:
+	for dir in $(DIRS); do \
+		cd $$dir; make clean; cd ..;\
+	done
+	rm -rf stubs/*gcov stubs/*gcda stubs/*o
+	rm -rf results/*
+	rm -rf coverages/*
+	rm -rf results
+	rm -rf coverages
+
+endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/MakefileWorker.mk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,562 @@
+#---------
+#
+# MakefileWorker.mk
+#
+# Include this helper file in your makefile
+# It makes
+#    A static library
+#    A test executable
+#
+# See this example for parameter settings
+#    examples/Makefile
+#
+#----------
+# Inputs - these variables describe what to build
+#
+#   INCLUDE_DIRS - Directories used to search for include files.
+#                   This generates a -I for each directory
+#	SRC_DIRS - Directories containing source file to built into the library
+#   SRC_FILES - Specific source files to build into library. Helpful when not all code
+#				in a directory can be built for test (hopefully a temporary situation)
+#	TEST_SRC_DIRS - Directories containing unit test code build into the unit test runner
+#				These do not go in a library. They are explicitly included in the test runner
+#	TEST_SRC_FILES - Specific source files to build into the unit test runner
+#				These do not go in a library. They are explicitly included in the test runner
+#	MOCKS_SRC_DIRS - Directories containing mock source files to build into the test runner
+#				These do not go in a library. They are explicitly included in the test runner
+#----------
+# You can adjust these variables to influence how to build the test target
+# and where to put and name outputs
+# See below to determine defaults
+#   COMPONENT_NAME - the name of the thing being built
+#   TEST_TARGET - name the test executable. By default it is
+#			$(COMPONENT_NAME)_tests
+#		Helpful if you want 1 > make files in the same directory with different
+#		executables as output.
+#   CPPUTEST_HOME - where CppUTest home dir found
+#   TARGET_PLATFORM - Influences how the outputs are generated by modifying the
+#       CPPUTEST_OBJS_DIR and CPPUTEST_LIB_DIR to use a sub-directory under the
+#       normal objs and lib directories.  Also modifies where to search for the
+#       CPPUTEST_LIB to link against.
+#   CPPUTEST_OBJS_DIR - a directory where o and d files go
+#   CPPUTEST_LIB_DIR - a directory where libs go
+#   CPPUTEST_ENABLE_DEBUG - build for debug
+#   CPPUTEST_USE_MEM_LEAK_DETECTION - Links with overridden new and delete
+#   CPPUTEST_USE_STD_CPP_LIB - Set to N to keep the standard C++ library out
+#		of the test harness
+#   CPPUTEST_USE_GCOV - Turn on coverage analysis
+#		Clean then build with this flag set to Y, then 'make gcov'
+#   CPPUTEST_MAPFILE - generate a map file
+#   CPPUTEST_WARNINGFLAGS - overly picky by default
+#	OTHER_MAKEFILE_TO_INCLUDE - a hook to use this makefile to make
+#		other targets. Like CSlim, which is part of fitnesse
+#	CPPUTEST_USE_VPATH - Use Make's VPATH functionality to support user
+#		specification of source files and directories that aren't below
+#		the user's Makefile in the directory tree, like:
+#			SRC_DIRS += ../../lib/foo
+#		It defaults to N, and shouldn't be necessary except in the above case.
+#----------
+#
+#  Other flags users can initialize to sneak in their settings
+#	CPPUTEST_CXXFLAGS - flags for the C++ compiler
+#	CPPUTEST_CPPFLAGS - flags for the C++ AND C preprocessor
+#	CPPUTEST_CFLAGS - flags for the C complier
+#	CPPUTEST_LDFLAGS - Linker flags
+#----------
+
+# Some behavior is weird on some platforms. Need to discover the platform.
+
+# Platforms
+UNAME_OUTPUT = "$(shell uname -a)"
+MACOSX_STR = Darwin
+MINGW_STR = MINGW
+CYGWIN_STR = CYGWIN
+LINUX_STR = Linux
+SUNOS_STR = SunOS
+UNKNWOWN_OS_STR = Unknown
+
+# Compilers
+CC_VERSION_OUTPUT ="$(shell $(CXX) -v 2>&1)"
+CLANG_STR = clang
+SUNSTUDIO_CXX_STR = SunStudio
+
+UNAME_OS = $(UNKNWOWN_OS_STR)
+
+ifeq ($(findstring $(MINGW_STR),$(UNAME_OUTPUT)),$(MINGW_STR))
+	UNAME_OS = $(MINGW_STR)
+endif
+
+ifeq ($(findstring $(CYGWIN_STR),$(UNAME_OUTPUT)),$(CYGWIN_STR))
+	UNAME_OS = $(CYGWIN_STR)
+endif
+
+ifeq ($(findstring $(LINUX_STR),$(UNAME_OUTPUT)),$(LINUX_STR))
+	UNAME_OS = $(LINUX_STR)
+endif
+
+ifeq ($(findstring $(MACOSX_STR),$(UNAME_OUTPUT)),$(MACOSX_STR))
+	UNAME_OS = $(MACOSX_STR)
+#lion has a problem with the 'v' part of -a
+	UNAME_OUTPUT = "$(shell uname -pmnrs)"
+endif
+
+ifeq ($(findstring $(SUNOS_STR),$(UNAME_OUTPUT)),$(SUNOS_STR))
+	UNAME_OS = $(SUNOS_STR)
+
+	SUNSTUDIO_CXX_ERR_STR = CC -flags
+ifeq ($(findstring $(SUNSTUDIO_CXX_ERR_STR),$(CC_VERSION_OUTPUT)),$(SUNSTUDIO_CXX_ERR_STR))
+	CC_VERSION_OUTPUT ="$(shell $(CXX) -V 2>&1)"
+	COMPILER_NAME = $(SUNSTUDIO_CXX_STR)
+endif
+endif
+
+ifeq ($(findstring $(CLANG_STR),$(CC_VERSION_OUTPUT)),$(CLANG_STR))
+	COMPILER_NAME = $(CLANG_STR)
+endif
+
+#Kludge for mingw, it does not have cc.exe, but gcc.exe will do
+ifeq ($(UNAME_OS),$(MINGW_STR))
+	CC := gcc
+endif
+
+#And another kludge. Exception handling in gcc 4.6.2 is broken when linking the
+# Standard C++ library as a shared library. Unbelievable.
+ifeq ($(UNAME_OS),$(MINGW_STR))
+  CPPUTEST_LDFLAGS += -static
+endif
+ifeq ($(UNAME_OS),$(CYGWIN_STR))
+  CPPUTEST_LDFLAGS += -static
+endif
+
+
+#Kludge for MacOsX gcc compiler on Darwin9 who can't handle pendantic
+ifeq ($(UNAME_OS),$(MACOSX_STR))
+ifeq ($(findstring Version 9,$(UNAME_OUTPUT)),Version 9)
+	CPPUTEST_PEDANTIC_ERRORS = N
+endif
+endif
+
+ifndef COMPONENT_NAME
+    COMPONENT_NAME = name_this_in_the_makefile
+endif
+
+# Debug on by default
+ifndef CPPUTEST_ENABLE_DEBUG
+	CPPUTEST_ENABLE_DEBUG = Y
+endif
+
+# new and delete for memory leak detection on by default
+ifndef CPPUTEST_USE_MEM_LEAK_DETECTION
+	CPPUTEST_USE_MEM_LEAK_DETECTION = Y
+endif
+
+# Use the standard C library
+ifndef CPPUTEST_USE_STD_C_LIB
+	CPPUTEST_USE_STD_C_LIB = Y
+endif
+
+# Use the standard C++ library
+ifndef CPPUTEST_USE_STD_CPP_LIB
+	CPPUTEST_USE_STD_CPP_LIB = Y
+endif
+
+# Use gcov, off by default
+ifndef CPPUTEST_USE_GCOV
+	CPPUTEST_USE_GCOV = Y
+endif
+
+ifndef CPPUTEST_PEDANTIC_ERRORS
+	CPPUTEST_PEDANTIC_ERRORS = Y
+endif
+
+# Default warnings
+ifndef CPPUTEST_WARNINGFLAGS
+	CPPUTEST_WARNINGFLAGS =  -Wall -Wextra -Wshadow -Wswitch-default -Wswitch-enum -Wconversion
+ifeq ($(CPPUTEST_PEDANTIC_ERRORS), Y)
+#	CPPUTEST_WARNINGFLAGS += -pedantic-errors
+	CPPUTEST_WARNINGFLAGS += -pedantic
+endif
+ifeq ($(UNAME_OS),$(LINUX_STR))
+	CPPUTEST_WARNINGFLAGS += -Wsign-conversion
+endif
+	CPPUTEST_CXX_WARNINGFLAGS = -Woverloaded-virtual
+	CPPUTEST_C_WARNINGFLAGS = -Wstrict-prototypes
+endif
+
+#Wonderful extra compiler warnings with clang
+ifeq ($(COMPILER_NAME),$(CLANG_STR))
+# -Wno-disabled-macro-expansion -> Have to disable the macro expansion warning as the operator new overload warns on that.
+# -Wno-padded -> I sort-of like this warning but if there is a bool at the end of the class, it seems impossible to remove it! (except by making padding explicit)
+# -Wno-global-constructors Wno-exit-time-destructors -> Great warnings, but in CppUTest it is impossible to avoid as the automatic test registration depends on the global ctor and dtor
+# -Wno-weak-vtables -> The TEST_GROUP macro declares a class and will automatically inline its methods. Thats ok as they are only in one translation unit. Unfortunately, the warning can't detect that, so it must be disabled.
+	CPPUTEST_CXX_WARNINGFLAGS += -Weverything -Wno-disabled-macro-expansion -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables
+	CPPUTEST_C_WARNINGFLAGS += -Weverything -Wno-padded
+endif
+
+# Uhm. Maybe put some warning flags for SunStudio here?
+ifeq ($(COMPILER_NAME),$(SUNSTUDIO_CXX_STR))
+	CPPUTEST_CXX_WARNINGFLAGS =
+	CPPUTEST_C_WARNINGFLAGS =
+endif
+
+# Default dir for temporary files (d, o)
+ifndef CPPUTEST_OBJS_DIR
+ifndef TARGET_PLATFORM
+    CPPUTEST_OBJS_DIR = objs
+else
+    CPPUTEST_OBJS_DIR = objs/$(TARGET_PLATFORM)
+endif
+endif
+
+# Default dir for the outout library
+ifndef CPPUTEST_LIB_DIR
+ifndef TARGET_PLATFORM
+    CPPUTEST_LIB_DIR = lib
+else
+    CPPUTEST_LIB_DIR = lib/$(TARGET_PLATFORM)
+endif
+endif
+
+# No map by default
+ifndef CPPUTEST_MAP_FILE
+	CPPUTEST_MAP_FILE = N
+endif
+
+# No extentions is default
+ifndef CPPUTEST_USE_EXTENSIONS
+	CPPUTEST_USE_EXTENSIONS = N
+endif
+
+# No VPATH is default
+ifndef CPPUTEST_USE_VPATH
+	CPPUTEST_USE_VPATH := N
+endif
+# Make empty, instead of 'N', for usage in $(if ) conditionals
+ifneq ($(CPPUTEST_USE_VPATH), Y)
+	CPPUTEST_USE_VPATH :=
+endif
+
+ifndef TARGET_PLATFORM
+#CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib
+CPPUTEST_LIB_LINK_DIR = /usr/lib/x86_64-linux-gnu
+else
+CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib/$(TARGET_PLATFORM)
+endif
+
+# --------------------------------------
+# derived flags in the following area
+# --------------------------------------
+
+# Without the C library, we'll need to disable the C++ library and ...
+ifeq ($(CPPUTEST_USE_STD_C_LIB), N)
+	CPPUTEST_USE_STD_CPP_LIB = N
+	CPPUTEST_USE_MEM_LEAK_DETECTION = N
+	CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_C_LIB_DISABLED
+	CPPUTEST_CPPFLAGS += -nostdinc
+endif
+
+CPPUTEST_CPPFLAGS += -DCPPUTEST_COMPILATION
+
+ifeq ($(CPPUTEST_USE_MEM_LEAK_DETECTION), N)
+	CPPUTEST_CPPFLAGS += -DCPPUTEST_MEM_LEAK_DETECTION_DISABLED
+else
+    ifndef CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE
+	    	CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorNewMacros.h
+    endif
+    ifndef CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE
+	    CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorMallocMacros.h
+	endif
+endif
+
+ifeq ($(CPPUTEST_ENABLE_DEBUG), Y)
+	CPPUTEST_CXXFLAGS += -g
+	CPPUTEST_CFLAGS += -g 
+	CPPUTEST_LDFLAGS += -g
+endif
+
+ifeq ($(CPPUTEST_USE_STD_CPP_LIB), N)
+	CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_CPP_LIB_DISABLED
+ifeq ($(CPPUTEST_USE_STD_C_LIB), Y)
+	CPPUTEST_CXXFLAGS += -nostdinc++
+endif
+endif
+
+ifdef $(GMOCK_HOME)
+	GTEST_HOME = $(GMOCK_HOME)/gtest
+	CPPUTEST_CPPFLAGS += -I$(GMOCK_HOME)/include
+	GMOCK_LIBRARY = $(GMOCK_HOME)/lib/.libs/libgmock.a
+	LD_LIBRARIES += $(GMOCK_LIBRARY)
+	CPPUTEST_CPPFLAGS += -DINCLUDE_GTEST_TESTS
+	CPPUTEST_WARNINGFLAGS =
+	CPPUTEST_CPPFLAGS += -I$(GTEST_HOME)/include -I$(GTEST_HOME)
+	GTEST_LIBRARY = $(GTEST_HOME)/lib/.libs/libgtest.a
+	LD_LIBRARIES += $(GTEST_LIBRARY)
+endif
+
+
+ifeq ($(CPPUTEST_USE_GCOV), Y)
+	CPPUTEST_CXXFLAGS += -fprofile-arcs -ftest-coverage
+	CPPUTEST_CFLAGS += -fprofile-arcs -ftest-coverage
+endif
+
+CPPUTEST_CXXFLAGS += $(CPPUTEST_WARNINGFLAGS) $(CPPUTEST_CXX_WARNINGFLAGS)
+CPPUTEST_CPPFLAGS += $(CPPUTEST_WARNINGFLAGS)
+CPPUTEST_CXXFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE)
+CPPUTEST_CPPFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE)
+CPPUTEST_CFLAGS += $(CPPUTEST_C_WARNINGFLAGS)
+
+TARGET_MAP = $(COMPONENT_NAME).map.txt
+ifeq ($(CPPUTEST_MAP_FILE), Y)
+	CPPUTEST_LDFLAGS += -Wl,-map,$(TARGET_MAP)
+endif
+
+# Link with CppUTest lib
+CPPUTEST_LIB = $(CPPUTEST_LIB_LINK_DIR)/libCppUTest.a
+
+ifeq ($(CPPUTEST_USE_EXTENSIONS), Y)
+CPPUTEST_LIB += $(CPPUTEST_LIB_LINK_DIR)/libCppUTestExt.a
+endif
+
+ifdef CPPUTEST_STATIC_REALTIME
+	LD_LIBRARIES += -lrt
+endif
+
+TARGET_LIB = \
+    $(CPPUTEST_LIB_DIR)/lib$(COMPONENT_NAME).a
+
+ifndef TEST_TARGET
+	ifndef TARGET_PLATFORM
+		TEST_TARGET = $(COMPONENT_NAME)_tests
+	else
+		TEST_TARGET = $(COMPONENT_NAME)_$(TARGET_PLATFORM)_tests
+	endif
+endif
+
+#Helper Functions
+get_src_from_dir  = $(wildcard $1/*.cpp) $(wildcard $1/*.cc) $(wildcard $1/*.c)
+get_dirs_from_dirspec  = $(wildcard $1)
+get_src_from_dir_list = $(foreach dir, $1, $(call get_src_from_dir,$(dir)))
+__src_to = $(subst .c,$1, $(subst .cc,$1, $(subst .cpp,$1,$(if $(CPPUTEST_USE_VPATH),$(notdir $2),$2))))
+src_to = $(addprefix $(CPPUTEST_OBJS_DIR)/,$(call __src_to,$1,$2))
+src_to_o = $(call src_to,.o,$1)
+src_to_d = $(call src_to,.d,$1)
+src_to_gcda = $(call src_to,.gcda,$1)
+src_to_gcno = $(call src_to,.gcno,$1)
+time = $(shell date +%s)
+delta_t = $(eval minus, $1, $2)
+debug_print_list = $(foreach word,$1,echo "  $(word)";) echo;
+
+#Derived
+STUFF_TO_CLEAN += $(TEST_TARGET) $(TEST_TARGET).exe $(TARGET_LIB) $(TARGET_MAP)
+
+SRC += $(call get_src_from_dir_list, $(SRC_DIRS)) $(SRC_FILES)
+OBJ = $(call src_to_o,$(SRC))
+
+STUFF_TO_CLEAN += $(OBJ)
+
+TEST_SRC += $(call get_src_from_dir_list, $(TEST_SRC_DIRS)) $(TEST_SRC_FILES)
+TEST_OBJS = $(call src_to_o,$(TEST_SRC))
+STUFF_TO_CLEAN += $(TEST_OBJS)
+
+
+MOCKS_SRC += $(call get_src_from_dir_list, $(MOCKS_SRC_DIRS))
+MOCKS_OBJS = $(call src_to_o,$(MOCKS_SRC))
+STUFF_TO_CLEAN += $(MOCKS_OBJS)
+
+ALL_SRC = $(SRC) $(TEST_SRC) $(MOCKS_SRC)
+
+# If we're using VPATH
+ifeq ($(CPPUTEST_USE_VPATH), Y)
+# gather all the source directories and add them
+	VPATH += $(sort $(dir $(ALL_SRC)))
+# Add the component name to the objs dir path, to differentiate between same-name objects
+	CPPUTEST_OBJS_DIR := $(addsuffix /$(COMPONENT_NAME),$(CPPUTEST_OBJS_DIR))
+endif
+
+#Test coverage with gcov
+GCOV_OUTPUT = gcov_output.txt
+GCOV_REPORT = gcov_report.txt
+GCOV_ERROR = gcov_error.txt
+GCOV_GCDA_FILES = $(call src_to_gcda, $(ALL_SRC))
+GCOV_GCNO_FILES = $(call src_to_gcno, $(ALL_SRC))
+TEST_OUTPUT = $(TEST_TARGET).txt
+STUFF_TO_CLEAN += \
+	$(GCOV_OUTPUT)\
+	$(GCOV_REPORT)\
+	$(GCOV_REPORT).html\
+	$(GCOV_ERROR)\
+	$(GCOV_GCDA_FILES)\
+	$(GCOV_GCNO_FILES)\
+	$(TEST_OUTPUT)
+
+#The gcda files for gcov need to be deleted before each run
+#To avoid annoying messages.
+GCOV_CLEAN = $(SILENCE)rm -f $(GCOV_GCDA_FILES) $(GCOV_OUTPUT) $(GCOV_REPORT) $(GCOV_ERROR)
+RUN_TEST_TARGET = $(SILENCE)  $(GCOV_CLEAN) ; echo "Running $(TEST_TARGET)"; ./$(TEST_TARGET) $(CPPUTEST_EXE_FLAGS) -ojunit
+
+ifeq ($(CPPUTEST_USE_GCOV), Y)
+
+	ifeq ($(COMPILER_NAME),$(CLANG_STR))
+		LD_LIBRARIES += --coverage
+	else
+		LD_LIBRARIES += -lgcov
+	endif
+endif
+
+
+INCLUDES_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(INCLUDE_DIRS))
+INCLUDES += $(foreach dir, $(INCLUDES_DIRS_EXPANDED), -I$(dir))
+MOCK_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(MOCKS_SRC_DIRS))
+INCLUDES += $(foreach dir, $(MOCK_DIRS_EXPANDED), -I$(dir))
+
+CPPUTEST_CPPFLAGS +=  $(INCLUDES) $(CPPUTESTFLAGS)
+
+DEP_FILES = $(call src_to_d, $(ALL_SRC))
+STUFF_TO_CLEAN += $(DEP_FILES) $(PRODUCTION_CODE_START) $(PRODUCTION_CODE_END)
+STUFF_TO_CLEAN += $(STDLIB_CODE_START) $(MAP_FILE) cpputest_*.xml junit_run_output
+
+# We'll use the CPPUTEST_CFLAGS etc so that you can override AND add to the CppUTest flags
+CFLAGS = $(CPPUTEST_CFLAGS) $(CPPUTEST_ADDITIONAL_CFLAGS)
+CPPFLAGS = $(CPPUTEST_CPPFLAGS) $(CPPUTEST_ADDITIONAL_CPPFLAGS)
+CXXFLAGS = $(CPPUTEST_CXXFLAGS) $(CPPUTEST_ADDITIONAL_CXXFLAGS)
+LDFLAGS = $(CPPUTEST_LDFLAGS) $(CPPUTEST_ADDITIONAL_LDFLAGS)
+
+# Don't consider creating the archive a warning condition that does STDERR output
+ARFLAGS := $(ARFLAGS)c
+
+DEP_FLAGS=-MMD -MP
+
+# Some macros for programs to be overridden. For some reason, these are not in Make defaults
+RANLIB = ranlib
+
+# Targets
+
+.PHONY: all
+all: start $(TEST_TARGET)
+	$(RUN_TEST_TARGET)
+
+.PHONY: start
+start: $(TEST_TARGET)
+	$(SILENCE)START_TIME=$(call time)
+
+.PHONY: all_no_tests
+all_no_tests: $(TEST_TARGET)
+
+.PHONY: flags
+flags:
+	@echo
+	@echo "OS ${UNAME_OS}"
+	@echo "Compile C and C++ source with CPPFLAGS:"
+	@$(call debug_print_list,$(CPPFLAGS))
+	@echo "Compile C++ source with CXXFLAGS:"
+	@$(call debug_print_list,$(CXXFLAGS))
+	@echo "Compile C source with CFLAGS:"
+	@$(call debug_print_list,$(CFLAGS))
+	@echo "Link with LDFLAGS:"
+	@$(call debug_print_list,$(LDFLAGS))
+	@echo "Link with LD_LIBRARIES:"
+	@$(call debug_print_list,$(LD_LIBRARIES))
+	@echo "Create libraries with ARFLAGS:"
+	@$(call debug_print_list,$(ARFLAGS))
+
+TEST_DEPS = $(TEST_OBJS) $(MOCKS_OBJS) $(PRODUCTION_CODE_START) $(TARGET_LIB) $(USER_LIBS) $(PRODUCTION_CODE_END) $(CPPUTEST_LIB) $(STDLIB_CODE_START)
+test-deps: $(TEST_DEPS)
+
+$(TEST_TARGET): $(TEST_DEPS)
+	@echo Linking $@
+	$(SILENCE)$(CXX) -o $@ $^ $(LD_LIBRARIES) $(LDFLAGS)
+
+$(TARGET_LIB): $(OBJ)
+	@echo Building archive $@
+	$(SILENCE)mkdir -p $(dir $@)
+	$(SILENCE)$(AR) $(ARFLAGS) $@ $^
+	$(SILENCE)$(RANLIB) $@
+
+test: $(TEST_TARGET)
+	$(RUN_TEST_TARGET) | tee $(TEST_OUTPUT)
+
+vtest: $(TEST_TARGET)
+	$(RUN_TEST_TARGET) -v  | tee $(TEST_OUTPUT)
+
+$(CPPUTEST_OBJS_DIR)/%.o: %.cc
+	@echo compiling $(notdir $<)
+	$(SILENCE)mkdir -p $(dir $@)
+	$(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $<
+
+$(CPPUTEST_OBJS_DIR)/%.o: %.cpp
+	@echo compiling $(notdir $<)
+	$(SILENCE)mkdir -p $(dir $@)
+	$(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $<
+
+$(CPPUTEST_OBJS_DIR)/%.o: %.c
+	@echo compiling $(notdir $<)
+	$(SILENCE)mkdir -p $(dir $@)
+	$(SILENCE)$(COMPILE.c) $(DEP_FLAGS)  $(OUTPUT_OPTION) $<
+
+ifneq "$(MAKECMDGOALS)" "clean"
+-include $(DEP_FILES)
+endif
+
+.PHONY: clean
+clean:
+	@echo Making clean
+	$(SILENCE)$(RM) $(STUFF_TO_CLEAN)
+	$(SILENCE)rm -rf gcov objs #$(CPPUTEST_OBJS_DIR)
+	$(SILENCE)rm -rf $(CPPUTEST_LIB_DIR)
+	$(SILENCE)find . -name "*.gcno" | xargs rm -f
+	$(SILENCE)find . -name "*.gcda" | xargs rm -f
+
+#realclean gets rid of all gcov, o and d files in the directory tree
+#not just the ones made by this makefile
+.PHONY: realclean
+realclean: clean
+	$(SILENCE)rm -rf gcov
+	$(SILENCE)find . -name "*.gdcno" | xargs rm -f
+	$(SILENCE)find . -name "*.[do]" | xargs rm -f
+
+gcov: test
+ifeq ($(CPPUTEST_USE_VPATH), Y)
+	$(SILENCE)gcov --object-directory $(CPPUTEST_OBJS_DIR) $(SRC) >> $(GCOV_OUTPUT) 2>> $(GCOV_ERROR)
+else
+	$(SILENCE)for d in $(SRC_DIRS) ; do \
+		gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$d $$d/*.c $$d/*.cpp >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \
+	done
+	$(SILENCE)for f in $(SRC_FILES) ; do \
+		gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$f $$f >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \
+	done
+endif
+#	$(CPPUTEST_HOME)/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT)
+	/usr/share/cpputest/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT)
+	$(SILENCE)cat $(GCOV_REPORT)
+	$(SILENCE)mkdir -p gcov
+	$(SILENCE)mv *.gcov gcov
+	$(SILENCE)mv gcov_* gcov
+	@echo "See gcov directory for details"
+
+.PHONEY: format
+format:
+	$(CPPUTEST_HOME)/scripts/reformat.sh $(PROJECT_HOME_DIR)
+
+.PHONEY: debug
+debug:
+	@echo
+	@echo "Target Source files:"
+	@$(call debug_print_list,$(SRC))
+	@echo "Target Object files:"
+	@$(call debug_print_list,$(OBJ))
+	@echo "Test Source files:"
+	@$(call debug_print_list,$(TEST_SRC))
+	@echo "Test Object files:"
+	@$(call debug_print_list,$(TEST_OBJS))
+	@echo "Mock Source files:"
+	@$(call debug_print_list,$(MOCKS_SRC))
+	@echo "Mock Object files:"
+	@$(call debug_print_list,$(MOCKS_OBJS))
+	@echo "All Input Dependency files:"
+	@$(call debug_print_list,$(DEP_FILES))
+	@echo Stuff to clean:
+	@$(call debug_print_list,$(STUFF_TO_CLEAN))
+	@echo Includes:
+	@$(call debug_print_list,$(INCLUDES))
+
+-include $(OTHER_MAKEFILE_TO_INCLUDE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/common/alltests.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/common/mbed.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_H
+#define MBED_H
+
+#include <cstdio>
+#include <cstring>
+
+#endif // MBED_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerimpl_classic/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,16 @@
+include ../makefile_defines.txt
+
+COMPONENT_NAME = m2mconnectionhandlerimpl_classic_unit
+SRC_FILES = \
+        ../../../../source/m2mconnectionhandler.cpp \
+
+TEST_SRC_FILES = \
+	main.cpp \
+        m2mconnectionhandlerimpl_classic_test.cpp \
+        test_m2mconnectionhandlerimpl_classic.cpp \
+       ../stub/m2mconnectionhandlerpimpl_stub.cpp \
+       ../stub/m2mconnectionsecurity_stub.cpp \
+        ../stub/m2mstring_stub.cpp \
+
+include ../MakefileWorker.mk
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerimpl_classic/m2mconnectionhandlerimpl_classic_test.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mconnectionhandlerimpl_classic.h"
+
+TEST_GROUP(M2MConnectionHandler_classic)
+{
+  Test_M2MConnectionHandler_classic* handler;
+
+  void setup()
+  {
+    handler = new Test_M2MConnectionHandler_classic();
+  }
+  void teardown()
+  {
+    delete handler;
+  }
+};
+
+
+TEST(M2MConnectionHandler_classic, create)
+{
+    CHECK(handler != NULL);
+}
+
+TEST(M2MConnectionHandler_classic, test_bind_connection)
+{
+    handler->test_bind_connection();
+}
+
+TEST(M2MConnectionHandler_classic, test_resolve_server_address)
+{
+    handler->test_resolve_server_address();
+}
+
+TEST(M2MConnectionHandler_classic, test_start_listening_for_data)
+{
+    handler->test_start_listening_for_data();
+}
+
+TEST(M2MConnectionHandler_classic, test_send_data)
+{
+    handler->test_send_data();
+}
+
+TEST(M2MConnectionHandler_classic, test_stop_listening)
+{
+    handler->test_stop_listening();
+}
+
+TEST(M2MConnectionHandler_classic, test_send_to_socket)
+{
+    handler->test_send_to_socket();
+}
+
+TEST(M2MConnectionHandler_classic, test_receive_from_socket)
+{
+    handler->test_receive_from_socket();
+}
+
+TEST(M2MConnectionHandler_classic, test_handle_connection_error)
+{
+    handler->test_handle_connection_error();
+}
+
+TEST(M2MConnectionHandler_classic, test_set_platform_network_handler)
+{
+    handler->test_set_platform_network_handler();
+}
+
+TEST(M2MConnectionHandler_classic, test_claim_mutex)
+{
+    handler->test_claim_mutex();
+}
+
+TEST(M2MConnectionHandler_classic, test_release_mutex)
+{
+    handler->test_release_mutex();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerimpl_classic/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+    return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MConnectionHandler_classic);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerimpl_classic/test_m2mconnectionhandlerimpl_classic.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mconnectionhandlerimpl_classic.h"
+#include "m2mconnectionhandlerpimpl_stub.h"
+#include "m2mconnectionobserver.h"
+
+class M2MConnection_TestObserver : public M2MConnectionObserver {
+
+public:
+    M2MConnection_TestObserver(){}
+
+    virtual ~M2MConnection_TestObserver(){}
+
+    void set_class_object(M2MConnectionHandler *impl) {}
+    void data_available(uint8_t*,
+                        uint16_t,
+                        const M2MConnectionObserver::SocketAddress &){
+        dataAvailable = true;
+    }
+
+    void socket_error(uint8_t error_code, bool retry){error = true;}
+
+    void address_ready(const M2MConnectionObserver::SocketAddress &,
+                       M2MConnectionObserver::ServerType,
+                       const uint16_t){addressReady = true;}
+
+    void data_sent(){dataSent = true;}
+
+    bool dataAvailable;
+    bool error;
+    bool addressReady;
+    bool dataSent;
+};
+
+Test_M2MConnectionHandler_classic::Test_M2MConnectionHandler_classic()
+{
+    observer = new M2MConnection_TestObserver();
+    handler = new M2MConnectionHandler(*observer, NULL ,M2MInterface::NOT_SET,M2MInterface::Uninitialized);
+}
+
+Test_M2MConnectionHandler_classic::~Test_M2MConnectionHandler_classic()
+{
+    delete handler;
+    delete observer;
+}
+
+void Test_M2MConnectionHandler_classic::test_bind_connection()
+{
+    m2mconnectionhandlerpimpl_stub::bool_value = true;
+    CHECK( handler->bind_connection(7) == true);
+}
+
+void Test_M2MConnectionHandler_classic::test_resolve_server_address()
+{
+    m2mconnectionhandlerpimpl_stub::bool_value = true;
+    CHECK(handler->resolve_server_address("10", 7, M2MConnectionObserver::LWM2MServer, NULL) == true);
+
+    CHECK(handler->resolve_server_address("10", 7, M2MConnectionObserver::LWM2MServer, NULL) == true);
+
+    m2mconnectionhandlerpimpl_stub::bool_value = false;
+    CHECK(handler->resolve_server_address("10", 7, M2MConnectionObserver::LWM2MServer, NULL) == false);
+}
+
+void Test_M2MConnectionHandler_classic::test_send_data()
+{
+    sn_nsdl_addr_s* addr = (sn_nsdl_addr_s*)malloc(sizeof(sn_nsdl_addr_s));
+
+    memset(addr, 0, sizeof(sn_nsdl_addr_s));
+    m2mconnectionhandlerpimpl_stub::bool_value = false;
+    CHECK(false == handler->send_data(NULL, 0 , NULL));
+
+    m2mconnectionhandlerpimpl_stub::bool_value = true;
+    CHECK(true == handler->send_data(NULL, 0 , addr));
+
+    m2mconnectionhandlerpimpl_stub::bool_value = false;
+    CHECK(false == handler->send_data(NULL, 0 , addr));
+
+    free(addr);
+}
+
+void Test_M2MConnectionHandler_classic::test_start_listening_for_data()
+{
+    handler->start_listening_for_data();
+}
+
+
+
+void Test_M2MConnectionHandler_classic::test_stop_listening()
+{
+
+    handler->stop_listening();
+
+}
+
+void Test_M2MConnectionHandler_classic::test_send_to_socket()
+{
+    const char buf[] = "hello";
+    handler->send_to_socket((unsigned char *)&buf, 5);
+}
+
+void Test_M2MConnectionHandler_classic::test_receive_from_socket()
+{
+    unsigned char *buf = (unsigned char *)malloc(6);
+    handler->receive_from_socket(buf, 5);
+    free(buf);
+}
+
+void Test_M2MConnectionHandler_classic::test_handle_connection_error()
+{
+    // To manage code coverage
+    handler->handle_connection_error(5);
+}
+
+void Test_M2MConnectionHandler_classic::test_set_platform_network_handler()
+{
+    // To manage code coverage
+    handler->set_platform_network_handler(NULL);
+}
+
+void Test_M2MConnectionHandler_classic::test_claim_mutex()
+{
+    // To manage code coverage
+    handler->claim_mutex();
+}
+
+void Test_M2MConnectionHandler_classic::test_release_mutex()
+{
+    // To manage code coverage
+    handler->release_mutex();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerimpl_classic/test_m2mconnectionhandlerimpl_classic.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_CONNECTION_HANDLER_IMPL_CLASSIC_H
+#define TEST_M2M_CONNECTION_HANDLER_IMPL_CLASSIC_H
+
+#include "m2mconnectionhandler.h"
+
+class M2MConnection_TestObserver;
+
+class Test_M2MConnectionHandler_classic
+{
+public:
+    Test_M2MConnectionHandler_classic();
+
+    virtual ~Test_M2MConnectionHandler_classic();
+
+    void test_bind_connection();
+
+    void test_resolve_server_address();
+
+    void test_send_data();
+
+    void test_start_listening_for_data();
+
+    void test_stop_listening();
+
+    void test_receive_from_socket();
+
+    void test_send_to_socket();
+
+    void test_handle_connection_error();
+
+    void test_set_platform_network_handler();
+
+    void test_claim_mutex();
+
+    void test_release_mutex();
+
+    M2MConnectionHandler* handler;
+    M2MConnection_TestObserver *observer;
+};
+
+#endif // TEST_M2M_CONNECTION_HANDLER_IMPL_CLASSIC_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerpimpl_classic/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,26 @@
+include ../makefile_defines.txt
+
+COMPONENT_NAME = m2mconnectionhandlerpimpl_classic_unit
+SRC_FILES = \
+        ../../../../source/m2mconnectionhandlerpimpl.cpp \
+
+TEST_SRC_FILES = \
+	main.cpp \
+        m2mconnectionhandlerpimpl_classic_test.cpp \
+        test_m2mconnectionhandlerpimpl_classic.cpp \
+       ../stub/m2msecurity_stub.cpp \
+       ../stub/m2mconnectionsecurity_stub.cpp \
+       ../stub/m2mstring_stub.cpp \
+       ../stub/m2mobject_stub.cpp \
+       ../stub/m2mresource_stub.cpp \
+       ../stub/m2mresourceinstance_stub.cpp \
+       ../stub/m2mbase_stub.cpp \
+       ../stub/m2mconnectionsecurity_stub.cpp \
+       ../stub/pal_network_stub.cpp \
+       ../stub/eventOS_stub.cpp \
+       ../stub/pal_stub.cpp \
+
+
+
+include ../MakefileWorker.mk
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerpimpl_classic/m2mconnectionhandlerpimpl_classic_test.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mconnectionhandlerpimpl_classic.h"
+
+TEST_GROUP(M2MConnectionHandlerPimpl_classic)
+{
+  Test_M2MConnectionHandlerPimpl_classic* handler;
+
+  void setup()
+  {
+    handler = new Test_M2MConnectionHandlerPimpl_classic();
+  }
+  void teardown()
+  {
+    delete handler;
+  }
+};
+
+
+TEST(M2MConnectionHandlerPimpl_classic, create)
+{
+    CHECK(handler != NULL);
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_bind_connection)
+{
+    handler->test_bind_connection();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_resolve_server_address)
+{
+    handler->test_resolve_server_address();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_dns_handler)
+{
+    handler->test_dns_handler();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_start_listening_for_data)
+{
+    handler->test_start_listening_for_data();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_receive_handler)
+{
+    handler->test_receive_handler();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_send_data)
+{
+    handler->test_send_data();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_send_socket_data)
+{
+    handler->test_send_socket_data();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_stop_listening)
+{
+    handler->test_stop_listening();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_send_to_socket)
+{
+    handler->test_send_to_socket();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_receive_from_socket)
+{
+    handler->test_receive_from_socket();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_handle_connection_error)
+{
+    handler->test_handle_connection_error();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_connection_event_handler)
+{
+    handler->test_connection_event_handler();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_set_platform_network_handler)
+{
+    handler->test_set_platform_network_handler();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_receive_handshake_handler)
+{
+    handler->test_receive_handshake_handler();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_claim_mutex)
+{
+    handler->test_claim_mutex();
+}
+
+TEST(M2MConnectionHandlerPimpl_classic, test_release_mutex)
+{
+    handler->test_release_mutex();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerpimpl_classic/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+    return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MConnectionHandlerPimpl_classic);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerpimpl_classic/test_m2mconnectionhandlerpimpl_classic.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,629 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mconnectionhandlerpimpl_classic.h"
+#include "mbed-client-classic/m2mconnectionhandlerpimpl.h"
+#include "mbed-client/m2mconnectionhandler.h"
+#include "m2mconnectionobserver.h"
+#include "m2msecurity.h"
+#include "m2mconnectionsecurity_stub.h"
+#include "m2msecurity_stub.h"
+#include "eventOS_stub.h"
+#include "pal_network_stub.h"
+#include "eventOS_event.h"
+#include <limits.h>
+
+class M2MConnection_TestObserver : public M2MConnectionObserver {
+
+public:
+    M2MConnection_TestObserver():
+    obj(NULL){}
+
+    virtual ~M2MConnection_TestObserver(){}
+
+    void set_class_object(M2MConnectionHandlerPimpl *impl) {obj = impl;}
+    void data_available(uint8_t*,
+                        uint16_t,
+                        const M2MConnectionObserver::SocketAddress &){
+        dataAvailable = true;
+        if(obj) {
+            //obj->_receive_data = false;
+        }
+
+    }
+
+    void socket_error(uint8_t error_code, bool retry){error = true;}
+
+    void address_ready(const M2MConnectionObserver::SocketAddress &,
+                       M2MConnectionObserver::ServerType,
+                       const uint16_t){addressReady = true;}
+
+    void data_sent(){dataSent = true;}
+
+    bool dataAvailable;
+    bool error;
+    bool addressReady;
+    bool dataSent;
+    M2MSecurity* sec;
+
+    M2MConnectionHandlerPimpl *obj;
+
+};
+
+Test_M2MConnectionHandlerPimpl_classic::Test_M2MConnectionHandlerPimpl_classic()
+{
+    observer = new M2MConnection_TestObserver();
+    m2mconnectionsecurityimpl_stub::clear();
+    pal_network_stub::void_value = NULL;
+    pal_network_stub::change_status_count = 0;
+
+    handler = new M2MConnectionHandlerPimpl(NULL, *observer, NULL , M2MInterface::NOT_SET, M2MInterface::Uninitialized);
+
+    sec = new M2MSecurity(M2MSecurity::M2MServer);
+    M2MConnectionSecurity* sec1 = new M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    M2MConnectionSecurity* sec2 = new M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    M2MConnectionSecurity* sec3 = new M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    M2MConnectionSecurity* sec4 = new M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+
+    udp4_unsec = new M2MConnectionHandlerPimpl(NULL, *observer, NULL , M2MInterface::UDP, M2MInterface::LwIP_IPv4);
+    udp4_sec = new M2MConnectionHandlerPimpl(NULL, *observer, sec1 , M2MInterface::UDP, M2MInterface::LwIP_IPv4);
+    tcp4_unsec = new M2MConnectionHandlerPimpl(NULL, *observer, NULL , M2MInterface::TCP, M2MInterface::LwIP_IPv4);
+    tcp4_sec = new M2MConnectionHandlerPimpl(NULL, *observer, sec2 , M2MInterface::TCP, M2MInterface::LwIP_IPv4);
+    udp6_unsec = new M2MConnectionHandlerPimpl(NULL, *observer, NULL , M2MInterface::UDP, M2MInterface::LwIP_IPv6);
+    udp6_sec = new M2MConnectionHandlerPimpl(NULL, *observer, sec3 , M2MInterface::UDP, M2MInterface::LwIP_IPv6);
+    tcp6_unsec = new M2MConnectionHandlerPimpl(NULL, *observer, NULL , M2MInterface::TCP, M2MInterface::LwIP_IPv6);
+    tcp6_sec = new M2MConnectionHandlerPimpl(NULL, *observer, sec4 , M2MInterface::TCP, M2MInterface::LwIP_IPv6);
+
+}
+
+Test_M2MConnectionHandlerPimpl_classic::~Test_M2MConnectionHandlerPimpl_classic()
+{
+    delete handler;
+    delete observer;
+    delete udp4_unsec;
+    delete tcp4_unsec;
+    delete udp6_unsec;
+    delete tcp6_unsec;
+    delete udp4_sec;
+    delete tcp4_sec;
+    delete udp6_sec;
+    delete tcp6_sec;
+    delete sec;
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_bind_connection()
+{
+    CHECK( handler->bind_connection(7) == true);
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_resolve_server_address()
+{
+
+    eventOS_stub::int8_value = 1;
+    CHECK(handler->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL) == false);
+    eventOS_stub::int8_value = 0;
+    CHECK(handler->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL) == true);
+
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_dns_handler()
+{
+
+    pal_network_stub::status = PAL_SUCCESS;
+    observer->addressReady = false;
+    pal_network_stub::uint32_value = 1;
+
+    udp4_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    udp4_unsec->dns_handler();
+    CHECK(observer->addressReady == true);
+
+    observer->addressReady = false;
+    udp6_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    udp6_unsec->dns_handler();
+    CHECK(observer->addressReady == true);
+
+    observer->addressReady = false;
+    tcp4_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    tcp4_unsec->dns_handler();
+    CHECK(observer->addressReady == true);
+
+    observer->addressReady = false;
+    tcp6_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    tcp6_unsec->dns_handler();
+    CHECK(observer->addressReady == true);
+
+    observer->addressReady = false;
+    m2msecurity_stub::int_value = M2MSecurity::Psk;
+    m2mconnectionsecurityimpl_stub::use_inc_int = true;
+    m2mconnectionsecurityimpl_stub::inc_int_value = 0;
+    udp4_sec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, sec);
+    udp4_sec->dns_handler();
+    CHECK(observer->addressReady == false);
+    CHECK(udp4_sec->is_handshake_ongoing());
+
+    /* error cases */
+
+    observer->addressReady = false;
+    observer->error = false;
+    m2msecurity_stub::int_value = M2MSecurity::Psk;
+    m2mconnectionsecurityimpl_stub::use_inc_int = false;
+    m2mconnectionsecurityimpl_stub::int_value = 0;
+    m2mconnectionsecurityimpl_stub::int_value2 = -123;
+    udp4_sec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, sec);
+    udp4_sec->dns_handler();
+    CHECK(observer->error);
+    CHECK(observer->addressReady == false);
+    CHECK(!udp4_sec->is_handshake_ongoing());
+
+    M2MConnectionSecurity *connection_security;
+
+    observer->error = false;
+    observer->addressReady = false;
+    m2msecurity_stub::int_value = M2MSecurity::Psk;
+    connection_security = udp4_sec->_security_impl;
+    udp4_sec->_security_impl = NULL;
+    udp4_sec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, sec);
+    udp4_sec->dns_handler();
+    CHECK(observer->addressReady == false);
+    CHECK(observer->error);
+    udp4_sec->_security_impl = connection_security;
+
+    observer->error = false;
+    observer->addressReady = false;
+    m2msecurity_stub::int_value = M2MSecurity::Psk;
+    m2mconnectionsecurityimpl_stub::use_inc_int = false;
+    m2mconnectionsecurityimpl_stub::int_value = 1;
+    udp4_sec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, sec);
+    udp4_sec->dns_handler();
+    CHECK(observer->addressReady == false);
+    CHECK(observer->error);
+
+    pal_network_stub::uint32_value = 0;
+
+    observer->error = false;
+    udp4_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    udp4_unsec->dns_handler();
+    CHECK(observer->addressReady == false);
+    CHECK(observer->error);
+
+    pal_network_stub::uint32_value = 1;
+
+    udp4_unsec->_network_stack = (M2MInterface::NetworkStack)123;
+    udp4_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    udp4_unsec->dns_handler();
+    CHECK(observer->addressReady == false);
+    udp4_unsec->_network_stack = M2MInterface::LwIP_IPv4;
+
+    observer->error = false;
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::new_status = PAL_ERR_GENERIC_FAILURE;
+    pal_network_stub::change_status_count = 1;
+    udp4_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    udp4_unsec->dns_handler();
+    CHECK(observer->addressReady == false);
+    CHECK(observer->error);
+
+    observer->error = false;
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::new_status = PAL_ERR_GENERIC_FAILURE;
+    pal_network_stub::change_status_count = 2;
+    udp4_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    udp4_unsec->dns_handler();
+    CHECK(observer->addressReady == false);
+    CHECK(observer->error);
+
+    observer->error = false;
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::new_status = PAL_ERR_GENERIC_FAILURE;
+    pal_network_stub::change_status_count = 3;
+    udp4_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    udp4_unsec->dns_handler();
+    CHECK(observer->addressReady == false);
+    CHECK(observer->error);
+
+    observer->error = false;
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::new_status = PAL_ERR_GENERIC_FAILURE;
+    pal_network_stub::change_status_count = 4;
+    udp4_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    udp4_unsec->dns_handler();
+    CHECK(observer->addressReady == false);
+    CHECK(observer->error);
+
+    observer->error = false;
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::new_status = PAL_ERR_GENERIC_FAILURE;
+    pal_network_stub::change_status_count = 3;
+    tcp6_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    tcp6_unsec->dns_handler();
+    CHECK(observer->addressReady == false);
+    CHECK(observer->error);
+
+    observer->error = false;
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::new_status = PAL_ERR_GENERIC_FAILURE;
+    pal_network_stub::change_status_count = 8;
+    tcp6_unsec->resolve_server_address("1", 12345, M2MConnectionObserver::LWM2MServer, NULL);
+    tcp6_unsec->dns_handler();
+    CHECK(observer->addressReady == false);
+    CHECK(observer->error);
+
+    pal_network_stub::change_status_count = 0;
+
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_send_data()
+{
+    sn_nsdl_addr_s* addr = (sn_nsdl_addr_s*)malloc(sizeof(sn_nsdl_addr_s));
+    memset(addr, 0, sizeof(sn_nsdl_addr_s));
+    uint8_t* data = (uint8_t*)malloc(5);
+
+    eventOS_stub::int8_value = 0;
+    CHECK(false == handler->send_data(data, 5 , NULL));
+
+    CHECK(false == handler->send_data(data, 0 , addr));
+
+    CHECK(false == handler->send_data(NULL, 5 , addr));
+
+    handler->_running = false;
+    CHECK(false == handler->send_data(data, 5 , addr));
+    handler->_running = true;
+
+    CHECK(true == handler->send_data(data, 5 , addr));
+
+    eventOS_stub::int8_value = 1;
+    CHECK(false == handler->send_data(data, 5 , addr));
+
+    free(data);
+    free(addr);
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_send_socket_data()
+{
+
+    uint8_t data[5] = {1};
+
+    pal_network_stub::status = PAL_SUCCESS;
+
+    udp4_unsec->_running = true;
+    tcp4_unsec->_running = true;
+    udp4_sec->_running = true;
+    tcp4_sec->_running = true;
+
+    observer->dataSent = false;
+    udp4_unsec->send_socket_data(data, sizeof(data));
+    CHECK(observer->dataSent);
+
+    observer->dataSent = false;
+    tcp4_unsec->send_socket_data(data, sizeof(data));
+    CHECK(observer->dataSent);
+
+
+    m2mconnectionsecurityimpl_stub::use_inc_int = false;
+    m2mconnectionsecurityimpl_stub::int_value = 5;
+
+    observer->dataSent = false;
+    tcp4_sec->_use_secure_connection = true;
+    tcp4_sec->send_socket_data(data, sizeof(data));
+    CHECK(observer->dataSent);
+
+    pal_network_stub::status = PAL_ERR_GENERIC_FAILURE;
+
+    observer->dataSent = false;
+    udp4_unsec->send_socket_data(data, sizeof(data));
+    CHECK(!observer->dataSent);
+
+    observer->dataSent = false;
+    tcp4_unsec->send_socket_data(data, sizeof(data));
+    CHECK(!observer->dataSent);
+
+    pal_network_stub::status = PAL_SUCCESS;
+
+    observer->dataSent = false;
+    tcp4_unsec->send_socket_data(NULL, sizeof(data));
+    CHECK(!observer->dataSent);
+
+    observer->dataSent = false;
+    tcp4_unsec->send_socket_data(data, 0);
+    CHECK(!observer->dataSent);
+
+    udp4_unsec->_running = false;
+    observer->dataSent = false;
+    udp4_unsec->send_socket_data(data, sizeof(data));
+    CHECK(!observer->dataSent);
+    udp4_unsec->_running = true;
+
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_start_listening_for_data()
+{
+    handler->start_listening_for_data();
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_receive_handler()
+{
+    
+    uint8_t data[5] = {0,0,0,1,123};
+    pal_network_stub::size = 5;
+
+    udp4_unsec->_running = true;
+    tcp4_unsec->_running = true;
+    udp4_sec->_running = true;
+    tcp4_sec->_running = true;
+
+    udp4_unsec->start_listening_for_data();
+    tcp4_unsec->start_listening_for_data();
+
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::new_status = PAL_ERR_SOCKET_WOULD_BLOCK;
+    pal_network_stub::change_status_count = 1;
+    observer->dataAvailable = false;
+    udp4_unsec->receive_handler();
+    CHECK(observer->dataAvailable);
+
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::new_status = PAL_ERR_SOCKET_WOULD_BLOCK;
+    pal_network_stub::change_status_count = 1;
+    observer->dataAvailable = false;
+    pal_network_stub::void_value = data;
+    tcp4_unsec->receive_handler();
+    CHECK(observer->dataAvailable);
+
+    pal_network_stub::status = PAL_ERR_GENERIC_FAILURE;
+    observer->dataAvailable = false;
+    observer->error = 0;
+    udp4_unsec->receive_handler();
+    CHECK(!observer->dataAvailable);
+    CHECK(observer->error);
+
+    pal_network_stub::status = PAL_ERR_SOCKET_WOULD_BLOCK;
+    observer->dataAvailable = false;
+    observer->error = 0;
+    udp4_unsec->receive_handler();
+    CHECK(!observer->dataAvailable);
+    CHECK(!observer->error);
+
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::new_status = PAL_ERR_SOCKET_WOULD_BLOCK;
+    pal_network_stub::change_status_count = 1;
+    observer->error = 0;
+    pal_network_stub::size = 3;
+    observer->dataAvailable = false;
+    pal_network_stub::void_value = data;
+    tcp4_unsec->receive_handler();
+    CHECK(!observer->dataAvailable);
+    CHECK(observer->error);
+
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::new_status = PAL_ERR_SOCKET_WOULD_BLOCK;
+    pal_network_stub::change_status_count = 1;
+    observer->dataAvailable = false;
+    data[3] = 2;
+    tcp4_unsec->receive_handler();
+    CHECK(!observer->dataAvailable);
+
+    udp4_sec->_use_secure_connection = true;
+    observer->error = 0;
+    observer->dataAvailable = false;
+    m2mconnectionsecurityimpl_stub::use_inc_int = false;
+    m2mconnectionsecurityimpl_stub::int_value = M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ;
+    udp4_sec->receive_handler();
+    CHECK(!observer->dataAvailable);
+    CHECK(!observer->error);
+
+    udp4_sec->_use_secure_connection = true;
+    observer->error = 0;
+    observer->dataAvailable = false;
+    m2mconnectionsecurityimpl_stub::use_inc_int = false;
+    m2mconnectionsecurityimpl_stub::int_value = (-123);
+    udp4_sec->receive_handler();
+    CHECK(!observer->dataAvailable);
+    CHECK(observer->error);
+
+    udp4_sec->_is_handshaking = true;
+    observer->error = 0;
+    observer->dataAvailable = false;
+    m2mconnectionsecurityimpl_stub::use_inc_int = false;
+    m2mconnectionsecurityimpl_stub::int_value = M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ;
+    udp4_sec->receive_handler();
+    CHECK(!observer->dataAvailable);
+    CHECK(!observer->error);
+
+    udp4_sec->_is_handshaking = false;
+    udp4_sec->_running = true;
+    observer->error = 0;
+    observer->dataAvailable = false;
+    m2mconnectionsecurityimpl_stub::use_inc_int = true;
+    m2mconnectionsecurityimpl_stub::inc_int_value = INT_MAX;
+    udp4_sec->receive_handler();
+    CHECK(observer->dataAvailable);
+    CHECK(observer->error);
+
+    udp4_sec->_is_handshaking = false;
+    udp4_sec->_listening = false;
+    observer->error = 0;
+    observer->dataAvailable = false;
+    m2mconnectionsecurityimpl_stub::use_inc_int = false;
+    m2mconnectionsecurityimpl_stub::int_value = M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ;
+    udp4_sec->receive_handler();
+    CHECK(!observer->dataAvailable);
+    CHECK(!observer->error);
+    udp4_sec->_listening = true;
+
+    udp4_sec->_is_handshaking = false;
+    udp4_sec->_running = false;
+    observer->error = 0;
+    observer->dataAvailable = false;
+    m2mconnectionsecurityimpl_stub::use_inc_int = false;
+    m2mconnectionsecurityimpl_stub::int_value = M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ;
+    udp4_sec->receive_handler();
+    CHECK(!observer->dataAvailable);
+    CHECK(!observer->error);
+    udp4_sec->_running = true;
+
+}
+
+
+void Test_M2MConnectionHandlerPimpl_classic::test_stop_listening()
+{
+    handler->stop_listening();
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_send_to_socket()
+{
+    const char buf[] = "hello";
+    handler->send_to_socket((unsigned char *)&buf, 5);
+
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::size = 5;
+
+    udp4_unsec->_running = true;
+    tcp4_unsec->_running = true;
+
+    CHECK(udp4_unsec->send_to_socket((unsigned char *)&buf, 5) == 5);
+
+    CHECK(tcp4_unsec->send_to_socket((unsigned char *)&buf, 5) == 5);
+
+    udp4_unsec->_running = false;
+    CHECK(udp4_unsec->send_to_socket((unsigned char *)&buf, 5) < 0);
+    udp4_unsec->_running = true;
+
+    pal_network_stub::status = PAL_ERR_GENERIC_FAILURE;
+
+    CHECK(udp4_unsec->send_to_socket((unsigned char *)&buf, 5) < 0);
+
+    CHECK(tcp4_unsec->send_to_socket((unsigned char *)&buf, 5) < 0);
+
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_receive_from_socket()
+{
+    unsigned char *buf = (unsigned char *)malloc(6);
+
+    pal_network_stub::status = PAL_SUCCESS;
+    pal_network_stub::size = 5;
+
+    udp4_unsec->_running = true;
+    tcp4_unsec->_running = true;
+
+    CHECK(udp4_unsec->receive_from_socket(buf, 5) == 5);
+
+    CHECK(tcp4_unsec->receive_from_socket(buf, 5) == 5);
+
+    udp4_unsec->_running = false;
+    CHECK(udp4_unsec->receive_from_socket(buf, 5) < 0);
+    udp4_unsec->_running = true;
+
+    pal_network_stub::status = PAL_ERR_GENERIC_FAILURE;
+
+    CHECK(udp4_unsec->receive_from_socket(buf, 5) < 0);
+
+    CHECK(tcp4_unsec->receive_from_socket(buf, 5) < 0);
+
+    pal_network_stub::status = PAL_ERR_SOCKET_WOULD_BLOCK;
+
+    CHECK(udp4_unsec->receive_from_socket(buf, 5) == M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ);
+
+    CHECK(tcp4_unsec->receive_from_socket(buf, 5) == M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ);
+
+    free(buf);
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_handle_connection_error()
+{
+    handler->handle_connection_error(4);
+    CHECK(observer->error == true);
+}
+
+extern "C" void connection_event_handler(arm_event_s *event);
+
+void Test_M2MConnectionHandlerPimpl_classic::test_connection_event_handler()
+{
+    arm_event_s event;
+  
+    event.data_ptr = malloc(1);
+    event.event_data = 1;
+
+    event.event_type = M2MConnectionHandlerPimpl::ESocketReadytoRead;
+    connection_event_handler(&event);
+
+    event.event_type = M2MConnectionHandlerPimpl::ESocketDnsHandler;
+    connection_event_handler(&event);
+
+    event.event_type = M2MConnectionHandlerPimpl::ESocketSend;
+    connection_event_handler(&event);
+
+    event.event_type = 1234;
+    connection_event_handler(&event);
+
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_set_platform_network_handler()
+{
+    pal_network_stub::status = PAL_SUCCESS;
+    handler->set_platform_network_handler((void*)1);
+
+    pal_network_stub::status = PAL_ERR_GENERIC_FAILURE;
+    handler->set_platform_network_handler((void*)1);
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_receive_handshake_handler()
+{
+
+    udp4_sec->_is_handshaking = true;
+    observer->error = 0;
+    observer->addressReady = 0;
+    m2mconnectionsecurityimpl_stub::use_inc_int = false;
+    m2mconnectionsecurityimpl_stub::int_value = M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ;
+    udp4_sec->receive_handshake_handler();
+    CHECK(!observer->error);
+    CHECK(!observer->addressReady);
+
+    udp4_sec->_is_handshaking = true;
+    observer->error = 0;
+    observer->addressReady = 0;
+    m2mconnectionsecurityimpl_stub::use_inc_int = false;
+    m2mconnectionsecurityimpl_stub::int_value = 0;
+    udp4_sec->receive_handshake_handler();
+    CHECK(!observer->error);
+    CHECK(observer->addressReady);
+
+    udp4_sec->_is_handshaking = true;
+    observer->error = 0;
+    observer->addressReady = 0;
+    m2mconnectionsecurityimpl_stub::use_inc_int = false;
+    m2mconnectionsecurityimpl_stub::int_value = (-123);
+    udp4_sec->receive_handshake_handler();
+    CHECK(observer->error);
+    CHECK(!observer->addressReady);
+
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_claim_mutex()
+{
+
+    handler->claim_mutex();
+
+}
+
+void Test_M2MConnectionHandlerPimpl_classic::test_release_mutex()
+{
+
+    handler->release_mutex();
+
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mconnectionhandlerpimpl_classic/test_m2mconnectionhandlerpimpl_classic.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_CONNECTION_HANDLER_PIMPL_CLASSIC_H
+#define TEST_M2M_CONNECTION_HANDLER_PIMPL_CLASSIC_H
+
+#include "mbed-client-classic/m2mconnectionhandlerpimpl.h"
+
+class M2MConnection_TestObserver;
+
+class Test_M2MConnectionHandlerPimpl_classic
+{
+public:
+    Test_M2MConnectionHandlerPimpl_classic();
+
+    virtual ~Test_M2MConnectionHandlerPimpl_classic();
+
+    void test_bind_connection();
+
+    void test_resolve_server_address();
+  
+    void test_dns_handler();
+
+    void test_send_data();
+
+    void test_send_socket_data();
+
+    void test_start_listening_for_data();
+
+    void test_data_receive();
+
+    void test_receive_from_socket();
+
+    void test_stop_listening();
+
+    void test_send_to_socket();
+
+    void test_receive_handler();
+
+    void test_handle_connection_error();
+
+    void test_connection_event_handler();
+
+    void test_set_platform_network_handler();
+
+    void test_receive_handshake_handler();
+
+    void test_claim_mutex();
+
+    void test_release_mutex();
+
+    M2MConnectionHandlerPimpl* handler;
+    M2MConnection_TestObserver *observer;
+
+    M2MConnectionHandlerPimpl *udp4_unsec;
+    M2MConnectionHandlerPimpl *udp4_sec;
+    M2MConnectionHandlerPimpl *tcp4_unsec;
+    M2MConnectionHandlerPimpl *tcp4_sec;
+    M2MConnectionHandlerPimpl *udp6_unsec;
+    M2MConnectionHandlerPimpl *udp6_sec;
+    M2MConnectionHandlerPimpl *tcp6_unsec;
+    M2MConnectionHandlerPimpl *tcp6_sec;
+    M2MSecurity* sec;
+
+};
+
+#endif // TEST_M2M_CONNECTION_HANDLER_PIMPL_CLASSIC_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,13 @@
+include ../makefile_defines.txt
+
+COMPONENT_NAME = m2mtimer_classic_unit
+SRC_FILES = \
+        ../../../../source/m2mtimer.cpp
+
+TEST_SRC_FILES = \
+	main.cpp \
+        m2mtimertest.cpp \
+        test_m2mtimer.cpp \
+        ../stub/m2mtimerpimpl_stub.cpp \
+
+include ../MakefileWorker.mk
Binary file mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/m2mtimer_linux_unit_tests has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/m2mtimertest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mtimer.h"
+
+TEST_GROUP(M2MTimer)
+{
+  Test_M2MTimer* m2m_timer;
+
+  void setup()
+  {
+    m2m_timer = new Test_M2MTimer();
+  }
+  void teardown()
+  {
+    delete m2m_timer;
+  }
+};
+
+TEST(M2MTimer, Create)
+{
+    CHECK(m2m_timer != NULL);
+}
+
+TEST(M2MTimer, start_timer)
+{
+    m2m_timer->test_start_timer();
+}
+
+TEST(M2MTimer, stop_timer)
+{
+    m2m_timer->test_stop_timer();
+}
+
+TEST(M2MTimer, test_start_dtls_timer)
+{
+    m2m_timer->test_start_dtls_timer();
+}
+
+TEST(M2MTimer, test_is_intermediate_interval_passed)
+{
+    m2m_timer->test_is_intermediate_interval_passed();
+}
+
+TEST(M2MTimer, test_is_total_interval_passed)
+{
+    m2m_timer->test_is_total_interval_passed();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MTimer);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/test_m2mtimer.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mtimer.h"
+#include "m2mtimerpimpl_stub.h"
+
+class TestObserver : public M2MTimerObserver {
+
+public:
+    TestObserver(){}
+    virtual ~TestObserver(){}
+    void timer_expired(M2MTimerObserver::Type){
+        visited = true;
+    }
+    bool visited;
+
+};
+
+Test_M2MTimer::Test_M2MTimer()
+{
+    observer = new TestObserver();
+    timer = new M2MTimer(*observer);
+}
+
+Test_M2MTimer::~Test_M2MTimer()
+{
+    m2mtimerpimpl_stub::clear();
+    delete observer;
+    delete timer;
+}
+
+void Test_M2MTimer::test_start_timer()
+{
+    timer->start_timer(100, M2MTimerObserver::Notdefined,true);
+    CHECK(m2mtimerpimpl_stub::visited == true);
+}
+
+void Test_M2MTimer::test_stop_timer()
+{
+    timer->stop_timer();
+    CHECK(m2mtimerpimpl_stub::visited == true);
+}
+
+void Test_M2MTimer::test_start_dtls_timer()
+{
+    timer->start_dtls_timer(100, 110);
+    CHECK(m2mtimerpimpl_stub::visited == true);
+}
+
+void Test_M2MTimer::test_is_intermediate_interval_passed()
+{
+    m2mtimerpimpl_stub::bool_value = true;
+    CHECK(true == timer->is_intermediate_interval_passed());
+}
+
+void Test_M2MTimer::test_is_total_interval_passed()
+{
+    m2mtimerpimpl_stub::bool_value = true;
+    CHECK(true == timer->is_total_interval_passed());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimer_classic/test_m2mtimer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_TIMER_H
+#define TEST_M2M_TIMER_H
+
+#include "m2mtimer.h"
+
+class TestObserver;
+
+class Test_M2MTimer
+{
+public:
+    Test_M2MTimer();
+
+    virtual ~Test_M2MTimer();
+
+    void test_start_timer();
+
+    void test_stop_timer();
+
+    void test_start_dtls_timer();
+
+    void test_is_intermediate_interval_passed();
+
+    void test_is_total_interval_passed();
+
+    M2MTimer* timer;
+    TestObserver* observer;
+};
+
+#endif // TEST_M2M_TIMER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimerpimpl_classic/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,15 @@
+include ../makefile_defines.txt
+
+COMPONENT_NAME = m2mtimerimpl_linux_unit
+SRC_FILES = \
+        ../../../../source/m2mtimerpimpl.cpp
+
+TEST_SRC_FILES = \
+	main.cpp \
+        m2mtimerpimpl_classic_test.cpp \
+        test_m2mtimerpimpl_classic.cpp \
+        ../stub/ns_hal_init_stub.cpp \
+        ../stub/eventOS_stub.cpp \
+
+include ../MakefileWorker.mk
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimerpimpl_classic/m2mtimerpimpl_classic_test.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mtimerpimpl_classic.h"
+
+TEST_GROUP(M2MTimerPimpl_classic)
+{
+  Test_M2MTimerPimpl_classic* m2m_timer;
+
+  void setup()
+  {
+      m2m_timer = new Test_M2MTimerPimpl_classic();
+  }
+  void teardown()
+  {
+      delete m2m_timer;
+  }
+};
+
+TEST(M2MTimerPimpl_classic, Create)
+{
+    CHECK(m2m_timer != NULL);
+}
+
+TEST(M2MTimerPimpl_classic, start_timer)
+{
+    m2m_timer->test_start_timer();
+}
+
+TEST(M2MTimerPimpl_classic, stop_timer)
+{
+    m2m_timer->test_stop_timer();
+}
+
+TEST(M2MTimerPimpl_classic, timer_expired)
+{
+    m2m_timer->test_timer_expired();
+}
+
+TEST(M2MTimerPimpl_classic, test_start_dtls_timer)
+{
+    m2m_timer->test_start_dtls_timer();
+}
+
+TEST(M2MTimerPimpl_classic, test_is_intermediate_interval_passed)
+{
+    m2m_timer->test_is_intermediate_interval_passed();
+}
+
+TEST(M2MTimerPimpl_classic, test_is_total_interval_passed)
+{
+    m2m_timer->test_is_total_interval_passed();
+}
+
+TEST(M2MTimerPimpl_classic, tasklet_func)
+{
+    m2m_timer->test_tasklet_func();
+}
+
+TEST(M2MTimerPimpl_classic, start_still_left_timer)
+{
+    m2m_timer->test_start_still_left_timer();
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimerpimpl_classic/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+    return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MTimerPimpl_classic);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimerpimpl_classic/test_m2mtimerpimpl_classic.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mtimerpimpl_classic.h"
+#include "eventOS_event.h"
+#include <unistd.h>
+
+extern void expired(union sigval sigval);
+class TestObserver : public M2MTimerObserver {
+
+public:
+    TestObserver(){}
+    virtual ~TestObserver(){}
+    void timer_expired(M2MTimerObserver::Type){
+        visited = true;
+    }
+    bool visited;
+
+};
+
+Test_M2MTimerPimpl_classic::Test_M2MTimerPimpl_classic()
+{
+    observer = new TestObserver();
+    timer = new M2MTimerPimpl(*observer);
+}
+
+Test_M2MTimerPimpl_classic::~Test_M2MTimerPimpl_classic()
+{
+    delete observer;
+    delete timer;
+}
+
+void Test_M2MTimerPimpl_classic::test_start_timer()
+{
+    timer->start_timer(100,M2MTimerObserver::Notdefined,true);
+    CHECK(!timer->_still_left);
+    timer->start_timer(10000000000,M2MTimerObserver::Notdefined,true);
+    CHECK(timer->_still_left);
+}
+
+void Test_M2MTimerPimpl_classic::test_stop_timer()
+{
+    //common_stub::int_value = 0;
+    timer->start_timer(100,M2MTimerObserver::Notdefined,true);
+    timer->stop_timer();
+    timer->start_timer(100,M2MTimerObserver::Notdefined,false);
+    timer->stop_timer();
+    //CHECK(timer->_timer_specs.it_value.tv_sec == 0);
+    //CHECK(timer->_timer_specs.it_value.tv_nsec == 0);
+}
+
+void Test_M2MTimerPimpl_classic::test_timer_expired()
+{
+    observer->visited = false;
+    timer->timer_expired();
+    CHECK(observer->visited == true);
+
+    timer->_single_shot = false;
+    timer->timer_expired();
+    CHECK(observer->visited == true);
+}
+
+void Test_M2MTimerPimpl_classic::test_start_dtls_timer()
+{
+    timer->start_dtls_timer(10, 100, M2MTimerObserver::Dtls);
+}
+
+void Test_M2MTimerPimpl_classic::test_is_intermediate_interval_passed()
+{
+    timer->start_dtls_timer(2500, 10000, M2MTimerObserver::Dtls);
+    CHECK(false == timer->is_intermediate_interval_passed());
+    timer->timer_expired();
+    CHECK(true == timer->is_intermediate_interval_passed());
+}
+
+void Test_M2MTimerPimpl_classic::test_is_total_interval_passed()
+{
+    timer->start_dtls_timer(250, 2000, M2MTimerObserver::Dtls);
+    timer->timer_expired();
+    CHECK(false == timer->is_total_interval_passed());
+    timer->timer_expired();
+    CHECK(true == timer->is_total_interval_passed());
+}
+
+extern "C" void tasklet_func(arm_event_s *event);
+
+void Test_M2MTimerPimpl_classic::test_tasklet_func()
+{
+    arm_event_s event;
+
+    event.event_type = 10;
+    event.event_id = (-1);
+
+    observer->visited = false;
+    tasklet_func(&event);
+    CHECK(!observer->visited);
+
+    event.event_id = timer->get_timer_id();
+
+    tasklet_func(&event);
+    CHECK(observer->visited);
+
+    observer->visited = false;
+    timer->_still_left = 1;
+    tasklet_func(&event);
+    CHECK(!observer->visited);
+}
+
+void Test_M2MTimerPimpl_classic::test_start_still_left_timer()
+{
+    observer->visited = false;
+    timer->_still_left = (uint64_t)INT32_MAX + 1;
+    timer->start_still_left_timer();
+    CHECK(!observer->visited);
+    CHECK(timer->_still_left);
+
+    timer->start_still_left_timer();
+    CHECK(!observer->visited);
+    CHECK(!timer->_still_left);
+
+    timer->_still_left = 0;
+    timer->_single_shot = false;
+    timer->start_still_left_timer();
+    CHECK(observer->visited);
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/m2mtimerpimpl_classic/test_m2mtimerpimpl_classic.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_TIMER_IMPL_CLASSIC_H
+#define TEST_M2M_TIMER_IMPL_CLASSIC_H
+
+#include "mbed-client-classic/m2mtimerpimpl.h"
+
+class TestObserver;
+
+class Test_M2MTimerPimpl_classic
+{
+public:
+    Test_M2MTimerPimpl_classic();
+
+    virtual ~Test_M2MTimerPimpl_classic();
+
+    void test_start_timer();
+
+    void test_stop_timer();
+
+    void test_timer_expired();
+
+    void test_start_dtls_timer();
+
+    void test_is_intermediate_interval_passed();
+
+    void test_is_total_interval_passed();
+
+    void test_tasklet_func();
+    void test_start_still_left_timer();
+
+    M2MTimerPimpl* timer;
+    TestObserver* observer;
+};
+
+#endif // TEST_M2M_TIMER_IMPL_CLASSIC_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/makefile_defines.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,31 @@
+#--- Inputs ----#
+CPPUTEST_HOME = /usr
+CPPUTEST_USE_EXTENSIONS = Y
+CPPUTEST_USE_VPATH = Y
+CPPUTEST_USE_GCOV = Y
+CPP_PLATFORM = gcc
+INCLUDE_DIRS =\
+  .\
+  ../common\
+  ../stub\
+  ../../../../source/include\
+  ../../../../source\
+  ../../../../\
+  ../../../../test_modules/\
+  ../../../../test_modules/mbed-client-pal/Source/PAL-Impl/Services-API/\
+  ../../../../test_modules/mbed-client/mbed-client\
+  ../../../../test_modules/mbed-client\
+  ../../../../test_modules/mbed-client/source\
+  ../../../../test_modules/mbed-client/source/include\
+  ../../../../test_modules/mbed-client-c\
+  ../../../../test_modules/mbed-client-c/source/libNsdl\
+  ../../../../test_modules/mbed-client-c/source/libNsdl/src/include\
+  ../../../../test_modules/nanostack-libservice\
+  ../../../../test_modules/nanostack-libservice/mbed-client-libservice\
+  ../../../../test_modules/sal-stack-nanostack-eventloop/nanostack-event-loop/\
+  ../../../../test_modules/mbed-trace\
+  ../../../../test_modules/mbed-os/features/FEATURE_COMMON_PAL/nanostack-hal-mbed-cmsis-rtos\
+  /usr/include\
+  $(CPPUTEST_HOME)/include\
+
+CPPUTESTFLAGS = -D__thumb2__ -w
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/eventOS_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "eventOS_scheduler.h"
+#include "eventOS_event.h"
+#include "eventOS_stub.h"
+
+int8_t eventOS_stub::int8_value;
+
+void eventOS_scheduler_mutex_wait(void){}
+
+void eventOS_scheduler_mutex_release(void){}
+
+int8_t eventOS_event_handler_create(void (*handler_func_ptr)(arm_event_s *), uint8_t init_event_type)
+{
+    return eventOS_stub::int8_value;
+}
+
+int8_t eventOS_event_send(arm_event_s *event)
+{
+    if(event->data_ptr && !eventOS_stub::int8_value)
+    {
+        free(event->data_ptr);
+    }
+    return eventOS_stub::int8_value;
+}
+
+extern "C" int8_t eventOS_event_timer_request(uint8_t snmessage, uint8_t event_type, int8_t tasklet_id, uint32_t time)
+{
+    return eventOS_stub::int8_value;
+}
+
+extern "C" int8_t eventOS_event_timer_cancel(uint8_t snmessage, int8_t tasklet_id)
+{
+    return eventOS_stub::int8_value;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/eventOS_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef EVENTOS_STUB_H
+#define EVENTOS_STUB_H
+
+namespace eventOS_stub
+{
+    extern int8_t int8_value;
+}
+
+#endif // EVENTOS_STUB_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mbase_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,336 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mbase_stub.h"
+
+#include <assert.h>
+
+uint8_t m2mbase_stub::uint8_value;
+uint16_t m2mbase_stub::uint16_value;
+uint32_t m2mbase_stub::uint32_value;
+uint16_t m2mbase_stub::int_value;
+int32_t m2mbase_stub::name_id_value;
+
+bool m2mbase_stub::bool_value;
+String *m2mbase_stub::string_value;
+
+M2MBase::BaseType m2mbase_stub::base_type;
+M2MBase::Operation m2mbase_stub::operation;
+M2MBase::Mode m2mbase_stub::mode_value;
+M2MBase::Observation m2mbase_stub::observation_level_value;
+
+void *m2mbase_stub::void_value;
+M2MObservationHandler *m2mbase_stub::observe;
+M2MReportHandler *m2mbase_stub::report;
+bool m2mbase_stub::is_value_updated_function_set;
+
+
+void m2mbase_stub::clear()
+{
+    int_value = 0;
+    uint8_value = 0;
+    uint16_value = 0;
+    uint32_value = 0;
+    string_value = NULL;
+    name_id_value = -1;
+    mode_value = M2MBase::Static;
+    base_type = M2MBase::Object;
+    observation_level_value = M2MBase::None;
+    bool_value = false;
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+    void_value = NULL;
+    observe = NULL;
+    report = NULL;
+    is_value_updated_function_set = false;
+}
+
+M2MBase::M2MBase(const String &/*resource_name*/,
+                 M2MBase::Mode /*mode*/)
+{
+}
+
+M2MBase& M2MBase::operator=(const M2MBase& other)
+{
+    if (this != &other) { // protect against invalid self-assignment
+    }
+    return *this;
+}
+
+M2MBase::M2MBase(const M2MBase& other)
+{
+    this->operator=(other);
+}
+
+M2MBase::~M2MBase()
+{
+}
+
+void M2MBase::set_operation(M2MBase::Operation opr)
+{
+    m2mbase_stub::operation = opr;
+}
+
+void M2MBase::set_interface_description(const String &/*desc*/)
+{
+}
+
+void M2MBase::set_resource_type(const String &/*res_type*/)
+{
+}
+
+void M2MBase::set_coap_content_type(const uint8_t /*con_type*/)
+{
+}
+
+void M2MBase::set_instance_id(const uint16_t /*inst_id*/)
+{
+}
+
+void M2MBase::set_observation_number(const uint16_t /*observation_number*/)
+{
+}
+
+void M2MBase::set_max_age(const uint32_t /*max_age*/)
+{
+}
+
+M2MBase::Operation M2MBase::operation() const
+{
+    return m2mbase_stub::operation;
+}
+
+const String& M2MBase::name() const
+{
+    return *m2mbase_stub::string_value;
+}
+
+int32_t M2MBase::name_id() const
+{
+    return m2mbase_stub::name_id_value;
+}
+
+uint16_t M2MBase::instance_id() const
+{
+    return m2mbase_stub::int_value;
+}
+
+const String& M2MBase::interface_description() const
+{
+    return *m2mbase_stub::string_value;
+}
+
+const String& M2MBase::resource_type() const
+{
+    return *m2mbase_stub::string_value;
+}
+
+uint8_t M2MBase::coap_content_type() const
+{
+    return m2mbase_stub::uint8_value;
+}
+
+uint32_t M2MBase::max_age() const
+{
+    return m2mbase_stub::uint32_value;
+}
+
+void M2MBase::set_observable(bool /*observable*/)
+{
+}
+
+void M2MBase::add_observation_level(M2MBase::Observation)
+{
+}
+
+void M2MBase::remove_observation_level(M2MBase::Observation)
+{
+}
+
+void M2MBase::set_under_observation(bool /*observed*/,
+                                   M2MObservationHandler */*handler*/)
+{
+}
+
+void M2MBase::set_observation_token(const uint8_t */*token*/,
+                                    const uint8_t /*length*/)
+{
+}
+
+bool M2MBase::is_observable() const
+{
+    return m2mbase_stub::bool_value;
+}
+
+M2MBase::Observation M2MBase::observation_level() const
+{
+    return m2mbase_stub::observation_level_value;
+}
+
+void M2MBase::get_observation_token(uint8_t *&/*token*/,
+                                    uint32_t &/*length*/)
+{
+}
+
+void M2MBase::set_base_type(M2MBase::BaseType /*type*/)
+{
+}
+
+M2MBase::BaseType M2MBase::base_type() const
+{
+    return m2mbase_stub::base_type;
+}
+
+M2MBase::Mode M2MBase::mode() const
+{
+    return m2mbase_stub::mode_value;
+}
+
+uint16_t M2MBase::observation_number() const
+{
+    return m2mbase_stub::uint16_value;
+}
+
+void M2MBase::remove_resource_from_coap(const String &)
+{
+}
+
+void M2MBase::remove_object_from_coap()
+{
+}
+
+bool M2MBase::handle_observation_attribute(char *&query)
+{
+    return m2mbase_stub::bool_value;
+}
+
+void M2MBase::observation_to_be_sent(m2m::Vector<uint16_t>, bool)
+{
+}
+
+void *M2MBase::memory_alloc(uint32_t size)
+{
+    if(size)
+        return malloc(size);
+    else
+        return 0;
+}
+
+void M2MBase::memory_free(void *ptr)
+{
+    if(ptr)
+        free(ptr);
+}
+
+uint8_t* M2MBase::alloc_string_copy(const uint8_t* source, uint32_t size)
+{
+    assert(source != NULL);
+
+    uint8_t* result = (uint8_t*)memory_alloc(size + 1);
+    if (result) {
+        memcpy(result, source, size);
+        result[size] = '\0';
+    }
+    return result;
+}
+
+uint8_t* M2MBase::alloc_copy(const uint8_t* source, uint32_t size)
+{
+    assert(source != NULL);
+
+    uint8_t* result = (uint8_t*)memory_alloc(size);
+    if (result) {
+        memcpy(result, source, size);
+    }
+    return result;
+}
+
+M2MReportHandler* M2MBase::report_handler()
+{
+    return m2mbase_stub::report;
+}
+
+M2MObservationHandler* M2MBase::observation_handler()
+{
+    return m2mbase_stub::observe;
+}
+
+sn_coap_hdr_s* M2MBase::handle_get_request(nsdl_s */*nsdl*/,
+                                           sn_coap_hdr_s */*received_coap_header*/,
+                                           M2MObservationHandler */*observation_handler*/)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+sn_coap_hdr_s* M2MBase::handle_put_request(nsdl_s */*nsdl*/,
+                                           sn_coap_hdr_s */*received_coap_header*/,
+                                           M2MObservationHandler */*observation_handler*/,
+                                           bool &execute_value_updated)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+sn_coap_hdr_s* M2MBase::handle_post_request(nsdl_s */*nsdl*/,
+                                            sn_coap_hdr_s */*received_coap_header*/,
+                                            M2MObservationHandler */*observation_handler*/,
+                                            bool &, sn_nsdl_addr_s *address)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+void M2MBase::set_register_uri( bool register_uri)
+{
+}
+
+bool M2MBase::register_uri()
+{
+    return m2mbase_stub::bool_value;
+}
+
+void M2MBase::set_uri_path(const String &uri_path)
+{
+}
+
+const String& M2MBase::uri_path() const
+{
+    return *m2mbase_stub::string_value;
+}
+
+bool M2MBase::is_under_observation() const
+{
+    return m2mbase_stub::bool_value;
+}
+
+void M2MBase::set_value_updated_function(value_updated_callback callback)
+{
+
+}
+
+void M2MBase::set_value_updated_function(value_updated_callback2 callback)
+{
+
+}
+
+bool M2MBase::is_value_updated_function_set()
+{
+    return m2mbase_stub::is_value_updated_function_set;
+}
+
+void M2MBase::execute_value_updated(const String& name)
+{
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mbase_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_BASE_STUB_H
+#define M2M_BASE_STUB_H
+
+#include "m2mbase.h"
+
+//some internal test related stuff
+namespace m2mbase_stub
+{
+    extern uint8_t uint8_value;
+    extern uint16_t uint16_value;
+    extern uint32_t uint32_value;
+    extern uint16_t int_value;
+    extern int32_t name_id_value;
+    extern String *string_value;
+    extern bool bool_value;
+    extern M2MBase::BaseType base_type;
+    extern M2MBase::Mode mode_value;
+    extern M2MBase::Operation operation;
+    extern void *void_value;
+    extern M2MObservationHandler *observe;
+    extern M2MReportHandler *report;
+    extern M2MBase::Observation observation_level_value;
+    extern bool is_value_updated_function_set;
+    void clear();
+}
+
+#endif // M2M_BASE_STUB_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mconnectionhandlerpimpl_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mconnectionhandlerpimpl_stub.h"
+#include "mbed-client-classic/m2mconnectionhandlerpimpl.h"
+#include "m2mconnectionsecurity.h"
+
+int m2mconnectionhandlerpimpl_stub::int_value;
+uint16_t m2mconnectionhandlerpimpl_stub::uint_value;
+bool m2mconnectionhandlerpimpl_stub::bool_value;
+
+void m2mconnectionhandlerpimpl_stub::clear()
+{
+    int_value = -1;
+    uint_value = 0;
+    bool_value = false;
+}
+
+M2MConnectionHandlerPimpl::M2MConnectionHandlerPimpl(M2MConnectionHandler* base, M2MConnectionObserver &observer,
+                                                     M2MConnectionSecurity* sec,
+                                                     M2MInterface::BindingMode,
+                                                     M2MInterface::NetworkStack)
+:_observer(observer)
+{
+    if( sec ){
+        delete sec;
+        sec = NULL;
+    }
+}
+
+M2MConnectionHandlerPimpl::~M2MConnectionHandlerPimpl()
+{
+}
+
+bool M2MConnectionHandlerPimpl::bind_connection(const uint16_t)
+{
+    return m2mconnectionhandlerpimpl_stub::bool_value;
+}
+
+bool M2MConnectionHandlerPimpl::resolve_server_address(const String&,
+                                                  const uint16_t,
+                                                  M2MConnectionObserver::ServerType,
+                                                  const M2MSecurity* )
+{
+    return m2mconnectionhandlerpimpl_stub::bool_value;
+}
+
+bool M2MConnectionHandlerPimpl::start_listening_for_data()
+{
+    return m2mconnectionhandlerpimpl_stub::bool_value;
+}
+
+bool M2MConnectionHandlerPimpl::send_data(uint8_t *,
+                                     uint16_t ,
+                                     sn_nsdl_addr_s *)
+{
+    return m2mconnectionhandlerpimpl_stub::bool_value;
+}
+
+void M2MConnectionHandlerPimpl::stop_listening()
+{
+}
+
+int M2MConnectionHandlerPimpl::send_to_socket(const unsigned char *, size_t ){
+    return m2mconnectionhandlerpimpl_stub::int_value;
+}
+
+int M2MConnectionHandlerPimpl::receive_from_socket(unsigned char *buf, size_t len){
+    return m2mconnectionhandlerpimpl_stub::int_value;
+}
+//void M2MConnectionHandlerPimpl::data_receive(void *object)
+//{
+//
+//}
+
+void M2MConnectionHandlerPimpl::handle_connection_error(int )
+{
+
+}
+
+void M2MConnectionHandlerPimpl::claim_mutex(void){}
+
+void M2MConnectionHandlerPimpl::release_mutex(void){}
+
+void M2MConnectionHandlerPimpl::set_platform_network_handler(void*){}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mconnectionhandlerpimpl_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_CONNECTION_HANDLER_PIMPL_STUB_H
+#define M2M_CONNECTION_HANDLER_PIMPL_STUB_H
+
+#include "m2mconnectionhandler.h"
+
+//some internal test related stuff
+namespace m2mconnectionhandlerpimpl_stub
+{
+    extern int int_value;
+    extern uint16_t uint_value;
+    extern bool bool_value;
+    void clear();
+}
+
+#endif // M2M_CONNECTION_HANDLER_PIMPL_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mconnectionsecurity_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "m2mconnectionhandler.h"
+#include "m2mconnectionsecurity.h"
+#include "m2mtimer.h"
+#include "m2msecurity.h"
+#include <string.h>
+#include "m2mconnectionsecurity_stub.h"
+
+bool m2mconnectionsecurityimpl_stub::use_inc_int;
+int m2mconnectionsecurityimpl_stub::inc_int_value;
+int m2mconnectionsecurityimpl_stub::int_value;
+int m2mconnectionsecurityimpl_stub::int_value2;
+
+void m2mconnectionsecurityimpl_stub::clear()
+{
+    int_value = -1;
+    use_inc_int = false;
+    inc_int_value = 0;
+    int_value2 = 0;
+}
+
+M2MConnectionSecurity::M2MConnectionSecurity(M2MConnectionSecurity::SecurityMode mode)
+{
+
+}
+
+M2MConnectionSecurity::~M2MConnectionSecurity(){
+}
+
+void M2MConnectionSecurity::reset(){
+}
+
+int M2MConnectionSecurity::init(const M2MSecurity *security){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::connect(M2MConnectionHandler* connHandler){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::start_connecting_non_blocking(M2MConnectionHandler* connHandler)
+{
+
+    if(m2mconnectionsecurityimpl_stub::int_value2)
+    {
+        return m2mconnectionsecurityimpl_stub::int_value2;
+    }
+
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::continue_connecting()
+{
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::send_message(unsigned char *message, int len){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::read(unsigned char* buffer, uint16_t len){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mconnectionsecurity_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_CONNECTION_SECURITY_IMPL_STUB_H
+#define M2M_CONNECTION_SECURITY_IMPL_STUB_H
+
+//some internal test related stuff
+namespace m2mconnectionsecurityimpl_stub
+{
+    extern int int_value;
+    extern int int_value2;
+    extern bool use_inc_int;
+    extern int inc_int_value;
+    void clear();
+}
+
+#endif // M2M_CONNECTION_SECURITY_IMPL_STUB_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mobject_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mobject_stub.h"
+
+u_int16_t m2mobject_stub::int_value;
+bool m2mobject_stub::bool_value;
+M2MObjectInstance* m2mobject_stub::inst;
+
+// The statically initialized object list must be bigh enough to cater
+// for all the tests, or the utest framework will complain for memory leak.
+M2MObjectInstanceList m2mobject_stub::instance_list(12);
+
+M2MBase::BaseType m2mobject_stub::base_type;
+sn_coap_hdr_s *m2mobject_stub::header;
+
+void m2mobject_stub::clear()
+{
+    int_value = 0;
+    bool_value = false;
+    m2mobject_stub::base_type = M2MBase::Object;
+    instance_list.clear();
+    header = NULL;
+}
+
+M2MObject::M2MObject(const String &object_name)
+: M2MBase(object_name,M2MBase::Dynamic)
+{
+}
+
+M2MObject::~M2MObject()
+{
+}
+
+M2MObject& M2MObject::operator=(const M2MObject& )
+{
+    return *this;
+}
+
+M2MObject::M2MObject(const M2MObject& other)
+: M2MBase(other)
+{
+    *this = other;
+}
+
+M2MObjectInstance* M2MObject::create_object_instance(uint16_t instance_id)
+{
+    return m2mobject_stub::inst;
+}
+
+bool M2MObject::remove_object_instance(uint16_t)
+{
+    return m2mobject_stub::bool_value;
+}
+
+M2MObjectInstance* M2MObject::object_instance(uint16_t) const
+{
+    return m2mobject_stub::inst;
+}
+
+const M2MObjectInstanceList& M2MObject::instances() const
+{
+    return m2mobject_stub::instance_list;
+}
+
+uint16_t M2MObject::instance_count() const
+{
+    return m2mobject_stub::int_value;
+}
+
+M2MBase::BaseType M2MObject::base_type() const
+{
+    return m2mobject_stub::base_type;
+}
+
+void M2MObject::add_observation_level(M2MBase::Observation)
+{
+
+}
+
+void M2MObject::remove_observation_level(M2MBase::Observation)
+{
+
+}
+
+sn_coap_hdr_s* M2MObject::handle_get_request(nsdl_s *,
+                                  sn_coap_hdr_s *,
+                                  M2MObservationHandler *)
+{
+    return m2mobject_stub::header;
+}
+
+sn_coap_hdr_s* M2MObject::handle_put_request(nsdl_s *,
+                                  sn_coap_hdr_s *,
+                                  M2MObservationHandler *,
+                                  bool &execute)
+{
+    execute = m2mobject_stub::bool_value;
+    return m2mobject_stub::header;
+}
+
+sn_coap_hdr_s* M2MObject::handle_post_request(nsdl_s *,
+                                   sn_coap_hdr_s *,
+                                   M2MObservationHandler *,
+                                   bool &,
+                                   sn_nsdl_addr_s *)
+{
+    return m2mobject_stub::header;
+}
+
+void M2MObject::notification_update(uint16_t obj_instance_id)
+{
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mobject_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_OBJECT_STUB_H
+#define M2M_OBJECT_STUB_H
+
+#include "m2mobject.h"
+#include "m2mobjectinstance.h"
+
+//some internal test related stuff
+namespace m2mobject_stub
+{
+    extern u_int16_t int_value;
+    extern M2MObjectInstance* inst;
+    extern bool bool_value;
+    extern M2MObjectInstanceList instance_list;
+    extern M2MBase::BaseType base_type;
+    extern sn_coap_hdr_s *header;
+    void clear();
+}
+
+#endif // M2M_OBJECT_STUB_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mresource_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mresource_stub.h"
+
+uint32_t m2mresource_stub::int_value;
+uint8_t* m2mresource_stub::delayed_token;
+uint8_t m2mresource_stub::delayed_token_len;
+bool m2mresource_stub::bool_value;
+
+// The statically initialized list must be bigh enough to cater
+// for all the tests, or the utest framework will complain for memory leak.
+M2MResourceInstanceList m2mresource_stub::list(12);
+
+M2MResourceInstance *m2mresource_stub::instance;
+sn_coap_hdr_s *m2mresource_stub::header;
+void m2mresource_stub::clear()
+{
+    int_value = 0;
+    delayed_token = NULL;
+    delayed_token_len = 0;
+    bool_value = false;
+    list.clear();
+    instance = NULL;
+}
+
+M2MResource& M2MResource::operator=(const M2MResource& other)
+{
+    return *this;
+}
+
+M2MResource::M2MResource(const M2MResource& other)
+: M2MResourceInstance(other)
+{
+    *this = other;
+}
+
+M2MResource::M2MResource(M2MObjectInstanceCallback &object_instance_callback,
+                         const String &resource_name,
+                         const String &resource_type,
+                         M2MResourceInstance::ResourceType type,
+                         const uint8_t *value,
+                         const uint8_t value_length,
+                         const uint16_t object_instance_id,
+                         const String &object_name,
+                         bool)
+: M2MResourceInstance(resource_name, resource_type, type, value, value_length,
+                      object_instance_callback, object_instance_id, object_name)
+{
+}
+
+M2MResource::M2MResource(M2MObjectInstanceCallback &object_instance_callback,
+                         const String &resource_name,
+                         const String &resource_type,
+                         M2MResourceInstance::ResourceType type,
+                         bool,
+                         const uint16_t object_instance_id,
+                         const String &object_name,
+                         bool)
+: M2MResourceInstance(resource_name, resource_type, type,
+                      object_instance_callback, object_instance_id, object_name)
+{
+}
+
+M2MResource::~M2MResource()
+{
+}
+
+bool M2MResource::supports_multiple_instances() const
+{
+    return m2mresource_stub::bool_value;
+}
+
+void M2MResource::get_delayed_token(unsigned char *&token, unsigned char &token_len)
+{
+    token_len = 0;
+    if(token) {
+        free(token);
+        token = NULL;
+    }
+    token = (uint8_t *)malloc(m2mresource_stub::delayed_token_len);
+    if(token) {
+        token_len = m2mresource_stub::delayed_token_len;
+        memcpy((uint8_t *)token, (uint8_t *)m2mresource_stub::delayed_token, token_len);
+    }
+}
+
+bool M2MResource::remove_resource_instance(uint16_t inst_id)
+{
+    return m2mresource_stub::bool_value;
+}
+
+M2MResourceInstance* M2MResource::resource_instance(uint16_t inst_id) const
+{
+    return m2mresource_stub::instance;
+}
+
+const M2MResourceInstanceList& M2MResource::resource_instances() const
+{
+    return m2mresource_stub::list;
+}
+
+uint16_t M2MResource::resource_instance_count() const
+{
+    return m2mresource_stub::int_value;
+}
+
+bool M2MResource::handle_observation_attribute(char *&query)
+{
+    return m2mresource_stub::bool_value;
+}
+
+void M2MResource::add_resource_instance(M2MResourceInstance *)
+{
+}
+
+void M2MResource::add_observation_level(M2MBase::Observation)
+{
+}
+
+void M2MResource::remove_observation_level(M2MBase::Observation)
+{
+}
+
+void M2MResource::notification_update()
+{
+}
+
+sn_coap_hdr_s* M2MResource::handle_get_request(nsdl_s *,
+                                               sn_coap_hdr_s *,
+                                               M2MObservationHandler *)
+{
+    return m2mresource_stub::header;
+}
+
+sn_coap_hdr_s* M2MResource::handle_put_request(nsdl_s *,
+                                               sn_coap_hdr_s *,
+                                               M2MObservationHandler *,
+                                               bool &)
+{
+    return m2mresource_stub::header;
+}
+
+sn_coap_hdr_s* M2MResource::handle_post_request(nsdl_s *,
+                                               sn_coap_hdr_s *,
+                                               M2MObservationHandler *,
+                                               bool &, sn_nsdl_addr_s *)
+{
+    return m2mresource_stub::header;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mresource_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_RESOURCE_STUB_H
+#define M2M_RESOURCE_STUB_H
+
+#include "m2mresource.h"
+
+//some internal test related stuff
+namespace m2mresource_stub
+{
+    extern uint32_t int_value;    
+    extern uint8_t* delayed_token;
+    extern uint8_t delayed_token_len;
+    extern bool bool_value;
+    extern M2MResourceInstanceList list;
+    extern M2MResourceInstance *instance;
+    void clear();
+    extern sn_coap_hdr_s *header;
+}
+
+#endif // M2M_RESOURCE_STUB_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mresourceinstance_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,229 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mresourceinstance_stub.h"
+
+uint32_t m2mresourceinstance_stub::int_value;
+bool m2mresourceinstance_stub::bool_value;
+String *m2mresourceinstance_stub::string_value;
+M2MResourceInstance::ResourceType m2mresourceinstance_stub::resource_type;
+sn_coap_hdr_s *m2mresourceinstance_stub::header;
+uint8_t* m2mresourceinstance_stub::value;
+M2MBase::BaseType m2mresourceinstance_stub::base_type;
+
+
+void m2mresourceinstance_stub::clear()
+{
+    int_value = 0;
+    bool_value = false;
+    resource_type = M2MResourceInstance::STRING;
+    header = NULL;
+    value = NULL;
+    base_type = M2MBase::ResourceInstance;
+    string_value = NULL;
+}
+
+M2MResourceInstance& M2MResourceInstance::operator=(const M2MResourceInstance&)
+{
+    return *this;
+}
+
+M2MResourceInstance::M2MResourceInstance(const M2MResourceInstance& other)
+: M2MBase(other),
+  _object_instance_callback(other._object_instance_callback)/*,
+  _object_instance_id(other._object_instance_id),
+  _object_name(other._object_name)*/
+{
+    this->operator=(other);
+}
+
+M2MResourceInstance::M2MResourceInstance(const String &res_name,
+                                         const String &,
+                                         M2MResourceInstance::ResourceType,
+                                         M2MObjectInstanceCallback &object_instance_callback,
+                                         const uint16_t /*object_instance_id*/,
+                                         const String &/*object_name*/)
+: M2MBase(res_name,
+          M2MBase::Dynamic),
+  _object_instance_callback(object_instance_callback)/*,
+_object_instance_id(object_instance_id),
+_object_name(object_name)*/
+{
+    m2mresourceinstance_stub::base_type = M2MBase::ResourceInstance;
+}
+
+M2MResourceInstance::M2MResourceInstance(const String &res_name,
+                                         const String &,
+                                         M2MResourceInstance::ResourceType,
+                                         const uint8_t *,
+                                         const uint8_t,
+                                         M2MObjectInstanceCallback &object_instance_callback,
+                                         const uint16_t/* object_instance_id*/,
+                                         const String &/*object_name*/)
+: M2MBase(res_name,
+          M2MBase::Static),
+_object_instance_callback(object_instance_callback)/*,
+  _object_instance_id(object_instance_id),
+  _object_name(object_name)*/
+{
+}
+
+M2MResourceInstance::~M2MResourceInstance()
+{
+}
+
+M2MBase::BaseType M2MResourceInstance::base_type() const
+{
+    return m2mresourceinstance_stub::base_type;
+}
+
+M2MResourceInstance::ResourceType M2MResourceInstance::resource_instance_type() const
+{
+    return m2mresourceinstance_stub::resource_type;
+}
+
+bool M2MResourceInstance::handle_observation_attribute(char *&)
+{
+    return m2mresourceinstance_stub::bool_value;
+}
+
+void M2MResourceInstance::set_execute_function(execute_callback)
+{
+}
+
+bool M2MResourceInstance::set_value(const uint8_t *,
+                                    const uint32_t )
+{
+    return m2mresourceinstance_stub::bool_value;
+}
+
+bool M2MResourceInstance::set_value(int64_t value)
+{
+    return m2mresourceinstance_stub::bool_value;
+}
+
+
+void M2MResourceInstance::clear_value()
+{
+    if (m2mresourceinstance_stub::value) {
+        free(m2mresourceinstance_stub::value);
+        m2mresourceinstance_stub::value = NULL;
+        m2mresourceinstance_stub::int_value = 0;
+    }
+}
+
+void M2MResourceInstance::execute(void *)
+{
+}
+
+void M2MResourceInstance::get_value(uint8_t *&value, uint32_t &value_length)
+{
+    value_length = 0;
+    if(value) {
+        free(value);
+        value = NULL;
+    }
+    value = (uint8_t *)malloc(m2mresourceinstance_stub::int_value);
+    if(value) {
+        value_length = m2mresourceinstance_stub::int_value;
+        memcpy((uint8_t *)value, (uint8_t *)m2mresourceinstance_stub::value, value_length);
+    }
+}
+
+int M2MResourceInstance::get_value_int()
+{
+    // Note: this is a copy-paste from the original version, as the tests
+    // set only m2mresourceinstance_stub::value.
+
+    int value_int = 0;
+    // Get the value and convert it into integer. This is not the most
+    // efficient way, as it takes pointless heap copy to get the zero termination.
+    uint8_t* buffer = NULL;
+    uint32_t length;
+    get_value(buffer,length);
+    if(buffer) {
+        value_int = atoi((const char*)buffer);
+        free(buffer);
+    }
+    return value_int;
+}
+
+String M2MResourceInstance::get_value_string() const
+{
+    // XXX: do a better constructor to avoid pointless malloc
+    String value;
+    if (m2mresourceinstance_stub::value) {
+        value.append_raw((char*)m2mresourceinstance_stub::value, m2mresourceinstance_stub::int_value);
+    }
+
+    return value;
+}
+
+uint8_t* M2MResourceInstance::value() const
+{
+    return m2mresourceinstance_stub::value;
+}
+
+uint32_t M2MResourceInstance::value_length() const
+{
+    return m2mresourceinstance_stub::int_value;
+}
+
+sn_coap_hdr_s* M2MResourceInstance::handle_get_request(nsdl_s *,
+                                               sn_coap_hdr_s *,
+                                               M2MObservationHandler *)
+{
+    return m2mresourceinstance_stub::header;
+}
+
+sn_coap_hdr_s* M2MResourceInstance::handle_put_request(nsdl_s *,
+                                               sn_coap_hdr_s *,
+                                               M2MObservationHandler *,
+                                               bool &)
+{
+    return m2mresourceinstance_stub::header;
+}
+
+void M2MResourceInstance::set_resource_observer(M2MResourceCallback *callback)
+{
+
+}
+const String& M2MResourceInstance::object_name() const
+{
+    return *m2mresourceinstance_stub::string_value;
+}
+
+uint16_t M2MResourceInstance::object_instance_id() const
+{
+    return m2mresourceinstance_stub::int_value;
+}
+
+void M2MResourceInstance::set_execute_function(execute_callback_2 callback)
+{
+}
+
+M2MBlockMessage* M2MResourceInstance::block_message() const
+{
+
+}
+
+void M2MResourceInstance::set_incoming_block_message_callback(incoming_block_message_callback callback)
+{
+}
+
+void M2MResourceInstance::set_outgoing_block_message_callback(outgoing_block_message_callback callback)
+{
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mresourceinstance_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_RESOURCE_INSTANCE_STUB_H
+#define M2M_RESOURCE_INSTANCE_STUB_H
+
+#include "m2mresourceinstance.h"
+
+//some internal test related stuff
+namespace m2mresourceinstance_stub
+{
+    extern uint32_t int_value;
+    extern uint8_t* value;
+    extern bool bool_value;
+    extern String *string_value;
+    extern M2MResourceInstance::ResourceType resource_type;
+    extern M2MBase::BaseType base_type;
+    extern sn_coap_hdr_s *header;
+    void clear();
+}
+
+#endif // M2M_RESOURCE_INSTANCE_STUB_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2msecurity_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2msecurity_stub.h"
+
+bool m2msecurity_stub::has_value;
+uint32_t m2msecurity_stub::int_value;
+bool m2msecurity_stub::bool_value;
+String *m2msecurity_stub::string_value;
+M2MResource* m2msecurity_stub::resource;
+
+void m2msecurity_stub::clear()
+{
+    has_value = false;
+    int_value = -1;
+    bool_value = false;
+    string_value = NULL;
+    resource = NULL;
+}
+
+M2MSecurity::M2MSecurity(ServerType ser_type)
+: M2MObject("0"),
+ _server_type(ser_type),
+ _server_instance(NULL)
+{
+}
+
+M2MSecurity::~M2MSecurity()
+{
+}
+
+M2MResource* M2MSecurity::create_resource(SecurityResource, uint32_t)
+{
+    return m2msecurity_stub::resource;
+}
+
+bool M2MSecurity::delete_resource(SecurityResource)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource,
+                                     const String &)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource,
+                                     uint32_t)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource,
+                                     const uint8_t *,
+                                     const uint16_t)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+String M2MSecurity::resource_value_string(SecurityResource) const
+{
+    return *m2msecurity_stub::string_value;
+}
+
+uint32_t M2MSecurity::resource_value_buffer(SecurityResource,
+                               uint8_t *&value) const
+{
+    if( m2msecurity_stub::has_value ){
+        value = (uint8_t *)malloc(5);
+        return 5;
+    }
+    return m2msecurity_stub::int_value;
+}
+
+
+uint32_t M2MSecurity::resource_value_int(SecurityResource) const
+{
+    return m2msecurity_stub::int_value;
+}
+
+bool M2MSecurity::is_resource_present(SecurityResource) const
+{
+    return m2msecurity_stub::bool_value;
+}
+
+uint16_t M2MSecurity::total_resource_count() const
+{
+    return (uint16_t)m2msecurity_stub::int_value;
+}
+
+M2MSecurity::ServerType M2MSecurity::server_type() const
+{
+    return _server_type;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2msecurity_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_SECURITY_STUB_H
+#define M2M_SECURITY_STUB_H
+
+#include "m2msecurity.h"
+
+//some internal test related stuff
+namespace m2msecurity_stub
+{
+    extern bool has_value;
+    extern uint32_t int_value;
+    extern bool bool_value;
+    extern String *string_value;
+    extern M2MResource* resource;
+    void clear();
+}
+
+#endif // M2M_SECURITY_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mstring_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,429 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mstring.h"
+#include <string.h> // strlen
+#include <stdlib.h> // malloc, realloc
+#include <assert.h>
+#include <algorithm> // min
+
+namespace m2m {
+
+const String::size_type String::npos = static_cast<size_t>(-1);
+
+char* String::strdup(const char* s)
+{
+    const size_t len = strlen(s)+1;
+    char *p2 = static_cast<char*>(malloc(len));
+    memcpy(p2, s, len);
+    allocated_ = len;
+    size_ = len-1;
+    return p2;
+}
+
+String::String()
+    : p( strdup("") )
+{
+}
+
+String::~String()
+{
+    free(p);
+    p = 0;
+}
+
+String::String(const String& s)
+    : p(0)
+{
+    if( &s != NULL ) {
+        p = static_cast<char*>(malloc(s.size_ + 1));
+
+        allocated_ = s.size_ + 1;
+        size_      = s.size_;
+        memcpy(p, s.p, size_ + 1);
+    }
+}
+
+String::String(const char* s)
+    : p(strdup(s))
+{
+}
+
+String::String(const char* str, size_t n)
+{
+    p = static_cast<char*>(malloc(n + 1));
+
+    allocated_ = n + 1;
+    size_      = n;
+    memcpy(p, str, n);
+    p[n] = 0;
+}
+
+String& String::operator=(const char* s)
+{
+    if ( p != s ) {
+        // s could point into our own string, so we have to allocate a new string
+        const size_t len = strlen(s);
+        char* copy = (char*) malloc( len + 1);
+        memmove(copy, s, len+1); // trailing 0
+        free( p );
+        p = copy;
+        size_ = len;
+        allocated_ = len+1;
+    }
+    return *this;
+}
+
+String& String::operator=(const String& s)
+{
+    return operator=(s.p);
+}
+
+String& String::operator+=(const String& s)
+{
+    if (s.size_ > 0) {
+        this->reserve(size_ + s.size_);
+        memmove(p+size_, s.p, s.size_+1); // trailing 0
+        size_ += s.size_;
+    }
+    return *this;
+}
+
+// since p and s may overlap, we have to copy our own string first
+String& String::operator+=(const char* s)
+{
+    const size_type lens = strlen(s);
+    if (lens > 0) {
+        if (size_ + lens + 1 <= allocated_) {
+            memmove(p+size_, s, lens+1); // trailing 0
+            size_ += lens;
+        } else {
+            String s2( *this );  // copy own data
+            s2.reserve(size_ + lens);
+            memmove(s2.p+size_, s, lens+1); // trailing 0
+            s2.size_ = size_ + lens;
+            this->swap( s2 );
+        }
+    }
+    return *this;
+}
+
+String& String::operator+=(const char c)
+{
+    push_back(c);
+    return *this;
+}
+
+void String::push_back(const char c) {
+
+    if (size_ == allocated_ - 1) {
+        size_t more =  (allocated_* 3) / 2; // factor 1.5
+        if ( more < 4 ) more = 4;
+        reserve( size_ + more );
+    }
+
+    p[size_] = c;
+    size_++;
+    p[size_] = 0;
+}
+
+bool String::operator==(const char* s) const
+{
+    if( s == NULL ) {
+        if( p == NULL ) {
+            return true;
+        }
+        return false;
+    }
+    bool ret = strcmp(p, s);
+    return !ret;
+}
+
+bool String::operator==(const String& s) const
+{
+    bool ret = strcmp(p, s.p);
+    return !ret;
+}
+
+void String::clear()
+{
+    size_ = 0;
+    p[0]  = 0;
+}
+
+String String::substr(const size_type pos, size_type length) const
+{
+    String s;
+    const size_type len = size_;
+
+    if ( pos <= len ) {
+
+        size_type remain = len - pos;
+
+        if ( length > remain )
+            length = remain;
+
+        s.reserve( length );
+
+        memcpy(s.p, p + pos, length);
+        s.p[length] = '\0';
+        s.size_ = length;
+    }
+    return s;
+}
+
+
+// checked access, accessing the NUL at end is allowed
+char String::at(const size_type i) const
+{
+    if ( i <= strlen(p) ) {
+        return p[i];
+    } else {
+        return '\0';
+    }
+}
+
+String& String::erase(size_type pos, size_type len)
+{
+    if (len > 0) {
+
+        if ( pos < size_ ) { // user must not remove trailing 0
+
+            size_type s2 = size_;
+            size_type remain = s2 - pos - len;
+
+            if (remain > 0) {
+                // erase by overwriting
+                memmove(p + pos, p + pos + len, remain);
+            }
+
+            //if ( remain < 0 ) remain = 0;
+
+            // remove unused space
+            this->resize( pos+remain );
+
+        }
+    }
+    return *this;
+}
+
+String& String::append( const char* str, size_type n) {
+    if (str && n > 0) {
+        size_t lens = strlen(str);
+        if (n > lens)
+            n = lens;
+        size_t newlen = size_ + n;
+        this->reserve( newlen );
+        memmove(p+size_, str, n); // p and s.p MAY overlap
+        p[newlen] = 0; // add NUL termination
+        size_ = newlen;
+    }
+    return *this;
+}
+
+String& String::append_raw( const char* str, size_type n) {
+    if (str && n > 0) {
+        size_t newlen = size_ + n;
+        this->reserve( newlen );
+        memmove(p+size_, str, n); // p and s.p MAY overlap
+        p[newlen] = 0; // add NUL termination
+        size_ = newlen;
+    }
+    return *this;
+}
+
+void String::append_int(int param) {
+
+    // max len of "-9223372036854775808" plus zero termination
+    char conv_buff[20+1];
+
+    int len = itoa_c(param, conv_buff);
+    append_raw(conv_buff, len);
+}
+
+int String::compare( size_type pos, size_type len, const String& str ) const {
+    int r = -1;
+    if (pos <= size_) {
+        if ( len > size_ - pos)
+            len = size_ - pos; // limit len to available length
+
+        const size_type osize = str.size();
+        const size_type len2   = std::min(len, osize);
+        r = strncmp( p + pos, str.p, len2);
+        if (r==0) // equal so far, now compare sizes
+            r = len < osize ? -1 : ( len == osize ? 0 : +1 );
+    }
+    return r;
+}
+
+int String::compare( size_type pos, size_type len, const char* str ) const {
+    int r = -1;
+    if (pos <= size_) {
+
+        if ( len > size_ - pos)
+            len = size_ - pos; // limit len to available length
+
+        const size_type osize = strlen(str);
+        const size_type len2   = std::min(len, osize);
+        r = strncmp( p + pos, str, len2);
+        if (r==0) // equal so far, now compare sizes
+            r = len < osize ? -1 : ( len == osize ? 0 : +1 );
+    }
+    return r;
+}
+
+int String::find_last_of(char c) const {
+    int r = -1;
+    char *v;
+    v = strrchr(p,c);
+    if (v != NULL) {
+        r = 0;
+        char* i = p;
+        while (v != i) {
+            i++;
+            r++;
+        }
+    }
+    return r;
+}
+
+void String::new_realloc( size_type n) {
+    if (n > 0 ) {
+        char* pnew = static_cast<char*>(realloc(p, n)); // could return NULL
+        if (pnew)
+            p = pnew;
+    }
+}
+
+void String::reserve( const size_type n) {
+    if (n >= allocated_ ) {
+        this->new_realloc(n + 1);
+        allocated_ = n + 1;
+    }
+}
+
+void String::resize( const size_type n) {
+    this->resize( n, 0 );
+}
+
+void String::resize( const size_type n, const char c) {
+    if (n < size_ ) {
+        p[n] = 0;
+        size_ = n;
+    }
+    else if (n >  size_ ) {
+        this->reserve( n );
+        for (size_type i=size_; i < n; ++i )
+            p[i] = c;
+        p[n] = 0;
+        size_ = n;
+    }
+}
+
+void String::swap( String& s ) {
+    std::swap( allocated_, s.allocated_ );
+    std::swap( size_,      s.size_      );
+    std::swap( p,          s.p          );
+}
+
+
+// Comparison
+bool operator<( const String& s1, const String& s2 ) {
+    return strcmp( s1.c_str(), s2.c_str() ) < 0;
+}
+
+void reverse(char s[], uint32_t length)
+{
+    uint32_t i, j;
+    char c;
+
+    for (i = 0, j = length-1; i<j; i++, j--) {
+        c = s[i];
+        s[i] = s[j];
+        s[j] = c;
+    }
+}
+
+uint32_t itoa_c (int64_t n, char s[])
+{
+    int64_t sign;
+    uint32_t i;
+
+    if ((sign = n) < 0)
+        n = -n;
+
+    i = 0;
+
+    do {
+        s[i++] = n % 10 + '0';
+    }
+    while ((n /= 10) > 0);
+
+    if (sign < 0)
+        s[i++] = '-';
+
+    s[i] = '\0';
+
+    m2m::reverse(s, i);
+    return i;
+}
+
+uint8_t* String::convert_integer_to_array(int64_t value, uint8_t &size, uint8_t *array, uint32_t array_size)
+{
+    uint8_t* buffer = NULL;
+    size = 0;
+    if (array) {
+        value = String::convert_array_to_integer(array, array_size);
+    }
+
+    if(value < 0xFF) {
+        size = 1;
+    } else if(value < 0xFFFF) {
+        size = 2;
+    } else if(value < 0xFFFFFF) {
+        size = 3;
+    } else if(value < 0xFFFFFFFF) {
+        size = 4;
+    } else if(value < 0xFFFFFFFFFF) {
+        size = 5;
+    } else if(value < 0xFFFFFFFFFFFF) {
+        size = 6;
+    } else if(value < 0xFFFFFFFFFFFFFF) {
+        size = 7;
+    } else {
+        size = 8;
+    }
+
+    buffer = (uint8_t*)malloc(size);
+    if (buffer) {
+        for (int i = 0; i < size; i++) {
+            buffer[i] = (value >> ((size - i - 1) * 8));
+        }
+    } else {
+        size = 0;
+    }
+    return buffer;
+}
+
+int64_t String::convert_array_to_integer(uint8_t *value, uint32_t size)
+{
+    int64_t temp_64 = 0;
+    for (int i = size - 1; i >= 0; i--) {
+        temp_64 += (uint64_t)(*value++) << i * 8;
+    }
+    return temp_64;
+}
+
+} // namespace
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mtimer_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mtimer_stub.h"
+
+bool m2mtimer_stub::bool_value;
+bool m2mtimer_stub::total_bool_value;
+
+void m2mtimer_stub::clear()
+{
+    bool_value = false;
+    total_bool_value = false;
+}
+
+// Prevents the use of assignment operator
+M2MTimer& M2MTimer::operator=(const M2MTimer& /*other*/)
+{
+    return *this;
+}
+
+// Prevents the use of copy constructor
+M2MTimer::M2MTimer(const M2MTimer& other)
+: _observer(other._observer)
+{
+    *this = other;
+}
+
+M2MTimer::M2MTimer(M2MTimerObserver& observer)
+: _observer(observer)
+{
+}
+
+M2MTimer::~M2MTimer()
+{
+}
+
+void M2MTimer::start_timer(uint64_t /*interval*/,
+                           M2MTimerObserver::Type /*type*/,
+                           bool /*single_shot*/)
+{
+}
+
+void M2MTimer::start_dtls_timer(uint64_t , uint64_t , M2MTimerObserver::Type )
+{
+}
+
+void M2MTimer::stop_timer()
+{
+}
+
+
+bool M2MTimer::is_intermediate_interval_passed(){
+    return m2mtimer_stub::bool_value;
+}
+
+bool M2MTimer::is_total_interval_passed(){
+    return m2mtimer_stub::total_bool_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mtimer_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_TIMER_STUB_H
+#define M2M_TIMER_STUB_H
+
+#include "m2mtimer.h"
+
+//some internal test related stuff
+namespace m2mtimer_stub
+{
+    extern bool bool_value;
+    extern bool total_bool_value;
+    void clear();
+}
+
+#endif // M2M_TIMER_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mtimerpimpl_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "m2mtimerpimpl_stub.h"
+bool m2mtimerpimpl_stub::bool_value;
+bool m2mtimerpimpl_stub::visited;
+
+void m2mtimerpimpl_stub::clear()
+{
+    bool_value = false;
+    visited = false;
+}
+
+M2MTimerPimpl::M2MTimerPimpl(M2MTimerObserver& observer)
+: _observer(observer)
+{
+
+}
+
+M2MTimerPimpl::~M2MTimerPimpl()
+{
+}
+
+void M2MTimerPimpl::start_timer( uint64_t interval,
+                                 M2MTimerObserver::Type type,
+                                 bool single_shot)
+{
+
+     m2mtimerpimpl_stub::visited = true;
+
+}
+
+
+
+void M2MTimerPimpl::start_dtls_timer(uint64_t intermediate_interval, uint64_t total_interval, M2MTimerObserver::Type type)
+{
+
+    m2mtimerpimpl_stub::visited = true;
+
+}
+
+void M2MTimerPimpl::stop_timer()
+{
+    m2mtimerpimpl_stub::visited = true;
+
+}
+
+void M2MTimerPimpl::timer_expired()
+{
+}
+
+bool M2MTimerPimpl::is_intermediate_interval_passed()
+{
+    return m2mtimerpimpl_stub::bool_value;
+}
+
+bool M2MTimerPimpl::is_total_interval_passed()
+{
+    return m2mtimerpimpl_stub::bool_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/m2mtimerpimpl_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_TIMER_PIMPL_STUB_H
+#define M2M_TIMER_PIMPL_STUB_H
+
+#include "mbed-client-classic/m2mtimerpimpl.h"
+
+//some internal test related stuff
+namespace m2mtimerpimpl_stub
+{
+    extern bool bool_value;
+    extern bool visited;
+    void clear();
+}
+
+#endif // M2M_TIMER_IMPL_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/ns_hal_init_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ns_hal_init.h"
+
+void ns_hal_init(void *heap, size_t h_size, void (*passed_fptr)(heap_fail_t), mem_stat_t *info_ptr){}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/pal_network_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,189 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string.h>
+#include "pal_network_stub.h"
+
+palStatus_t pal_network_stub::status;
+palStatus_t pal_network_stub::new_status;
+uint32_t pal_network_stub::change_status_count;
+
+palSocket_t pal_network_stub::socket;
+palSocketAddress_t pal_network_stub::socket_address;
+palIpV4Addr_t pal_network_stub::ipv4_address;
+palIpV6Addr_t pal_network_stub::ipv6_address;
+size_t pal_network_stub::size;
+uint32_t pal_network_stub::uint32_value;
+void *pal_network_stub::void_value;
+
+static palStatus_t get_pal_status(void)
+{
+    palStatus_t status_to_return;
+
+    status_to_return = pal_network_stub::status;
+
+    if(pal_network_stub::change_status_count){
+
+        pal_network_stub::change_status_count--;
+
+        if(!pal_network_stub::change_status_count){
+            pal_network_stub::status = pal_network_stub::new_status;
+        }
+    }
+
+    return status_to_return;
+
+}
+
+palStatus_t pal_registerNetworkInterface(void* networkInterfaceContext, uint32_t* interfaceIndex)
+{
+    *interfaceIndex = pal_network_stub::uint32_value;
+    return get_pal_status();
+}
+
+palStatus_t pal_setSockAddrPort(palSocketAddress_t* address, uint16_t port)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_setSockAddrIPV4Addr(palSocketAddress_t* address, palIpV4Addr_t ipV4Addr)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_setSockAddrIPV6Addr(palSocketAddress_t* address, palIpV6Addr_t ipV6Addr)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_getSockAddrIPV4Addr(const palSocketAddress_t* address, palIpV4Addr_t ipV4Addr)
+{
+    memcpy(ipV4Addr, pal_network_stub::ipv4_address, sizeof(pal_network_stub::ipv4_address));
+    return get_pal_status();
+}
+
+palStatus_t pal_getSockAddrIPV6Addr(const palSocketAddress_t* address, palIpV6Addr_t ipV6Addr)
+{
+    memcpy(ipV6Addr, pal_network_stub::ipv6_address, sizeof(pal_network_stub::ipv6_address));
+    return get_pal_status();
+}
+
+palStatus_t pal_getSockAddrPort(const palSocketAddress_t* address, uint16_t* port)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_socket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palSocket_t* socket)
+{
+    memcpy(socket, pal_network_stub::socket, sizeof(pal_network_stub::socket));
+    return get_pal_status();
+}
+
+palStatus_t pal_getSocketOptions(palSocket_t socket, palSocketOptionName_t optionName, void* optionValue, palSocketLength_t* optionLength)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_setSocketOptions(palSocket_t socket, int optionName, const void* optionValue, palSocketLength_t optionLength)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_bind(palSocket_t socket, palSocketAddress_t* myAddress, palSocketLength_t addressLength)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_receiveFrom(palSocket_t socket, void* buffer, size_t length, palSocketAddress_t* from, palSocketLength_t* fromLength, size_t* bytesReceived)
+{
+    if(pal_network_stub::void_value){
+    	memcpy(buffer, pal_network_stub::void_value, pal_network_stub::size);
+    }
+    *bytesReceived = pal_network_stub::size;
+    return get_pal_status();
+}
+
+palStatus_t pal_sendTo(palSocket_t socket, const void* buffer, size_t length, const palSocketAddress_t* to, palSocketLength_t toLength, size_t* bytesSent)
+{
+    *bytesSent = pal_network_stub::size;
+    return get_pal_status();
+}
+
+palStatus_t pal_close(palSocket_t* socket)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_getNumberOfNetInterfaces(uint32_t* numInterfaces)
+{
+    *numInterfaces = pal_network_stub::uint32_value;
+    return get_pal_status();
+}
+
+palStatus_t pal_getNetInterfaceInfo(uint32_t interfaceNum, palNetInterfaceInfo_t* interfaceInfo)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_socketMiniSelect(const palSocket_t socketsToCheck[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t numberOfSockets, pal_timeVal_t* timeout,
+								uint8_t palSocketStatus[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t* numberOfSocketsSet)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_listen(palSocket_t socket, int backlog)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_accept(palSocket_t socket, palSocketAddress_t* address, palSocketLength_t* addressLen, palSocket_t* acceptedSocket)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_connect(palSocket_t socket, const palSocketAddress_t* address, palSocketLength_t addressLen)
+{
+    return get_pal_status();
+}
+
+palStatus_t pal_recv(palSocket_t socket, void* buf, size_t len, size_t* recievedDataSize)
+{
+    if(pal_network_stub::void_value){
+    	memcpy(buf, pal_network_stub::void_value, pal_network_stub::size);
+    }
+    *recievedDataSize = pal_network_stub::size;
+    return get_pal_status();
+}
+
+palStatus_t pal_send(palSocket_t socket, const void* buf, size_t len, size_t* sentDataSize)
+{
+    *sentDataSize = pal_network_stub::size;
+    return get_pal_status();
+}
+
+palStatus_t pal_asynchronousSocket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palAsyncSocketCallback_t callback, palSocket_t* socket)
+{
+    //memcpy(socket, pal_network_stub::socket, sizeof(pal_network_stub::socket));
+    callback();
+    return get_pal_status();
+}
+
+palStatus_t pal_getAddressInfo(const char* url, palSocketAddress_t* address, palSocketLength_t* addressLength)
+{
+    memcpy(address, &pal_network_stub::socket_address, sizeof(pal_network_stub::socket_address));
+    *addressLength = sizeof(pal_network_stub::socket_address);
+    return get_pal_status();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/pal_network_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef PAL_NETWORK_STUB_H
+#define PAL_NETWORK_STUB_H
+
+#include "pal_network.h"
+
+namespace pal_network_stub
+{
+    extern palStatus_t status;
+    extern palStatus_t new_status;
+    extern uint32_t change_status_count; //status changed to new_status after this turns to 0
+
+    extern palSocket_t socket;
+    extern palSocketAddress_t socket_address;
+    extern palIpV4Addr_t ipv4_address;
+    extern palIpV6Addr_t ipv6_address;
+    extern size_t size;
+    extern uint32_t uint32_value;
+    extern void *void_value;
+
+}
+
+#endif // PAL_NETWORK_STUB_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/pal_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "pal_stub.h"
+
+palStatus_t pal_stub::status;
+
+palStatus_t pal_init()
+{
+    return pal_stub::status;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/test/mbed-client-classic/unittest/stub/pal_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef PAL_STUB_H
+#define PAL_STUB_H
+
+#include "pal.h"
+
+namespace pal_stub
+{
+    extern palStatus_t status;   
+}
+
+#endif // PAL_STUB_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-classic/xsl_script.sh	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# Copyright (c) 2015 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# * http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+echo 
+echo "Creating report"
+echo 
+
+echo '<?xml version="1.0" encoding="UTF-8" ?>
+<?xml-stylesheet type="text/xsl" href="junit_xsl.xslt"?>
+<list>' >> lcov/index.xml
+
+for f in lcov/results/*.xml
+do
+name=${f##*/}
+echo '<entry name="results/'"$name"'" />'>> lcov/index.xml
+done
+
+echo '</list>' >> lcov/index.xml
+
+echo
+echo "Report created to lcov/index.xml (outputs html)"
+echo
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls.lib	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-client-mbed-tls/#7e1b6d81503843ee98192e11f31df12508938c9d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/FETCH_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,18 @@
+0205be29fcfcbeb729fbdac52c30d726d34c9160	not-for-merge	branch 'cert-expiration-verify' of https://github.com/ARMmbed/mbed-client-mbed-tls
+eaf04f0792a7820fea833f48d7c870b44366fe49	not-for-merge	branch 'cert_parse_fix' of https://github.com/ARMmbed/mbed-client-mbed-tls
+0e12068b07f1a700536a9d28816bdd3a80450743	not-for-merge	branch 'cert_parsing_fix' of https://github.com/ARMmbed/mbed-client-mbed-tls
+e5ac927acf771a7e2b38928f0aff88c66eeaa1b4	not-for-merge	branch 'compiler_warning_fixes' of https://github.com/ARMmbed/mbed-client-mbed-tls
+88fb05322b85baf730446ccffbb75d59b785add4	not-for-merge	branch 'demo_port' of https://github.com/ARMmbed/mbed-client-mbed-tls
+4a2759500c587ab01f5f00f5584d5439ed1a9c81	not-for-merge	branch 'fix_compiling_errors' of https://github.com/ARMmbed/mbed-client-mbed-tls
+621cbdfc9ffcc299bbaf531bf9c1d59bbb2f88ef	not-for-merge	branch 'fix_entropy_init' of https://github.com/ARMmbed/mbed-client-mbed-tls
+8f9feda2361ce19db54ea03c9186c8337f0bb201	not-for-merge	branch 'fix_unittests_ip6tos' of https://github.com/ARMmbed/mbed-client-mbed-tls
+cd30631df5df484dc71af366c537d8653b9f46a2	not-for-merge	branch 'handle_mbedtls_handshake_errors' of https://github.com/ARMmbed/mbed-client-mbed-tls
+4b47e994ee65f224d2362a40a6eee8b83a231857	not-for-merge	branch 'handshake_while_loop' of https://github.com/ARMmbed/mbed-client-mbed-tls
+fbc90ed9d4a3b115fc5b4f857c47eb2779c30b51	not-for-merge	branch 'makefile_compilation' of https://github.com/ARMmbed/mbed-client-mbed-tls
+60a6d56e4ebd30fd3fba8375037e3a8ef0017f28	not-for-merge	branch 'master' of https://github.com/ARMmbed/mbed-client-mbed-tls
+2e9ec86aef7fc3c628596113ac513bac86df9bcd	not-for-merge	branch 'mbed-cloud-client-rel1.2' of https://github.com/ARMmbed/mbed-client-mbed-tls
+fb730ea6bff1c05c2c1bcbed1fe18253d2539ae9	not-for-merge	branch 'mbed-cloud-client-rel1.2-int' of https://github.com/ARMmbed/mbed-client-mbed-tls
+c3c89081866aa12f8f01af2b1a9e712d19b218bb	not-for-merge	branch 'remove_extra_operation' of https://github.com/ARMmbed/mbed-client-mbed-tls
+6bc45c737df0412b0798337e5b583002ad759a73	not-for-merge	branch 'template' of https://github.com/ARMmbed/mbed-client-mbed-tls
+85326677a89dbb9238357520cd38a8c88af71d81	not-for-merge	branch 'valid_from_valid_to_pal_parsing' of https://github.com/ARMmbed/mbed-client-mbed-tls
+3ec557e640dbaad858d08a684f3b336dd6468701	not-for-merge	branch 'weak-entropy-poll-seed' of https://github.com/ARMmbed/mbed-client-mbed-tls
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+7e1b6d81503843ee98192e11f31df12508938c9d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/ORIG_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+60a6d56e4ebd30fd3fba8375037e3a8ef0017f28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/config	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,11 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[remote "origin"]
+	fetch = +refs/heads/*:refs/remotes/origin/*
+	url = https://github.com/ARMmbed/mbed-client-mbed-tls/
+[branch "master"]
+	remote = origin
+	merge = refs/heads/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/description	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/hooks/applypatch-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/hooks/commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/hooks/post-update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/hooks/pre-applypatch.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/hooks/pre-commit.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	echo "Error: Attempt to add a non-ascii file name."
+	echo
+	echo "This can cause problems if you want to work"
+	echo "with people on other platforms."
+	echo
+	echo "To be portable it is advisable to rename the file ..."
+	echo
+	echo "If you know what you are doing you can disable this"
+	echo "check using:"
+	echo
+	echo "  git config hooks.allownonascii true"
+	echo
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/hooks/pre-rebase.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/hooks/prepare-commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/hooks/update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
Binary file mbed-client/mbed-client-mbed-tls/.git/index has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/info/exclude	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+.hg
+.git
+.svn
+.CVS
+.cvs
+*.orig
+.build
+.export
+.msub
+.meta
+.ctags*
+*.uvproj
+*.uvopt
+*.project
+*.cproject
+*.launch
+*.ewp
+*.eww
+Makefile
+Debug
+*.htm
+*.settings
+mbed_settings.py
+*.py[cod]
+# subrepo ignores
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/logs/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+0000000000000000000000000000000000000000 60a6d56e4ebd30fd3fba8375037e3a8ef0017f28 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056543 +0000	clone: from https://github.com/ARMmbed/mbed-client-mbed-tls/
+60a6d56e4ebd30fd3fba8375037e3a8ef0017f28 7e1b6d81503843ee98192e11f31df12508938c9d www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056546 +0000	checkout: moving from master to 7e1b6d81503843ee98192e11f31df12508938c9d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/logs/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 60a6d56e4ebd30fd3fba8375037e3a8ef0017f28 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056543 +0000	clone: from https://github.com/ARMmbed/mbed-client-mbed-tls/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/logs/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 60a6d56e4ebd30fd3fba8375037e3a8ef0017f28 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056543 +0000	clone: from https://github.com/ARMmbed/mbed-client-mbed-tls/
Binary file mbed-client/mbed-client-mbed-tls/.git/objects/pack/pack-373e10a5e0fc313ed37fab29088810a90e4dd374.idx has changed
Binary file mbed-client/mbed-client-mbed-tls/.git/objects/pack/pack-373e10a5e0fc313ed37fab29088810a90e4dd374.pack has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/packed-refs	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,125 @@
+# pack-refs with: peeled 
+0205be29fcfcbeb729fbdac52c30d726d34c9160 refs/remotes/origin/cert-expiration-verify
+eaf04f0792a7820fea833f48d7c870b44366fe49 refs/remotes/origin/cert_parse_fix
+0e12068b07f1a700536a9d28816bdd3a80450743 refs/remotes/origin/cert_parsing_fix
+e5ac927acf771a7e2b38928f0aff88c66eeaa1b4 refs/remotes/origin/compiler_warning_fixes
+88fb05322b85baf730446ccffbb75d59b785add4 refs/remotes/origin/demo_port
+4a2759500c587ab01f5f00f5584d5439ed1a9c81 refs/remotes/origin/fix_compiling_errors
+621cbdfc9ffcc299bbaf531bf9c1d59bbb2f88ef refs/remotes/origin/fix_entropy_init
+8f9feda2361ce19db54ea03c9186c8337f0bb201 refs/remotes/origin/fix_unittests_ip6tos
+cd30631df5df484dc71af366c537d8653b9f46a2 refs/remotes/origin/handle_mbedtls_handshake_errors
+4b47e994ee65f224d2362a40a6eee8b83a231857 refs/remotes/origin/handshake_while_loop
+fbc90ed9d4a3b115fc5b4f857c47eb2779c30b51 refs/remotes/origin/makefile_compilation
+60a6d56e4ebd30fd3fba8375037e3a8ef0017f28 refs/remotes/origin/master
+2e9ec86aef7fc3c628596113ac513bac86df9bcd refs/remotes/origin/mbed-cloud-client-rel1.2
+fb730ea6bff1c05c2c1bcbed1fe18253d2539ae9 refs/remotes/origin/mbed-cloud-client-rel1.2-int
+c3c89081866aa12f8f01af2b1a9e712d19b218bb refs/remotes/origin/remove_extra_operation
+6bc45c737df0412b0798337e5b583002ad759a73 refs/remotes/origin/template
+85326677a89dbb9238357520cd38a8c88af71d81 refs/remotes/origin/valid_from_valid_to_pal_parsing
+3ec557e640dbaad858d08a684f3b336dd6468701 refs/remotes/origin/weak-entropy-poll-seed
+7ead3ef2f0b2c9c24afe7ad79f1d83ade4d1ab2f refs/tags/RR1.2.0-RC1
+^a1d6b5aff98b17f0d40b2f059ac2c9257b57d6b6
+8a308c16f217ca82987c64d3fe176a26757e9d2c refs/tags/RR1.2.0-RC2
+^fc77a07740cb0f74f50b858db63f81c1b47bc4ad
+89155b1544f82857a782a60b6c26a17d6600c22b refs/tags/RR1.2.0-RC3
+^2e9ec86aef7fc3c628596113ac513bac86df9bcd
+476cb540331a6c7e598dd2e620f5f4e0ecc12373 refs/tags/RR1.2.0-RC4
+^2e9ec86aef7fc3c628596113ac513bac86df9bcd
+aeca1b39e3b376b62be0f55bbb7fb01dcf4c012f refs/tags/beta-release
+69780251dd8f06815a39362aa459b2181494c3a8 refs/tags/mbed-os-5.0-rc1
+^68f93f7834e9cdd377239b2889d137771afb8d2b
+5c83a440973257defca5e143aceb6334477eed36 refs/tags/mbedCloudClient-R1.1
+^7e1b6d81503843ee98192e11f31df12508938c9d
+de8ec3fab9fbe6a113330d48a420cf31ab27179e refs/tags/mbedCloudClient-R1.1-RC1
+^7e1b6d81503843ee98192e11f31df12508938c9d
+2e75b84730a1a2a0820cee9ea7dac83144768dc4 refs/tags/mbedCloudClient-R1.1-RC2
+^7e1b6d81503843ee98192e11f31df12508938c9d
+83b64ad35a08a4f939b132e810d4e97ba021b389 refs/tags/mbedCloudClient-R1.1-RC3
+^7e1b6d81503843ee98192e11f31df12508938c9d
+b3e626c7c5fb88f6f601ab7d4a62fbede24d810e refs/tags/mbedCloudClient-r0.8
+^7e1b6d81503843ee98192e11f31df12508938c9d
+f0b800e7737478fe17a3a98725749b825831d759 refs/tags/mbedCloudClient-r0.8.1
+^7e1b6d81503843ee98192e11f31df12508938c9d
+49beb573e2409a7b3103643784ebbe80c0f23864 refs/tags/mbedCloudClient-r0.8.2
+^7e1b6d81503843ee98192e11f31df12508938c9d
+7759d149fa043a8a9cca8376c7c5c34972415d10 refs/tags/mbedCloudClient-r1.0
+^7e1b6d81503843ee98192e11f31df12508938c9d
+052b58aaa9e72e527d34bafcd692145107ff6cc9 refs/tags/mbedos-16.01-release
+052b58aaa9e72e527d34bafcd692145107ff6cc9 refs/tags/mbedos-16.03-release
+6e953a9eed8c8aa671b764fbfad0ce05d9cf224e refs/tags/mbedos-2016q1-oob1
+f765c211ac01547db7cad4a8b9c2e4cdb287a418 refs/tags/mbedos-2016q1-oob2
+052b58aaa9e72e527d34bafcd692145107ff6cc9 refs/tags/mbedos-2016q1-oob3
+cbbe7eda147eb8bedb357023d03131cebaefe3a0 refs/tags/mbedos-release-15-11
+c56688c277c1b1d41980217b42cf76048e6da5cf refs/tags/mbedos-techcon-oob2
+c16e6b50e8bbde6b44ad2b40aaf9a03a9f737107 refs/tags/test_tag
+^7e1b6d81503843ee98192e11f31df12508938c9d
+7cc99c9d2e0abfd7bd066e1c8d52c84a34011672 refs/tags/v0.0.1
+5a7d89354d813b4921d128ced42b0170b46fcd16 refs/tags/v0.0.2
+d923e15c5505667b20e6719ad15111de502fd8e0 refs/tags/v0.0.3
+d8290bbc0c78b6e64f76b2b13c4ce45d4969a935 refs/tags/v0.0.4
+^944ef6ef4944b8b53211a24623d480cce50840fe
+f60c61bfbbab73469379bbf2a183f98d90011c0a refs/tags/v0.0.5
+e8b04b601f579d94d71681d90e515a52cecfab99 refs/tags/v0.0.6
+^c94ebf1cde19b326b86ab3a5be4a7c4320248525
+f43f899562b32ddc2731c1f9266661ba0131c343 refs/tags/v0.0.7
+^bdb3facc2028d53d5e9eeaea0ca5f4ec7a0b1e8e
+3b5e2b4c08e344e81e1f2fc476f8ed600f015276 refs/tags/v0.0.8
+^502b69f17c219d20a3c420a17d49dc3153bbfe34
+7d7925dc98acbf66883c82df2387e5d5ee69b2f0 refs/tags/v0.0.9
+^aeca1b39e3b376b62be0f55bbb7fb01dcf4c012f
+469ffd2475d24c56aa810b9da4508dbdc5c62ced refs/tags/v1.0.0
+^256a44848330a3c3ddb302ba84cdf986cfcb69a6
+1e66949394fce422162ba1e7ee258c41cb11214d refs/tags/v1.0.1
+^62eaf487a231b72855ba72d414a0c0c94e8dd3b8
+d8c16010f086ddae1c7e11afbdc018b3100fd6ac refs/tags/v1.0.10
+^d28c25b2e43fe1ede245ff91ae037ddd6a0c99dc
+6cdc330888a3dccc1a16d5226670ae57adf2b887 refs/tags/v1.0.11
+^ae5879c8a3e9daa54d5d405f0be7a09998bea500
+84c5c555e4ea822844a887e9cdb596f00b9ba0f5 refs/tags/v1.0.12
+^46d100873514ef2b48d0407c99ec485574651acf
+be053c81d00281e96765ced2457215ac7baf418c refs/tags/v1.0.13
+^de67583dfcca78d0e328ec9fd5941abf3eee5526
+07690963e3456e63cc26ad937f61160fe1cfb4fb refs/tags/v1.0.14
+^69c090233405850a03de59bc58dafc0ad0564b57
+d8811341fe0981223187ebad29502c4267c2fc0f refs/tags/v1.0.15
+^6e953a9eed8c8aa671b764fbfad0ce05d9cf224e
+3e69a2fb57457c6419d31fb231a2bcf3d06399a4 refs/tags/v1.0.16
+^f765c211ac01547db7cad4a8b9c2e4cdb287a418
+de0faecd1cc70ba02225bcbf061efd3ba4fec1dd refs/tags/v1.0.3
+^5789be88a7b80637d2babc1d10e3109f4ef9efe6
+29bf6e5daebc49896791c2e96b749d6c88797835 refs/tags/v1.0.4
+^303463e1572f84a7a73f82b54e38ae01a88cae0d
+ff43aec6271c1b5e99d38ea0fe99da3500a1d46f refs/tags/v1.0.5
+^7197b53fcff0521443bd1eb9a18b5392c9f36a89
+fec25ae90986273562fc117f16d5bdb01b98b73a refs/tags/v1.0.6
+^c56688c277c1b1d41980217b42cf76048e6da5cf
+ea6a8b2c0a46608c886e4aacd92d802250971a1d refs/tags/v1.0.7
+^ed28ab48a3fe29bc4d19f152f1a9c6dd003bbd97
+ac71cb016865a175439a282232b871b28ee1f2ab refs/tags/v1.0.8
+^605de2ac0bf403169c3fac47bcdb027845f833c4
+afee50f739db099a6e7198bb0e4847a792a8050a refs/tags/v1.0.9
+^cbbe7eda147eb8bedb357023d03131cebaefe3a0
+e9b8916f65719bd91a82dc5fa405a3168e35dfe4 refs/tags/v1.1.0
+^052b58aaa9e72e527d34bafcd692145107ff6cc9
+39ce25b16e8c2c5ee3058b2dbd3549d44365672d refs/tags/v1.1.1
+^fc28b2d69e9a4db7f0f6de751902561f9dddda6f
+06265a694db03d77c9e0c00da1733b03cc1b5c02 refs/tags/v1.1.2
+^036b6838c74acfb082e535948a718cbc4f8c7c4a
+1ef8b3ad76c6e68b305f9308bbf776df92f36fea refs/tags/v1.1.3
+^ad50b398741b753b70820d5c80ff038e890ca00d
+110ff673f8d54cde2b8305238b00c1a806f112f6 refs/tags/v1.1.4
+^dea553cc8746f7d26cec52748c6445345a643fc4
+bc5a94a7e81f84b3dcfd88f96e42d42e2aadb892 refs/tags/v2.0.0
+^3d471daf27e7536584702877b4ec6657c53261db
+4003024ac14ba8f3e6801ebc6fcfea3dda0c8957 refs/tags/v2.0.1
+^a6803a62c24097ed19dbbf6464331aed1a9fd011
+5da185f6de7978e53c8a284b3d7f42563bd9a7f1 refs/tags/v3.0.0
+^ba2d65d2bf0d9f9194f297817e30e87f35f19cf9
+0680b78f0850abcc0e6d9c9f368f9d5878ca9afc refs/tags/v3.0.1
+^3854aab04b21732f81993342065cbf6b3721eaac
+b80195a4cf61bdb6caa2cf8bbc44331672679194 refs/tags/v3.0.2
+^9f96f8bef8a8ca1a0f0815ef0a655add2c18abcb
+72679bdab4444e8dc7235bbf42f7f46d0d3607cc refs/tags/v3.0.3
+^68f93f7834e9cdd377239b2889d137771afb8d2b
+30eb8cf376a8ae788c490fb85cb9a7fad7719775 refs/tags/v3.0.4
+^60a6d56e4ebd30fd3fba8375037e3a8ef0017f28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+60a6d56e4ebd30fd3fba8375037e3a8ef0017f28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.git/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+ref: refs/remotes/origin/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.gitignore	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,7 @@
+.yotta.json
+coverage/
+lcov/
+yotta_modules/
+yotta_targets/
+upload.tar.gz
+build/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/.mbedignore	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+test/*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/LICENSE	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+Unless specifically indicated otherwise in a file, files are licensed
+under the Apache 2.0 license, as can be found in: apache-2.0.txt
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,73 @@
+#
+# Makefile for running unit tests
+#
+# List of subdirectories to build
+TEST_FOLDER := ./test/
+
+LIB = libmbed-client-mbedtls.a
+
+# List of unit test directories for libraries
+UNITTESTS := $(sort $(dir $(wildcard $(TEST_FOLDER)*/unittest/*)))
+TESTDIRS := $(UNITTESTS:%=build-%)
+CLEANTESTDIRS := $(UNITTESTS:%=clean-%)
+COVERAGEFILE := ./lcov/coverage.info
+
+include sources.mk
+include include_dirs.mk
+
+override CFLAGS += $(addprefix -I,$(INCLUDE_DIRS))
+override CFLAGS += $(addprefix -D,$(FLAGS))
+ifeq ($(DEBUG),1)
+override CFLAGS += -DHAVE_DEBUG
+endif
+
+#
+# Define compiler toolchain
+#
+include toolchain_rules.mk
+
+$(eval $(call generate_rules,$(LIB),$(SRCS)))
+
+# Extend default clean rule
+clean: clean-extra
+
+$(TESTDIRS):
+	@yotta target frdm-k64f-gcc
+	@yotta install mbed-client
+	@yotta install mbed-client-mbed-os
+	@make -C $(@:build-%=%)
+
+$(CLEANDIRS):
+	@make -C $(@:clean-%=%) clean
+
+$(CLEANTESTDIRS):
+	@make -C $(@:clean-%=%) clean
+
+.PHONY: test
+test: $(TESTDIRS)
+	@rm -rf ./lcov
+	@rm -rf ./coverage
+	@mkdir -p lcov
+	@mkdir -p lcov/results
+	@mkdir coverage
+	@find ./test -name '*.xml' | xargs cp -t ./lcov/results/
+	@rm -f lcov/index.xml
+	@./xsl_script.sh
+	@cp junit_xsl.xslt lcov/.
+	@xsltproc -o lcov/testresults.html lcov/junit_xsl.xslt lcov/index.xml
+	@rm -f lcov/junit_xsl.xslt
+	@rm -f lcov/index.xml
+	@find ./ -name '*.gcno' | xargs cp --backup=numbered -t ./coverage/
+	@find ./ -name '*.gcda' | xargs cp --backup=numbered -t ./coverage/
+	gcovr --object-directory ./coverage --exclude-unreachable-branches --exclude '/usr' --exclude '.*mbed-client-mbed-tls_unit_tests_master*.' --exclude '.*mbed-client-mbed-os*.' --exclude '.*common*.' --exclude '.*mbed-net-sockets.v0*.' --exclude '.*stub*.' --exclude '/yotta_modules/' -x -o ./lcov/gcovr.xml
+	@lcov -d test/. -c -o $(COVERAGEFILE)
+	@lcov -q -r $(COVERAGEFILE) "/usr*" -o $(COVERAGEFILE)
+	@lcov -q -r $(COVERAGEFILE) "/test*" -o $(COVERAGEFILE)
+	@lcov -q -r $(COVERAGEFILE) "/mbed-client/*" -o $(COVERAGEFILE)
+	@genhtml -q $(COVERAGEFILE) --show-details --output-directory lcov/html
+	@yotta uninstall mbed-client
+	@yotta uninstall mbed-client-mbed-os
+	@echo mbed-client-mbed-tls module unit tests built
+
+clean-extra: $(CLEANDIRS) \
+	$(CLEANTESTDIRS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/README.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# mbed-client-mbedtls
+Mbedtls specific implementation, which can be used by mbed clients
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/apache-2.0.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,56 @@
+
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+    You must give any other recipients of the Work or Derivative Works a copy of this License; and
+    You must cause any modified files to carry prominent notices stating that You changed the files; and
+    You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+    If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+    You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/include_dirs.mk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,15 @@
+INCLUDE_DIRS := \
+	../ \
+	. \
+	../../nsdl-c \
+	../../libService/libService \
+	../../libService/exported-libs/mbed-client-libservice \
+	../../libService \
+	../../mbedtls/include \
+        ../lwm2m-client \
+        ../lwm2m-client/mbed-client \
+        ../lwm2m-client-linux/source \
+        ../lwm2m-client-mbedtls \
+        source \
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/junit_xsl.xslt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:output encoding="UTF-8" indent="yes" method="html"/>
+<xsl:strip-space elements="*"/>
+
+<xsl:variable name="list"
+  select="document('index.xml')/list" />
+
+<xsl:template match="/">
+    <h1>
+        Unittest report
+    </h1>
+
+    <p>
+        <b>
+    Total tests run <xsl:value-of select="sum(document($list/entry/@name)/testsuite/@tests)"/>
+    , failures: <xsl:value-of select="sum(document($list/entry/@name)/testsuite/@failures) + sum(document($list/entry/@name)/testsuite/@errors)"/>
+        </b>
+
+    <xsl:for-each select="document($list/entry/@name)" >
+        <xsl:apply-templates select="testsuite"/>
+    </xsl:for-each>
+    </p>
+</xsl:template>
+
+<xsl:template match="testsuite">
+    <h2>
+        <xsl:value-of select="@name" />
+    </h2>
+    <table border="1" cellSpacing="0" cellPadding="10" >
+    <tr>
+        <th>Tests run</th>
+        <th>Tests failed</th>
+        <th>Other errors</th>
+    </tr>
+    <tr>
+        <td><xsl:value-of select="@tests"/></td>
+        <td><xsl:value-of select="@failures"/></td>
+        <td><xsl:value-of select="@errors"/></td>
+    </tr>
+    </table>
+    <br/>
+    <table border="1" cellSpacing="0" cellPadding="10" >
+    <tr>
+        <th>Tests name</th>
+        <th>PASS/FAIL</th>
+        <th>Failing case</th>
+        <th>Reason</th>
+    </tr>
+    <xsl:apply-templates select="testcase"/>
+    </table>
+</xsl:template>
+
+<xsl:template match="testcase">
+    <xsl:choose>
+        <xsl:when test="failure">
+            <tr><td><font color="#FF0000"><xsl:value-of select="@name" /></font></td><xsl:apply-templates select="failure"/></tr>
+        </xsl:when>
+        <xsl:when test="error">
+            <tr><td><font color="#FF0000"><xsl:value-of select="@name" /></font></td><xsl:apply-templates select="error"/></tr>
+        </xsl:when>
+        <xsl:otherwise>
+            <tr><td><xsl:value-of select="@name" /></td><td><font color="#00FF00">PASS</font></td><td></td><td></td></tr>
+        </xsl:otherwise>
+    </xsl:choose>
+</xsl:template>
+
+<xsl:template match="failure">
+    <td>
+        <b><font color="#FF0000">FAIL</font></b>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@message" />
+        </font>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@type" />
+        </font>
+    </td>
+</xsl:template>
+
+<xsl:template match="error">
+    <td>
+        <b><font color="#FF0000">FAIL</font></b>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@message" />
+        </font>
+    </td>
+    <td>
+        <font color="#ff0000">
+            <xsl:value-of select="@type" />
+        </font>
+    </td>
+</xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/mbed-client-mbedtls/m2mconnectionsecuritypimpl.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __M2M_CONNECTION_SECURITY_PIMPL_H__
+#define __M2M_CONNECTION_SECURITY_PIMPL_H__
+
+#include "mbed-client/m2mconnectionsecurity.h"
+#include "mbed-client/m2mtimerobserver.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2msecurity.h"
+
+#include "mbedtls/config.h"
+#include "mbedtls/platform.h"
+#include "mbedtls/debug.h"
+#include "mbedtls/ssl.h"
+#include "mbedtls/entropy.h"
+#include "mbedtls/ctr_drbg.h"
+#include "mbedtls/error.h"
+#include "mbedtls/certs.h"
+#include "mbedtls/entropy_poll.h"
+
+class M2MTimer;
+
+//TODO: Should we let application to select these or not??
+const static int PSK_SUITES[] = {
+    MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256,
+    MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8,
+    MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8,
+    0
+};
+
+
+/**
+ * @brief The M2MConnectionSecurityPimpl class
+ */
+class M2MConnectionSecurityPimpl : public M2MTimerObserver {
+
+private:
+
+    // Prevents the use of assignment operator by accident.
+    M2MConnectionSecurityPimpl& operator=( const M2MConnectionSecurityPimpl& /*other*/ );
+    // Prevents the use of copy constructor by accident
+    M2MConnectionSecurityPimpl( const M2MConnectionSecurityPimpl& /*other*/ );
+
+public:
+
+    /**
+     * @brief Constructor
+     */
+    M2MConnectionSecurityPimpl(M2MConnectionSecurity::SecurityMode mode);
+
+    /**
+    * @brief Destructor
+    */
+    virtual ~M2MConnectionSecurityPimpl();
+
+    /**
+     * \brief Resets the socket connection states.
+     */
+    void reset();
+
+    /**
+     * \brief Initiatlizes the socket connection states.
+     */
+    int init(const M2MSecurity *security);
+
+    /**
+     * \brief Starts the connection in non-blocking mode.
+     * \param connHandler The ConnectionHandler object that maintains the socket.
+     * \return Returns the state of the connection. Successful or not.
+     */
+    int start_connecting_non_blocking(M2MConnectionHandler* connHandler);
+
+    /**
+     * \brief Continues connectivity logic for secure connection.
+     * \return Returns an error code if any while continuing the connection sequence.
+     */
+    int continue_connecting();
+
+    /**
+     * \brief Connects the client to the server.
+     * \param connHandler The ConnectionHandler object that maintains the socket.
+     * \return Returns the state of the connection. Successful or not.
+     */
+    int connect(M2MConnectionHandler* connHandler);
+
+    /**
+     * \brief Sends data to the server.
+     * \param message The data to be sent.
+     * \param len The length of the data.
+     * @return Indicates whether the data is sent successfully or not.
+     */
+    int send_message(unsigned char *message, int len);
+
+    /**
+     * \brief Reads the data received from the server.
+     * \param message The data to be read.
+     * \param len The length of the data.
+     * \return Indicates whether the data is read successfully or not.
+     */
+    int read(unsigned char* buffer, uint16_t len);
+
+    /**
+     * \brief Sets the function callback that will be called by mbed-client for
+     * fetching random number from application for ensuring strong entropy.
+     * \param random_callback A function pointer that will be called by mbed-client
+     * while performing secure handshake.
+     * Function signature should be uint32_t (*random_number_callback)(void);
+     */
+    void set_random_number_callback(random_number_cb callback);
+
+    /**
+     * \brief Sets the function callback that will be called by mbed-client for
+     * providing entropy source from application for ensuring strong entropy.
+     * \param entropy_callback A function pointer that will be called by mbed-client
+     * while performing secure handshake.
+     * Function signature , if using mbed-client-mbedtls should be
+     * int (*mbedtls_entropy_f_source_ptr)(void *data, unsigned char *output,
+     *                                     size_t len, size_t *olen);
+     */
+    void set_entropy_callback(entropy_cb callback);
+
+protected: //From M2MTimerObserver
+
+    virtual void timer_expired(M2MTimerObserver::Type type);
+
+private:
+
+    int start_handshake();
+
+private:
+
+    bool                        _init_done;
+    mbedtls_ssl_config          _conf;
+    mbedtls_ssl_context         _ssl;
+    mbedtls_x509_crt            _cacert;
+    mbedtls_x509_crt            _owncert;
+    mbedtls_pk_context          _pkey;
+    mbedtls_ctr_drbg_context    _ctr_drbg;
+    mbedtls_entropy_context     _entropy;
+    uint32_t                    _flags;
+    M2MTimer                    *_timer;
+    M2MConnectionSecurity::SecurityMode _sec_mode;
+
+    friend class Test_M2MConnectionSecurityPimpl;
+};
+
+#endif //__M2M_CONNECTION_SECURITY_PIMPL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/module.json	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,19 @@
+{
+  "name": "mbed-client-mbedtls",
+  "version": "3.0.3",
+  "description": "Mbedtls specific implementation, which can be used by mbed client",
+  "keywords": [
+    "mbed-client-mbedtls"
+  ],
+  "author": "Antti Kauppila",
+  "repository": {
+    "url": "git@github.com:ARMmbed/mbed-client-mbedtls.git",
+    "type": "git"
+  },
+  "homepage": "https://github.com/ARMmbed/mbed-client-mbedtls",
+  "license": "Apache-2.0",
+  "dependencies": {
+    "mbedtls": "^2.0.0"
+  },
+  "targetDependencies": {}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/run_unit_tests_with_valgrind.sh	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,14 @@
+#!/bin/bash
+# Execute script with root path where to find binaries. 
+# For example ./run_unit_tests_with_valgrind.sh ./build/x86-linux-native-coverage/test/mbedclient/
+
+input="binaries.txt"
+valgrind_logs="valgrind_logs"
+rm -rf $valgrind_logs
+mkdir $valgrind_logs
+find $1 -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print > $input
+while file= read -r binary
+do
+    valgrind --track-origins=yes --xml=yes --xml-file="${valgrind_logs}/valgrind_$(basename $binary).xml" "$binary"
+
+done < "$input"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/source/m2mconnectionsecurity.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string.h>
+#include "mbed-client/m2mconnectionhandler.h"
+#include "mbed-client/m2mconnectionsecurity.h"
+#include "mbed-client/m2mtimer.h"
+#include "mbed-client/m2msecurity.h"
+#include "mbed-client-mbedtls/m2mconnectionsecuritypimpl.h"
+
+M2MConnectionSecurity::M2MConnectionSecurity(SecurityMode mode)
+{
+    _private_impl = new M2MConnectionSecurityPimpl(mode);
+}
+
+M2MConnectionSecurity::~M2MConnectionSecurity(){
+    delete _private_impl;
+}
+
+void M2MConnectionSecurity::reset(){
+    _private_impl->reset();
+}
+
+int M2MConnectionSecurity::init(const M2MSecurity *security){
+    return _private_impl->init(security);
+}
+
+int M2MConnectionSecurity::start_connecting_non_blocking(M2MConnectionHandler* connHandler)
+{
+    return _private_impl->start_connecting_non_blocking(connHandler);
+}
+
+int M2MConnectionSecurity::continue_connecting()
+{
+    return _private_impl->continue_connecting();
+}
+
+int M2MConnectionSecurity::connect(M2MConnectionHandler* connHandler){
+    return _private_impl->connect(connHandler);
+}
+
+int M2MConnectionSecurity::send_message(unsigned char *message, int len){
+    return _private_impl->send_message(message, len);
+}
+
+int M2MConnectionSecurity::read(unsigned char* buffer, uint16_t len){
+    return _private_impl->read(buffer, len);
+}
+
+void M2MConnectionSecurity::set_random_number_callback(random_number_cb callback)
+{
+    _private_impl->set_random_number_callback(callback);
+}
+
+void M2MConnectionSecurity::set_entropy_callback(entropy_cb callback)
+{
+    _private_impl->set_entropy_callback(callback);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/source/m2mconnectionsecuritypimpl.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,454 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbed-client/m2mconnectionhandler.h"
+#include "mbed-client-mbedtls/m2mconnectionsecuritypimpl.h"
+#include "mbed-client/m2mtimer.h"
+#include "mbed-client/m2msecurity.h"
+#include "mbed-trace/mbed_trace.h"
+#include "mbedtls/debug.h"
+#include <string.h>
+
+#define TRACE_GROUP "mClt"
+
+void mbedtls_timing_set_delay( void *data, uint32_t int_ms, uint32_t fin_ms );
+int mbedtls_timing_get_delay( void *data );
+int entropy_poll( void *data, unsigned char *output, size_t len, size_t *olen );
+//Point these back to M2MConnectionHandler!!!
+int f_send( void *ctx, const unsigned char *buf, size_t len );
+int f_recv(void *ctx, unsigned char *buf, size_t len);
+int f_recv_timeout(void *ctx, unsigned char *buf, size_t len, uint32_t some);
+
+bool cancelled;
+random_number_cb    __random_number_callback;
+entropy_cb          __entropy_callback;
+
+//Comment out following define to enable tracing from mbedtls
+//#define ENABLE_MBED_CLIENT_MBED_TLS_DEBUGS
+#ifdef ENABLE_MBED_CLIENT_MBED_TLS_DEBUGS
+static void mbedtls_debug( void *ctx, int level,
+                      const char *file, int line, const char *str )
+{
+    ((void) level);
+    tr_debug("%s", str);
+}
+
+static int verify_cert_chains(void *data, mbedtls_x509_crt *crt, int depth, uint32_t *flags)
+{
+    char buf[1024];
+    (void) data;
+
+    printf("\nVerifying certificate at depth %d:\n", depth);
+    mbedtls_x509_crt_info(buf, sizeof (buf) - 1, "  ", crt);
+    printf("%s", buf);
+
+    if (*flags == 0)
+        printf("No verification issue for this certificate\n");
+    else
+    {
+        mbedtls_x509_crt_verify_info(buf, sizeof (buf), "  ! ", *flags);
+        printf("%s\n", buf);
+    }
+
+    return 0;
+}
+#endif
+
+M2MConnectionSecurityPimpl::M2MConnectionSecurityPimpl(M2MConnectionSecurity::SecurityMode mode)
+  : _flags(0),
+    _sec_mode(mode)
+{
+    _init_done = false;
+    cancelled = true;
+    _timer = new M2MTimer(*this);
+    mbedtls_ssl_init( &_ssl );
+    mbedtls_ssl_config_init( &_conf );
+    mbedtls_x509_crt_init( &_cacert );
+    mbedtls_x509_crt_init(&_owncert);
+    mbedtls_pk_init(&_pkey);
+    mbedtls_ctr_drbg_init( &_ctr_drbg );
+    mbedtls_entropy_init( &_entropy );
+}
+
+M2MConnectionSecurityPimpl::~M2MConnectionSecurityPimpl(){
+    mbedtls_ssl_config_free(&_conf);
+    mbedtls_ssl_free(&_ssl);
+    mbedtls_x509_crt_free(&_cacert);
+    mbedtls_x509_crt_free(&_owncert);
+    mbedtls_pk_free(&_pkey);
+    mbedtls_ctr_drbg_free( &_ctr_drbg );
+    mbedtls_entropy_free( &_entropy );
+    delete _timer;
+}
+
+void M2MConnectionSecurityPimpl::timer_expired(M2MTimerObserver::Type type){
+    tr_debug("M2MConnectionSecurityPimpl::timer_expired");
+    if(type == M2MTimerObserver::Dtls && !cancelled){
+        int error = continue_connecting();
+        if(MBEDTLS_ERR_SSL_TIMEOUT == error || error == -1) {
+            tr_error("M2MConnectionSecurityPimpl::timer_expired - handshake timeout");
+            if(_ssl.p_bio) {
+                M2MConnectionHandler* ptr = (M2MConnectionHandler*)_ssl.p_bio;
+                ptr->handle_connection_error(M2MConnectionHandler::SSL_HANDSHAKE_ERROR);
+            }
+            reset();
+        }
+    }
+}
+
+void M2MConnectionSecurityPimpl::reset(){
+    _init_done = false;
+    cancelled = true;
+    mbedtls_ssl_config_free(&_conf);
+    mbedtls_ssl_free(&_ssl);
+    mbedtls_x509_crt_free(&_cacert);
+    mbedtls_x509_crt_free(&_owncert);
+    mbedtls_pk_free(&_pkey);
+    mbedtls_ctr_drbg_free( &_ctr_drbg );
+    mbedtls_entropy_free( &_entropy );
+    _timer->stop_timer();
+}
+
+int M2MConnectionSecurityPimpl::init(const M2MSecurity *security)
+{
+    tr_debug("M2MConnectionSecurityPimpl::init");
+    int ret = -1;
+    if (security != NULL) {
+        const char *pers = "dtls_client";
+        mbedtls_ssl_init( &_ssl );
+        mbedtls_ssl_config_init( &_conf );
+        mbedtls_x509_crt_init( &_cacert );
+        mbedtls_x509_crt_init(&_owncert);
+        mbedtls_pk_init(&_pkey);
+        mbedtls_ctr_drbg_init( &_ctr_drbg );
+        mbedtls_entropy_init( &_entropy );
+
+        int mode = MBEDTLS_SSL_TRANSPORT_DATAGRAM;
+        if( _sec_mode == M2MConnectionSecurity::TLS ){
+            mode = MBEDTLS_SSL_TRANSPORT_STREAM;
+        }
+
+        if( mbedtls_entropy_add_source( &_entropy, entropy_poll, NULL,
+                                    128, 0 ) < 0 ){
+            return -1;
+        }
+        if(__entropy_callback.entropy_source_ptr) {
+            if( mbedtls_entropy_add_source( &_entropy, __entropy_callback.entropy_source_ptr,
+                                            __entropy_callback.p_source,__entropy_callback.threshold,
+                                            __entropy_callback.strong ) < 0 ){
+                return -1;
+            }
+        }
+
+        if( mbedtls_ctr_drbg_seed( &_ctr_drbg, mbedtls_entropy_func, &_entropy,
+                                   (const unsigned char *) pers,
+                                   strlen( pers ) )  != 0 ) {
+            return -1;
+        }
+
+        if( mbedtls_ssl_config_defaults( &_conf,
+                           MBEDTLS_SSL_IS_CLIENT,
+                           mode, 0 ) != 0 ) {
+            return -1;
+        }
+
+        M2MSecurity::SecurityModeType cert_mode =
+                (M2MSecurity::SecurityModeType)security->resource_value_int(M2MSecurity::SecurityMode);
+
+        // Note: these are relatively large buffers, no point to make copy of them here as mbedtls will make a copy of them.
+        const uint8_t *srv_public_key = NULL;
+        const uint8_t *public_key = NULL;
+        const uint8_t *sec_key = NULL;
+
+        uint32_t srv_public_key_size = security->resource_value_buffer(M2MSecurity::ServerPublicKey, srv_public_key);
+        uint32_t public_key_size = security->resource_value_buffer(M2MSecurity::PublicKey, public_key);
+        uint32_t sec_key_size = security->resource_value_buffer(M2MSecurity::Secretkey, sec_key);
+        if( srv_public_key == NULL || public_key == NULL || sec_key == NULL ||
+            srv_public_key_size == 0 || public_key_size == 0 || sec_key_size == 0 ){
+            return -1;
+        }
+
+        if( cert_mode == M2MSecurity::Certificate ){
+            if ( mbedtls_x509_crt_parse( &_cacert, (const unsigned char *) srv_public_key,
+                    srv_public_key_size + 1) < 0 ||
+                mbedtls_x509_crt_parse( &_owncert, (const unsigned char *) public_key,
+                    public_key_size + 1) < 0 ||
+                mbedtls_pk_parse_key(&_pkey, (const unsigned char *) sec_key,
+                    sec_key_size + 1, NULL, 0 ) < 0 ) {
+                ret = -1;
+            } else {
+                ret = 0;
+            }
+
+            if ( ret == 0 ) {
+                mbedtls_ssl_conf_own_cert(&_conf, &_owncert, &_pkey);
+                mbedtls_ssl_conf_authmode( &_conf, MBEDTLS_SSL_VERIFY_REQUIRED );
+                mbedtls_ssl_conf_ca_chain( &_conf, &_cacert, NULL );
+            }
+
+        } else if ( cert_mode == M2MSecurity::Psk ){
+            if (mbedtls_ssl_conf_psk(&_conf, sec_key, sec_key_size, public_key, public_key_size) == 0) {
+                ret = 0;
+            }
+            mbedtls_ssl_conf_ciphersuites(&_conf, PSK_SUITES);
+        } else {
+            ret = -1;
+        }
+
+#ifdef ENABLE_MBED_CLIENT_MBED_TLS_DEBUGS
+        mbedtls_ssl_conf_dbg( &_conf, mbedtls_debug, stdout );
+        mbedtls_debug_set_threshold(5);
+        mbedtls_ssl_conf_verify(&_conf, verify_cert_chains, NULL);
+#endif
+    }
+
+    if( ret == 0 ){
+        _init_done = true;
+    }
+    tr_debug("M2MConnectionSecurityPimpl::init - ret %d", ret);
+    return ret;
+}
+
+
+int M2MConnectionSecurityPimpl::start_handshake(){
+    tr_debug("M2MConnectionSecurityPimpl::start_handshake");
+    int ret = -1;
+    do
+    {
+       ret = mbedtls_ssl_handshake( &_ssl );
+    }
+    while( ret == MBEDTLS_ERR_SSL_WANT_READ ||
+           ret == MBEDTLS_ERR_SSL_WANT_WRITE);
+
+    if( ret != 0 ) {
+        ret = -1;
+    }else {
+        if( ( _flags = mbedtls_ssl_get_verify_result( &_ssl ) ) != 0 ) {
+            ret = -1;
+        }
+    }
+    tr_debug("M2MConnectionSecurityPimpl::start_handshake - OUT");
+    return ret;
+}
+
+int M2MConnectionSecurityPimpl::connect(M2MConnectionHandler* connHandler){
+
+    tr_debug("M2MConnectionSecurityPimpl::connect");
+    int ret=-1;
+    if(!_init_done){
+        return ret;
+    }
+
+    mbedtls_ssl_conf_rng( &_conf, mbedtls_ctr_drbg_random, &_ctr_drbg );
+
+    if( ( ret = mbedtls_ssl_setup( &_ssl, &_conf ) ) != 0 ) {
+       return -1;
+    }
+
+    mbedtls_ssl_set_bio( &_ssl, connHandler,
+                        f_send, f_recv, f_recv_timeout );
+
+    mbedtls_ssl_set_timer_cb( &_ssl, _timer, mbedtls_timing_set_delay,
+                              mbedtls_timing_get_delay );
+
+    ret = start_handshake();
+    _timer->stop_timer();
+    tr_debug("M2MConnectionSecurityPimpl::connect - handshake ret: %d, ssl state: %d", ret, _ssl.state);
+    return ret;
+}
+
+int M2MConnectionSecurityPimpl::start_connecting_non_blocking(M2MConnectionHandler* connHandler)
+{
+    tr_debug("M2MConnectionSecurityPimpl::start_connecting_non_blocking");
+    int ret=-1;
+    if(!_init_done){
+        return ret;
+    }
+
+    int mode = MBEDTLS_SSL_TRANSPORT_DATAGRAM;
+    if( _sec_mode == M2MConnectionSecurity::TLS ){
+        mode = MBEDTLS_SSL_TRANSPORT_STREAM;
+    }
+
+    if( ( ret = mbedtls_ssl_config_defaults( &_conf,
+                       MBEDTLS_SSL_IS_CLIENT,
+                       mode, 0 ) ) != 0 )
+    {
+        return -1;
+    }
+
+    // This is for non-blocking sockets total timeout is 1+2+4+8+16+29=60 seconds
+    mbedtls_ssl_conf_handshake_timeout( &_conf, 10000, 29000 );
+    mbedtls_ssl_conf_rng( &_conf, mbedtls_ctr_drbg_random, &_ctr_drbg );
+
+    if( ( ret = mbedtls_ssl_setup( &_ssl, &_conf ) ) != 0 )
+    {
+       return -1;
+    }
+
+    mbedtls_ssl_set_bio( &_ssl, connHandler,
+                        f_send, f_recv, f_recv_timeout );
+
+    mbedtls_ssl_set_timer_cb( &_ssl, _timer, mbedtls_timing_set_delay,
+                                            mbedtls_timing_get_delay );
+
+    ret = mbedtls_ssl_handshake_step( &_ssl );
+    if( ret == 0 ){
+        ret = mbedtls_ssl_handshake_step( &_ssl );
+    }
+
+    if( ret >= 0){
+        ret = 1;
+    } else {
+        ret = -1;
+    }
+    tr_debug("M2MConnectionSecurityPimpl::start_connecting_non_blocking - handshake ret: %d, ssl state: %d", ret, _ssl.state);
+    return ret;
+}
+
+int M2MConnectionSecurityPimpl::continue_connecting()
+{
+    tr_debug("M2MConnectionSecurityPimpl::continue_connecting");
+    int ret=-1;
+    while( ret != M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ ){
+        ret = mbedtls_ssl_handshake_step( &_ssl );
+        if( MBEDTLS_ERR_SSL_WANT_READ == ret ){
+            ret = M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ;
+        }
+        else if (ret != 0) {
+            break;
+        }
+
+        if( _ssl.state == MBEDTLS_SSL_HANDSHAKE_OVER ){
+            return 0;
+        }
+    }
+    tr_debug("M2MConnectionSecurityPimpl::continue_connecting, ret: %d", ret);
+    return ret;
+}
+
+int M2MConnectionSecurityPimpl::send_message(unsigned char *message, int len){
+    tr_debug("M2MConnectionSecurityPimpl::send_message");
+    int ret=-1;
+    if(!_init_done){
+        return ret;
+    }
+
+    do ret = mbedtls_ssl_write( &_ssl, (unsigned char *) message, len );
+    while( ret == MBEDTLS_ERR_SSL_WANT_READ ||
+           ret == MBEDTLS_ERR_SSL_WANT_WRITE );
+
+    tr_debug("M2MConnectionSecurityPimpl::send_message - ret: %d", ret);
+    return ret; //bytes written
+}
+
+int M2MConnectionSecurityPimpl::read(unsigned char* buffer, uint16_t len){
+    int ret=-1;
+    if(!_init_done){
+        tr_error("M2MConnectionSecurityPimpl::read - init not done!");
+        return ret;
+    }
+
+    memset( buffer, 0, len );
+    do ret = mbedtls_ssl_read( &_ssl, buffer, len-1 );
+    while( ret == MBEDTLS_ERR_SSL_WANT_READ ||
+           ret == MBEDTLS_ERR_SSL_WANT_WRITE );
+
+    return ret; //bytes read
+}
+
+int f_send( void *ctx, const unsigned char *buf, size_t len){
+    M2MConnectionHandler* handler = ((M2MConnectionHandler *) ctx);
+    return handler->send_to_socket(buf, len);
+}
+
+int f_recv(void *ctx, unsigned char *buf, size_t len){
+    M2MConnectionHandler* handler = ((M2MConnectionHandler *) ctx);
+    return handler->receive_from_socket(buf, len);
+}
+
+int f_recv_timeout(void *ctx, unsigned char *buf, size_t len, uint32_t /*some*/){
+    return f_recv(ctx, buf, len);
+}
+
+int entropy_poll( void *, unsigned char *output, size_t len,
+                           size_t *olen )
+{    
+    uint32_t rdm = 0;
+    if(__random_number_callback) {
+        rdm = __random_number_callback();
+    } else {
+        rdm = time(NULL);
+    }
+    for(uint16_t i=0; i < len; i++){
+        srand(rdm);
+        output[i] = rand() % 256;
+    }
+    *olen = len;
+
+    return( 0 );
+}
+
+void mbedtls_timing_set_delay( void *data, uint32_t int_ms, uint32_t fin_ms ){
+    tr_debug("mbedtls_timing_set_delay - intermediate: %d", int_ms);
+    tr_debug("mbedtls_timing_set_delay - final: %d", fin_ms);
+    M2MTimer* timer = static_cast<M2MTimer*> (data);
+    if(!timer) {
+        return;
+    }
+    if( int_ms > 0 && fin_ms > 0 ){
+        tr_debug("mbedtls_timing_set_delay - start");
+        cancelled = false;
+        timer->stop_timer();
+        timer->start_dtls_timer(int_ms, fin_ms);
+    }else{
+        tr_debug("mbedtls_timing_set_delay - stop");
+        cancelled = true;
+        timer->stop_timer();
+    }
+}
+
+int mbedtls_timing_get_delay( void *data ){
+    tr_debug("mbedtls_timing_get_delay");
+    M2MTimer* timer = static_cast<M2MTimer*> (data);
+    if(!timer){
+        return 0;
+    }
+    if(true == cancelled) {
+        tr_debug("mbedtls_timing_get_delay - ret -1");
+        return -1;
+    } else if( timer->is_total_interval_passed() ){
+        tr_debug("mbedtls_timing_get_delay - ret 2");
+        return 2;
+    }else if( timer->is_intermediate_interval_passed() ){
+        tr_debug("mbedtls_timing_get_delay - ret 1");
+        return 1;
+    }else{
+        tr_debug("mbedtls_timing_get_delay - ret 0");
+        return 0;
+    }
+}
+
+void M2MConnectionSecurityPimpl::set_random_number_callback(random_number_cb callback)
+{
+     __random_number_callback = callback;
+}
+
+void M2MConnectionSecurityPimpl::set_entropy_callback(entropy_cb callback)
+{
+    __entropy_callback = callback;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/sources.mk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,7 @@
+SRCS += \
+	source/m2mconnectionsecurity.cpp \
+	source/m2mconnectionsecuritypimpl.cpp \
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,23 @@
+#scan for folders having "Makefile" in them and remove 'this' to prevent loop
+ifeq ($(OS),Windows_NT)
+all:
+clean:
+else
+DIRS := $(filter-out ./, $(sort $(dir $(shell find . -name 'Makefile'))))
+
+all:	
+	for dir in $(DIRS); do \
+		cd $$dir; make gcov; cd ..;\
+	done
+	
+clean:
+	for dir in $(DIRS); do \
+		cd $$dir; make clean; cd ..;\
+	done
+	rm -rf stubs/*gcov stubs/*gcda stubs/*o
+	rm -rf results/*
+	rm -rf coverages/*
+	rm -rf results
+	rm -rf coverages
+
+endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/MakefileWorker.mk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,562 @@
+#---------
+#
+# MakefileWorker.mk
+#
+# Include this helper file in your makefile
+# It makes
+#    A static library
+#    A test executable
+#
+# See this example for parameter settings
+#    examples/Makefile
+#
+#----------
+# Inputs - these variables describe what to build
+#
+#   INCLUDE_DIRS - Directories used to search for include files.
+#                   This generates a -I for each directory
+#	SRC_DIRS - Directories containing source file to built into the library
+#   SRC_FILES - Specific source files to build into library. Helpful when not all code
+#				in a directory can be built for test (hopefully a temporary situation)
+#	TEST_SRC_DIRS - Directories containing unit test code build into the unit test runner
+#				These do not go in a library. They are explicitly included in the test runner
+#	TEST_SRC_FILES - Specific source files to build into the unit test runner
+#				These do not go in a library. They are explicitly included in the test runner
+#	MOCKS_SRC_DIRS - Directories containing mock source files to build into the test runner
+#				These do not go in a library. They are explicitly included in the test runner
+#----------
+# You can adjust these variables to influence how to build the test target
+# and where to put and name outputs
+# See below to determine defaults
+#   COMPONENT_NAME - the name of the thing being built
+#   TEST_TARGET - name the test executable. By default it is
+#			$(COMPONENT_NAME)_tests
+#		Helpful if you want 1 > make files in the same directory with different
+#		executables as output.
+#   CPPUTEST_HOME - where CppUTest home dir found
+#   TARGET_PLATFORM - Influences how the outputs are generated by modifying the
+#       CPPUTEST_OBJS_DIR and CPPUTEST_LIB_DIR to use a sub-directory under the
+#       normal objs and lib directories.  Also modifies where to search for the
+#       CPPUTEST_LIB to link against.
+#   CPPUTEST_OBJS_DIR - a directory where o and d files go
+#   CPPUTEST_LIB_DIR - a directory where libs go
+#   CPPUTEST_ENABLE_DEBUG - build for debug
+#   CPPUTEST_USE_MEM_LEAK_DETECTION - Links with overridden new and delete
+#   CPPUTEST_USE_STD_CPP_LIB - Set to N to keep the standard C++ library out
+#		of the test harness
+#   CPPUTEST_USE_GCOV - Turn on coverage analysis
+#		Clean then build with this flag set to Y, then 'make gcov'
+#   CPPUTEST_MAPFILE - generate a map file
+#   CPPUTEST_WARNINGFLAGS - overly picky by default
+#	OTHER_MAKEFILE_TO_INCLUDE - a hook to use this makefile to make
+#		other targets. Like CSlim, which is part of fitnesse
+#	CPPUTEST_USE_VPATH - Use Make's VPATH functionality to support user
+#		specification of source files and directories that aren't below
+#		the user's Makefile in the directory tree, like:
+#			SRC_DIRS += ../../lib/foo
+#		It defaults to N, and shouldn't be necessary except in the above case.
+#----------
+#
+#  Other flags users can initialize to sneak in their settings
+#	CPPUTEST_CXXFLAGS - flags for the C++ compiler
+#	CPPUTEST_CPPFLAGS - flags for the C++ AND C preprocessor
+#	CPPUTEST_CFLAGS - flags for the C complier
+#	CPPUTEST_LDFLAGS - Linker flags
+#----------
+
+# Some behavior is weird on some platforms. Need to discover the platform.
+
+# Platforms
+UNAME_OUTPUT = "$(shell uname -a)"
+MACOSX_STR = Darwin
+MINGW_STR = MINGW
+CYGWIN_STR = CYGWIN
+LINUX_STR = Linux
+SUNOS_STR = SunOS
+UNKNWOWN_OS_STR = Unknown
+
+# Compilers
+CC_VERSION_OUTPUT ="$(shell $(CXX) -v 2>&1)"
+CLANG_STR = clang
+SUNSTUDIO_CXX_STR = SunStudio
+
+UNAME_OS = $(UNKNWOWN_OS_STR)
+
+ifeq ($(findstring $(MINGW_STR),$(UNAME_OUTPUT)),$(MINGW_STR))
+	UNAME_OS = $(MINGW_STR)
+endif
+
+ifeq ($(findstring $(CYGWIN_STR),$(UNAME_OUTPUT)),$(CYGWIN_STR))
+	UNAME_OS = $(CYGWIN_STR)
+endif
+
+ifeq ($(findstring $(LINUX_STR),$(UNAME_OUTPUT)),$(LINUX_STR))
+	UNAME_OS = $(LINUX_STR)
+endif
+
+ifeq ($(findstring $(MACOSX_STR),$(UNAME_OUTPUT)),$(MACOSX_STR))
+	UNAME_OS = $(MACOSX_STR)
+#lion has a problem with the 'v' part of -a
+	UNAME_OUTPUT = "$(shell uname -pmnrs)"
+endif
+
+ifeq ($(findstring $(SUNOS_STR),$(UNAME_OUTPUT)),$(SUNOS_STR))
+	UNAME_OS = $(SUNOS_STR)
+
+	SUNSTUDIO_CXX_ERR_STR = CC -flags
+ifeq ($(findstring $(SUNSTUDIO_CXX_ERR_STR),$(CC_VERSION_OUTPUT)),$(SUNSTUDIO_CXX_ERR_STR))
+	CC_VERSION_OUTPUT ="$(shell $(CXX) -V 2>&1)"
+	COMPILER_NAME = $(SUNSTUDIO_CXX_STR)
+endif
+endif
+
+ifeq ($(findstring $(CLANG_STR),$(CC_VERSION_OUTPUT)),$(CLANG_STR))
+	COMPILER_NAME = $(CLANG_STR)
+endif
+
+#Kludge for mingw, it does not have cc.exe, but gcc.exe will do
+ifeq ($(UNAME_OS),$(MINGW_STR))
+	CC := gcc
+endif
+
+#And another kludge. Exception handling in gcc 4.6.2 is broken when linking the
+# Standard C++ library as a shared library. Unbelievable.
+ifeq ($(UNAME_OS),$(MINGW_STR))
+  CPPUTEST_LDFLAGS += -static
+endif
+ifeq ($(UNAME_OS),$(CYGWIN_STR))
+  CPPUTEST_LDFLAGS += -static
+endif
+
+
+#Kludge for MacOsX gcc compiler on Darwin9 who can't handle pendantic
+ifeq ($(UNAME_OS),$(MACOSX_STR))
+ifeq ($(findstring Version 9,$(UNAME_OUTPUT)),Version 9)
+	CPPUTEST_PEDANTIC_ERRORS = N
+endif
+endif
+
+ifndef COMPONENT_NAME
+    COMPONENT_NAME = name_this_in_the_makefile
+endif
+
+# Debug on by default
+ifndef CPPUTEST_ENABLE_DEBUG
+	CPPUTEST_ENABLE_DEBUG = Y
+endif
+
+# new and delete for memory leak detection on by default
+ifndef CPPUTEST_USE_MEM_LEAK_DETECTION
+	CPPUTEST_USE_MEM_LEAK_DETECTION = Y
+endif
+
+# Use the standard C library
+ifndef CPPUTEST_USE_STD_C_LIB
+	CPPUTEST_USE_STD_C_LIB = Y
+endif
+
+# Use the standard C++ library
+ifndef CPPUTEST_USE_STD_CPP_LIB
+	CPPUTEST_USE_STD_CPP_LIB = Y
+endif
+
+# Use gcov, off by default
+ifndef CPPUTEST_USE_GCOV
+	CPPUTEST_USE_GCOV = N
+endif
+
+ifndef CPPUTEST_PEDANTIC_ERRORS
+	CPPUTEST_PEDANTIC_ERRORS = Y
+endif
+
+# Default warnings
+ifndef CPPUTEST_WARNINGFLAGS
+	CPPUTEST_WARNINGFLAGS =  -Wall -Wextra -Wshadow -Wswitch-default -Wswitch-enum -Wconversion
+ifeq ($(CPPUTEST_PEDANTIC_ERRORS), Y)
+#	CPPUTEST_WARNINGFLAGS += -pedantic-errors
+	CPPUTEST_WARNINGFLAGS += -pedantic
+endif
+ifeq ($(UNAME_OS),$(LINUX_STR))
+	CPPUTEST_WARNINGFLAGS += -Wsign-conversion
+endif
+	CPPUTEST_CXX_WARNINGFLAGS = -Woverloaded-virtual
+	CPPUTEST_C_WARNINGFLAGS = -Wstrict-prototypes
+endif
+
+#Wonderful extra compiler warnings with clang
+ifeq ($(COMPILER_NAME),$(CLANG_STR))
+# -Wno-disabled-macro-expansion -> Have to disable the macro expansion warning as the operator new overload warns on that.
+# -Wno-padded -> I sort-of like this warning but if there is a bool at the end of the class, it seems impossible to remove it! (except by making padding explicit)
+# -Wno-global-constructors Wno-exit-time-destructors -> Great warnings, but in CppUTest it is impossible to avoid as the automatic test registration depends on the global ctor and dtor
+# -Wno-weak-vtables -> The TEST_GROUP macro declares a class and will automatically inline its methods. Thats ok as they are only in one translation unit. Unfortunately, the warning can't detect that, so it must be disabled.
+	CPPUTEST_CXX_WARNINGFLAGS += -Weverything -Wno-disabled-macro-expansion -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables
+	CPPUTEST_C_WARNINGFLAGS += -Weverything -Wno-padded
+endif
+
+# Uhm. Maybe put some warning flags for SunStudio here?
+ifeq ($(COMPILER_NAME),$(SUNSTUDIO_CXX_STR))
+	CPPUTEST_CXX_WARNINGFLAGS =
+	CPPUTEST_C_WARNINGFLAGS =
+endif
+
+# Default dir for temporary files (d, o)
+ifndef CPPUTEST_OBJS_DIR
+ifndef TARGET_PLATFORM
+    CPPUTEST_OBJS_DIR = objs
+else
+    CPPUTEST_OBJS_DIR = objs/$(TARGET_PLATFORM)
+endif
+endif
+
+# Default dir for the outout library
+ifndef CPPUTEST_LIB_DIR
+ifndef TARGET_PLATFORM
+    CPPUTEST_LIB_DIR = lib
+else
+    CPPUTEST_LIB_DIR = lib/$(TARGET_PLATFORM)
+endif
+endif
+
+# No map by default
+ifndef CPPUTEST_MAP_FILE
+	CPPUTEST_MAP_FILE = N
+endif
+
+# No extentions is default
+ifndef CPPUTEST_USE_EXTENSIONS
+	CPPUTEST_USE_EXTENSIONS = N
+endif
+
+# No VPATH is default
+ifndef CPPUTEST_USE_VPATH
+	CPPUTEST_USE_VPATH := N
+endif
+# Make empty, instead of 'N', for usage in $(if ) conditionals
+ifneq ($(CPPUTEST_USE_VPATH), Y)
+	CPPUTEST_USE_VPATH :=
+endif
+
+ifndef TARGET_PLATFORM
+#CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib
+CPPUTEST_LIB_LINK_DIR = /usr/lib/x86_64-linux-gnu
+else
+CPPUTEST_LIB_LINK_DIR = $(CPPUTEST_HOME)/lib/$(TARGET_PLATFORM)
+endif
+
+# --------------------------------------
+# derived flags in the following area
+# --------------------------------------
+
+# Without the C library, we'll need to disable the C++ library and ...
+ifeq ($(CPPUTEST_USE_STD_C_LIB), N)
+	CPPUTEST_USE_STD_CPP_LIB = N
+	CPPUTEST_USE_MEM_LEAK_DETECTION = N
+	CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_C_LIB_DISABLED
+	CPPUTEST_CPPFLAGS += -nostdinc
+endif
+
+CPPUTEST_CPPFLAGS += -DCPPUTEST_COMPILATION
+
+ifeq ($(CPPUTEST_USE_MEM_LEAK_DETECTION), N)
+	CPPUTEST_CPPFLAGS += -DCPPUTEST_MEM_LEAK_DETECTION_DISABLED
+else
+    ifndef CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE
+	    	CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorNewMacros.h
+    endif
+    ifndef CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE
+	    CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE = -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorMallocMacros.h
+	endif
+endif
+
+ifeq ($(CPPUTEST_ENABLE_DEBUG), Y)
+	CPPUTEST_CXXFLAGS += -g
+	CPPUTEST_CFLAGS += -g 
+	CPPUTEST_LDFLAGS += -g
+endif
+
+ifeq ($(CPPUTEST_USE_STD_CPP_LIB), N)
+	CPPUTEST_CPPFLAGS += -DCPPUTEST_STD_CPP_LIB_DISABLED
+ifeq ($(CPPUTEST_USE_STD_C_LIB), Y)
+	CPPUTEST_CXXFLAGS += -nostdinc++
+endif
+endif
+
+ifdef $(GMOCK_HOME)
+	GTEST_HOME = $(GMOCK_HOME)/gtest
+	CPPUTEST_CPPFLAGS += -I$(GMOCK_HOME)/include
+	GMOCK_LIBRARY = $(GMOCK_HOME)/lib/.libs/libgmock.a
+	LD_LIBRARIES += $(GMOCK_LIBRARY)
+	CPPUTEST_CPPFLAGS += -DINCLUDE_GTEST_TESTS
+	CPPUTEST_WARNINGFLAGS =
+	CPPUTEST_CPPFLAGS += -I$(GTEST_HOME)/include -I$(GTEST_HOME)
+	GTEST_LIBRARY = $(GTEST_HOME)/lib/.libs/libgtest.a
+	LD_LIBRARIES += $(GTEST_LIBRARY)
+endif
+
+
+ifeq ($(CPPUTEST_USE_GCOV), Y)
+	CPPUTEST_CXXFLAGS += -fprofile-arcs -ftest-coverage
+	CPPUTEST_CFLAGS += -fprofile-arcs -ftest-coverage
+endif
+
+CPPUTEST_CXXFLAGS += $(CPPUTEST_WARNINGFLAGS) $(CPPUTEST_CXX_WARNINGFLAGS)
+CPPUTEST_CPPFLAGS += $(CPPUTEST_WARNINGFLAGS)
+CPPUTEST_CXXFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_NEW_MACRO_FILE)
+CPPUTEST_CPPFLAGS += $(CPPUTEST_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE)
+CPPUTEST_CFLAGS += $(CPPUTEST_C_WARNINGFLAGS)
+
+TARGET_MAP = $(COMPONENT_NAME).map.txt
+ifeq ($(CPPUTEST_MAP_FILE), Y)
+	CPPUTEST_LDFLAGS += -Wl,-map,$(TARGET_MAP)
+endif
+
+# Link with CppUTest lib
+CPPUTEST_LIB = $(CPPUTEST_LIB_LINK_DIR)/libCppUTest.a
+
+ifeq ($(CPPUTEST_USE_EXTENSIONS), Y)
+CPPUTEST_LIB += $(CPPUTEST_LIB_LINK_DIR)/libCppUTestExt.a
+endif
+
+ifdef CPPUTEST_STATIC_REALTIME
+	LD_LIBRARIES += -lrt
+endif
+
+TARGET_LIB = \
+    $(CPPUTEST_LIB_DIR)/lib$(COMPONENT_NAME).a
+
+ifndef TEST_TARGET
+	ifndef TARGET_PLATFORM
+		TEST_TARGET = $(COMPONENT_NAME)_tests
+	else
+		TEST_TARGET = $(COMPONENT_NAME)_$(TARGET_PLATFORM)_tests
+	endif
+endif
+
+#Helper Functions
+get_src_from_dir  = $(wildcard $1/*.cpp) $(wildcard $1/*.cc) $(wildcard $1/*.c)
+get_dirs_from_dirspec  = $(wildcard $1)
+get_src_from_dir_list = $(foreach dir, $1, $(call get_src_from_dir,$(dir)))
+__src_to = $(subst .c,$1, $(subst .cc,$1, $(subst .cpp,$1,$(if $(CPPUTEST_USE_VPATH),$(notdir $2),$2))))
+src_to = $(addprefix $(CPPUTEST_OBJS_DIR)/,$(call __src_to,$1,$2))
+src_to_o = $(call src_to,.o,$1)
+src_to_d = $(call src_to,.d,$1)
+src_to_gcda = $(call src_to,.gcda,$1)
+src_to_gcno = $(call src_to,.gcno,$1)
+time = $(shell date +%s)
+delta_t = $(eval minus, $1, $2)
+debug_print_list = $(foreach word,$1,echo "  $(word)";) echo;
+
+#Derived
+STUFF_TO_CLEAN += $(TEST_TARGET) $(TEST_TARGET).exe $(TARGET_LIB) $(TARGET_MAP)
+
+SRC += $(call get_src_from_dir_list, $(SRC_DIRS)) $(SRC_FILES)
+OBJ = $(call src_to_o,$(SRC))
+
+STUFF_TO_CLEAN += $(OBJ)
+
+TEST_SRC += $(call get_src_from_dir_list, $(TEST_SRC_DIRS)) $(TEST_SRC_FILES)
+TEST_OBJS = $(call src_to_o,$(TEST_SRC))
+STUFF_TO_CLEAN += $(TEST_OBJS)
+
+
+MOCKS_SRC += $(call get_src_from_dir_list, $(MOCKS_SRC_DIRS))
+MOCKS_OBJS = $(call src_to_o,$(MOCKS_SRC))
+STUFF_TO_CLEAN += $(MOCKS_OBJS)
+
+ALL_SRC = $(SRC) $(TEST_SRC) $(MOCKS_SRC)
+
+# If we're using VPATH
+ifeq ($(CPPUTEST_USE_VPATH), Y)
+# gather all the source directories and add them
+	VPATH += $(sort $(dir $(ALL_SRC)))
+# Add the component name to the objs dir path, to differentiate between same-name objects
+	CPPUTEST_OBJS_DIR := $(addsuffix /$(COMPONENT_NAME),$(CPPUTEST_OBJS_DIR))
+endif
+
+#Test coverage with gcov
+GCOV_OUTPUT = gcov_output.txt
+GCOV_REPORT = gcov_report.txt
+GCOV_ERROR = gcov_error.txt
+GCOV_GCDA_FILES = $(call src_to_gcda, $(ALL_SRC))
+GCOV_GCNO_FILES = $(call src_to_gcno, $(ALL_SRC))
+TEST_OUTPUT = $(TEST_TARGET).txt
+STUFF_TO_CLEAN += \
+	$(GCOV_OUTPUT)\
+	$(GCOV_REPORT)\
+	$(GCOV_REPORT).html\
+	$(GCOV_ERROR)\
+	$(GCOV_GCDA_FILES)\
+	$(GCOV_GCNO_FILES)\
+	$(TEST_OUTPUT)
+
+#The gcda files for gcov need to be deleted before each run
+#To avoid annoying messages.
+GCOV_CLEAN = $(SILENCE)rm -f $(GCOV_GCDA_FILES) $(GCOV_OUTPUT) $(GCOV_REPORT) $(GCOV_ERROR)
+RUN_TEST_TARGET = $(SILENCE)  $(GCOV_CLEAN) ; echo "Running $(TEST_TARGET)"; ./$(TEST_TARGET) $(CPPUTEST_EXE_FLAGS) -ojunit
+
+ifeq ($(CPPUTEST_USE_GCOV), Y)
+
+	ifeq ($(COMPILER_NAME),$(CLANG_STR))
+		LD_LIBRARIES += --coverage
+	else
+		LD_LIBRARIES += -lgcov
+	endif
+endif
+
+
+INCLUDES_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(INCLUDE_DIRS))
+INCLUDES += $(foreach dir, $(INCLUDES_DIRS_EXPANDED), -I$(dir))
+MOCK_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(MOCKS_SRC_DIRS))
+INCLUDES += $(foreach dir, $(MOCK_DIRS_EXPANDED), -I$(dir))
+
+CPPUTEST_CPPFLAGS +=  $(INCLUDES) $(CPPUTESTFLAGS)
+
+DEP_FILES = $(call src_to_d, $(ALL_SRC))
+STUFF_TO_CLEAN += $(DEP_FILES) $(PRODUCTION_CODE_START) $(PRODUCTION_CODE_END)
+STUFF_TO_CLEAN += $(STDLIB_CODE_START) $(MAP_FILE) cpputest_*.xml junit_run_output
+
+# We'll use the CPPUTEST_CFLAGS etc so that you can override AND add to the CppUTest flags
+CFLAGS = $(CPPUTEST_CFLAGS) $(CPPUTEST_ADDITIONAL_CFLAGS)
+CPPFLAGS = $(CPPUTEST_CPPFLAGS) $(CPPUTEST_ADDITIONAL_CPPFLAGS)
+CXXFLAGS = $(CPPUTEST_CXXFLAGS) $(CPPUTEST_ADDITIONAL_CXXFLAGS)
+LDFLAGS = $(CPPUTEST_LDFLAGS) $(CPPUTEST_ADDITIONAL_LDFLAGS)
+
+# Don't consider creating the archive a warning condition that does STDERR output
+ARFLAGS := $(ARFLAGS)c
+
+DEP_FLAGS=-MMD -MP
+
+# Some macros for programs to be overridden. For some reason, these are not in Make defaults
+RANLIB = ranlib
+
+# Targets
+
+.PHONY: all
+all: start $(TEST_TARGET)
+	$(RUN_TEST_TARGET)
+
+.PHONY: start
+start: $(TEST_TARGET)
+	$(SILENCE)START_TIME=$(call time)
+
+.PHONY: all_no_tests
+all_no_tests: $(TEST_TARGET)
+
+.PHONY: flags
+flags:
+	@echo
+	@echo "OS ${UNAME_OS}"
+	@echo "Compile C and C++ source with CPPFLAGS:"
+	@$(call debug_print_list,$(CPPFLAGS))
+	@echo "Compile C++ source with CXXFLAGS:"
+	@$(call debug_print_list,$(CXXFLAGS))
+	@echo "Compile C source with CFLAGS:"
+	@$(call debug_print_list,$(CFLAGS))
+	@echo "Link with LDFLAGS:"
+	@$(call debug_print_list,$(LDFLAGS))
+	@echo "Link with LD_LIBRARIES:"
+	@$(call debug_print_list,$(LD_LIBRARIES))
+	@echo "Create libraries with ARFLAGS:"
+	@$(call debug_print_list,$(ARFLAGS))
+
+TEST_DEPS = $(TEST_OBJS) $(MOCKS_OBJS) $(PRODUCTION_CODE_START) $(TARGET_LIB) $(USER_LIBS) $(PRODUCTION_CODE_END) $(CPPUTEST_LIB) $(STDLIB_CODE_START)
+test-deps: $(TEST_DEPS)
+
+$(TEST_TARGET): $(TEST_DEPS)
+	@echo Linking $@
+	$(SILENCE)$(CXX) -o $@ $^ $(LD_LIBRARIES) $(LDFLAGS)
+
+$(TARGET_LIB): $(OBJ)
+	@echo Building archive $@
+	$(SILENCE)mkdir -p $(dir $@)
+	$(SILENCE)$(AR) $(ARFLAGS) $@ $^
+	$(SILENCE)$(RANLIB) $@
+
+test: $(TEST_TARGET)
+	$(RUN_TEST_TARGET) | tee $(TEST_OUTPUT)
+
+vtest: $(TEST_TARGET)
+	$(RUN_TEST_TARGET) -v  | tee $(TEST_OUTPUT)
+
+$(CPPUTEST_OBJS_DIR)/%.o: %.cc
+	@echo compiling $(notdir $<)
+	$(SILENCE)mkdir -p $(dir $@)
+	$(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $<
+
+$(CPPUTEST_OBJS_DIR)/%.o: %.cpp
+	@echo compiling $(notdir $<)
+	$(SILENCE)mkdir -p $(dir $@)
+	$(SILENCE)$(COMPILE.cpp) $(DEP_FLAGS) $(OUTPUT_OPTION) $<
+
+$(CPPUTEST_OBJS_DIR)/%.o: %.c
+	@echo compiling $(notdir $<)
+	$(SILENCE)mkdir -p $(dir $@)
+	$(SILENCE)$(COMPILE.c) $(DEP_FLAGS)  $(OUTPUT_OPTION) $<
+
+ifneq "$(MAKECMDGOALS)" "clean"
+-include $(DEP_FILES)
+endif
+
+.PHONY: clean
+clean:
+	@echo Making clean
+	$(SILENCE)$(RM) $(STUFF_TO_CLEAN)
+	$(SILENCE)rm -rf gcov objs #$(CPPUTEST_OBJS_DIR)
+	$(SILENCE)rm -rf $(CPPUTEST_LIB_DIR)
+	$(SILENCE)find . -name "*.gcno" | xargs rm -f
+	$(SILENCE)find . -name "*.gcda" | xargs rm -f
+
+#realclean gets rid of all gcov, o and d files in the directory tree
+#not just the ones made by this makefile
+.PHONY: realclean
+realclean: clean
+	$(SILENCE)rm -rf gcov
+	$(SILENCE)find . -name "*.gdcno" | xargs rm -f
+	$(SILENCE)find . -name "*.[do]" | xargs rm -f
+
+gcov: test
+ifeq ($(CPPUTEST_USE_VPATH), Y)
+	$(SILENCE)gcov --object-directory $(CPPUTEST_OBJS_DIR) $(SRC) >> $(GCOV_OUTPUT) 2>> $(GCOV_ERROR)
+else
+	$(SILENCE)for d in $(SRC_DIRS) ; do \
+		gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$d $$d/*.c $$d/*.cpp >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \
+	done
+	$(SILENCE)for f in $(SRC_FILES) ; do \
+		gcov --object-directory $(CPPUTEST_OBJS_DIR)/$$f $$f >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \
+	done
+endif
+#	$(CPPUTEST_HOME)/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT)
+	/usr/share/cpputest/scripts/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT)
+	$(SILENCE)cat $(GCOV_REPORT)
+	$(SILENCE)mkdir -p gcov
+	$(SILENCE)mv *.gcov gcov
+	$(SILENCE)mv gcov_* gcov
+	@echo "See gcov directory for details"
+
+.PHONEY: format
+format:
+	$(CPPUTEST_HOME)/scripts/reformat.sh $(PROJECT_HOME_DIR)
+
+.PHONEY: debug
+debug:
+	@echo
+	@echo "Target Source files:"
+	@$(call debug_print_list,$(SRC))
+	@echo "Target Object files:"
+	@$(call debug_print_list,$(OBJ))
+	@echo "Test Source files:"
+	@$(call debug_print_list,$(TEST_SRC))
+	@echo "Test Object files:"
+	@$(call debug_print_list,$(TEST_OBJS))
+	@echo "Mock Source files:"
+	@$(call debug_print_list,$(MOCKS_SRC))
+	@echo "Mock Object files:"
+	@$(call debug_print_list,$(MOCKS_OBJS))
+	@echo "All Input Dependency files:"
+	@$(call debug_print_list,$(DEP_FILES))
+	@echo Stuff to clean:
+	@$(call debug_print_list,$(STUFF_TO_CLEAN))
+	@echo Includes:
+	@$(call debug_print_list,$(INCLUDES))
+
+-include $(OTHER_MAKEFILE_TO_INCLUDE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/CThunk.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,202 @@
+/* General C++ Object Thunking class
+ *
+ * - allows direct callbacks to non-static C++ class functions
+ * - keeps track for the corresponding class instance
+ * - supports an optional context parameter for the called function
+ * - ideally suited for class object receiving interrupts (NVIC_SetVector)
+ *
+ * Copyright (c) 2014-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __CTHUNK_H__
+#define __CTHUNK_H__
+
+#define CTHUNK_ADDRESS 1
+
+#if defined(__CORTEX_M3) || defined(__CORTEX_M4) || defined(__thumb2__)
+#define CTHUNK_VARIABLES volatile uint32_t code[1]
+/**
+* CTHUNK disassembly for Cortex-M3/M4 (thumb2):
+* * ldm.w pc,{r0,r1,r2,pc}
+*
+* This instruction loads the arguments for the static thunking function to r0-r2, and
+* branches to that function by loading its address into PC.
+*
+* This is safe for both regular calling and interrupt calling, since it only touches scratch registers
+* which should be saved by the caller, and are automatically saved as part of the IRQ context switch.
+*/
+#define CTHUNK_ASSIGMENT m_thunk.code[0] = 0x8007E89F
+
+#elif defined(__CORTEX_M0PLUS) || defined(__CORTEX_M0)
+/*
+* CTHUNK disassembly for Cortex M0 (thumb):
+* * push {r0,r1,r2,r3,r4,lr} save touched registers and return address
+* * movs r4,#4 set up address to load arguments from (immediately following this code block) (1)
+* * add r4,pc set up address to load arguments from (immediately following this code block) (2)
+* * ldm r4!,{r0,r1,r2,r3} load arguments for static thunk function
+* * blx r3 call static thunk function
+* * pop {r0,r1,r2,r3,r4,pc} restore scratch registers and return from function
+*/
+#define CTHUNK_VARIABLES volatile uint32_t code[3]
+#define CTHUNK_ASSIGMENT do {                              \
+                             m_thunk.code[0] = 0x2404B51F; \
+                             m_thunk.code[1] = 0xCC0F447C; \
+                             m_thunk.code[2] = 0xBD1F4798; \
+                         } while (0)
+
+#else
+#error "Target is not currently suported."
+#endif
+
+/* IRQ/Exception compatible thunk entry function */
+typedef void (*CThunkEntry)(void);
+
+template<class T>
+class CThunk
+{
+    public:
+        typedef void (T::*CCallbackSimple)(void);
+        typedef void (T::*CCallback)(void* context);
+
+        inline CThunk(T *instance)
+        {
+            init(instance, NULL, NULL);
+        }
+
+        inline CThunk(T *instance, CCallback cb)
+        {
+            init(instance, cb, NULL);
+        }
+
+        ~CThunk() {
+
+        }
+
+        inline CThunk(T *instance, CCallbackSimple cb)
+        {
+            init(instance, (CCallback)cb, NULL);
+        }
+
+        inline CThunk(T &instance, CCallback cb)
+        {
+            init(instance, cb, NULL);
+        }
+
+        inline CThunk(T &instance, CCallbackSimple cb)
+        {
+            init(instance, (CCallback)cb, NULL);
+        }
+
+        inline CThunk(T &instance, CCallback cb, void* ctx)
+        {
+            init(instance, cb, ctx);
+        }
+
+        inline void callback(CCallback cb)
+        {
+            m_callback = cb;
+        }
+
+        inline void callback(CCallbackSimple cb)
+        {
+            m_callback = (CCallback)cb;
+        }
+
+        inline void context(void* ctx)
+        {
+            m_thunk.context = (uint32_t)ctx;
+        }
+
+        inline void context(uint32_t ctx)
+        {
+            m_thunk.context = ctx;
+        }
+        
+        inline uint32_t entry(void)
+        {
+            return (((uint32_t)&m_thunk)|CTHUNK_ADDRESS);
+        }
+
+        /* get thunk entry point for connecting rhunk to an IRQ table */
+        inline operator CThunkEntry(void)
+        {
+            return (CThunkEntry)entry();
+        }
+
+        /* get thunk entry point for connecting rhunk to an IRQ table */
+        inline operator uint32_t(void)
+        {
+            return entry();
+        }
+
+        /* simple test function */
+        inline void call(void)
+        {
+            (((CThunkEntry)(entry()))());
+        }
+
+    private:
+        T* m_instance;
+        volatile CCallback m_callback;
+
+// TODO: this needs proper fix, to refactor toolchain header file and all its use
+// PACKED there is not defined properly for IAR
+#if defined (__ICCARM__)
+        typedef __packed struct
+        {
+            CTHUNK_VARIABLES;
+            volatile uint32_t instance;
+            volatile uint32_t context;
+            volatile uint32_t callback;
+            volatile uint32_t trampoline;
+        }  CThunkTrampoline;
+#else
+        typedef struct
+        {
+            CTHUNK_VARIABLES;
+            volatile uint32_t instance;
+            volatile uint32_t context;
+            volatile uint32_t callback;
+            volatile uint32_t trampoline;
+        } __attribute__((__packed__)) CThunkTrampoline;
+#endif
+
+        static void trampoline(T* instance, void* ctx, CCallback* cb)
+        {
+            if(instance && *cb) {
+                (static_cast<T*>(instance)->**cb)(ctx);
+            }
+        }
+
+        volatile CThunkTrampoline m_thunk;
+
+        inline void init(T *instance, CCallback cb, void* ctx)
+        {
+            /* remember callback - need to add this level of redirection
+               as pointer size for member functions differs between platforms */
+            m_callback = cb;
+
+            /* populate thunking trampoline */
+//            CTHUNK_ASSIGMENT;
+//            m_thunk.context = (uint32_t)ctx;
+//            m_thunk.instance = (uint32_t)instance;
+//            m_thunk.callback = (uint32_t)&m_callback;
+//            m_thunk.trampoline = (uint32_t)&trampoline;
+
+//            __ISB();
+//            __DSB();
+        }
+};
+
+#endif/*__CTHUNK_H__*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/FunctionPointer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,604 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_FUNCTIONPOINTER_H
+#define MBED_FUNCTIONPOINTER_H
+
+#include <string.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <new>
+#include "FunctionPointerBase.h"
+#include "FunctionPointerBind.h"
+
+namespace mbed {
+/** A class for storing and calling a pointer to a static or member void function without arguments
+ */
+template <typename R>
+class FunctionPointer0 : public FunctionPointerBase<R>{
+public:
+    typedef R(*static_fp)(void);
+    typedef struct arg_struct{
+    } ArgStruct;
+    /** Create a FunctionPointer, attaching a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    FunctionPointer0(static_fp function = 0):
+        FunctionPointerBase<R>()
+    {
+        attach(function);
+    }
+
+    /** Create a FunctionPointer, attaching a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    FunctionPointer0(T *object, R (T::*member)(void)):
+        FunctionPointerBase<R>()
+    {
+        attach(object, member);
+    }
+
+    /** Attach a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    void attach(static_fp function) {
+        FunctionPointerBase<R>::_object = reinterpret_cast<void*>(function);
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer0::staticcaller;
+    }
+
+    /** Attach a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(void)) {
+        FunctionPointerBase<R>::_object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(void)>(FunctionPointerBase<R>::_member) = member;
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer0::membercaller<T>;
+    }
+
+    /** Call the attached static or member function
+     */
+    R call(){
+        return FunctionPointerBase<R>::call(NULL);
+    }
+
+    FunctionPointerBind<R> bind() {
+        FunctionPointerBind<R> fp;
+        fp.bind(&FunctionPointerBase<R>::_nullops, (ArgStruct *) NULL, this);
+        return fp;
+    }
+
+    static_fp get_function()const {
+        return reinterpret_cast<static_fp>(FunctionPointerBase<R>::_object);
+    }
+
+    R operator ()(void) {
+        return call();
+    }
+
+private:
+    template<typename T>
+    static R membercaller(void *object, uintptr_t *member, void *arg) {
+        (void) arg;
+        T* o = static_cast<T*>(object);
+        R (T::**m)(void) = reinterpret_cast<R (T::**)(void)>(member);
+        return (o->**m)();
+    }
+    static R staticcaller(void *object, uintptr_t *member, void *arg) {
+        (void) arg;
+        (void) member;
+        static_fp f = reinterpret_cast<static_fp>(object);
+        return f();
+    }
+};
+
+/* If we had variaditic templates, this wouldn't be a problem, but until C++11 is enabled, we are stuck with multiple classes... */
+
+/** A class for storing and calling a pointer to a static or member void function with one argument
+ */
+template <typename R, typename A1>
+class FunctionPointer1 : public FunctionPointerBase<R> {
+protected:
+    typedef struct arg_struct{
+        A1 a1;
+        arg_struct(const A1 *b1) {
+            a1 = *b1;
+        }
+    } ArgStruct;
+
+public:
+    typedef R(*static_fp)(A1);
+    /** Create a FunctionPointer, attaching a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    FunctionPointer1(static_fp function = 0) {
+        attach(function);
+    }
+
+    /** Create a FunctionPointer, attaching a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    FunctionPointer1(T *object, R (T::*member)(A1)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    void attach(static_fp function) {
+        FunctionPointerBase<R>::_object = reinterpret_cast<void*>(function);
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer1::staticcaller;
+    }
+
+    /** Attach a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(A1))
+    {
+        FunctionPointerBase<R>::_object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(A1)>(FunctionPointerBase<R>::_member) = member;
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer1::membercaller<T>;
+    }
+
+    FunctionPointerBind<R> bind(const A1 &a1) {
+        FunctionPointerBind<R> fp;
+        fp.bind(&_fp1_ops, (ArgStruct *) NULL, this, &a1);
+        return fp;
+    }
+
+
+    /** Call the attached static or member function
+     */
+    R call(A1 a1)
+    {
+        ArgStruct Args(&a1);
+        return FunctionPointerBase<R>::call(&Args);
+    }
+
+    static_fp get_function()const
+    {
+        return reinterpret_cast<static_fp>(FunctionPointerBase<R>::_object);
+    }
+
+    R operator ()(A1 a) {
+        return call(a);
+    }
+
+private:
+    template<typename T>
+    static R membercaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        T* o = static_cast<T*>(object);
+        R (T::**m)(A1) = reinterpret_cast<R (T::**)(A1)>(member);
+        return (o->**m)(Args->a1);
+    }
+    static R staticcaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        (void) member;
+        static_fp f = reinterpret_cast<static_fp>(object);
+        return f(Args->a1);
+    }
+/*    static void constructor(void * dest, va_list args) {
+        new(dest) ArgStruct(va_arg(args,A1*));
+    }
+    static void copy_constructor(void *dest , void* src) {
+        ArgStruct *src_args = static_cast<ArgStruct *>(src);
+        new(dest) ArgStruct(&(src_args->a1));
+    }
+    static void destructor(void *args) {
+        ArgStruct *argstruct = static_cast<ArgStruct *>(args);
+        argstruct->~arg_struct();
+    }
+*/
+protected:
+    static const struct FunctionPointerBase<R>::ArgOps _fp1_ops;
+};
+
+template <typename R, typename A1>
+const struct FunctionPointerBase<R>::ArgOps FunctionPointer1<R,A1>::_fp1_ops = {
+    FunctionPointer1<R,A1>::constructor,
+    FunctionPointer1<R,A1>::copy_constructor,
+    FunctionPointer1<R,A1>::destructor
+};
+
+
+/** A class for storing and calling a pointer to a static or member void function with two arguments
+ */
+template <typename R, typename A1, typename A2>
+class FunctionPointer2 : public FunctionPointerBase<R> {
+protected:
+    typedef struct arg_struct{
+        A1 a1;
+        A2 a2;
+        arg_struct(const A1 *b1, const A2 *b2) {
+            a1 = *b1;
+            a2 = *b2;
+        }
+    } ArgStruct;
+
+public:
+    typedef R(*static_fp)(A1, A2);
+    /** Create a FunctionPointer, attaching a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    FunctionPointer2(static_fp function = 0) {
+        attach(function);
+    }
+
+    /** Create a FunctionPointer, attaching a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    FunctionPointer2(T *object, R (T::*member)(A1, A2)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    void attach(static_fp function) {
+        FunctionPointerBase<R>::_object = reinterpret_cast<void*>(function);
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer2::staticcaller;
+    }
+
+    /** Attach a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(A1, A2))
+    {
+        FunctionPointerBase<R>::_object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(A1, A2)>(FunctionPointerBase<R>::_member) = member;
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer2::membercaller<T>;
+    }
+
+    FunctionPointerBind<R> bind(const A1 &a1, const A2 &a2) {
+        FunctionPointerBind<R> fp;
+        fp.bind(&_fp2_ops, (ArgStruct *) NULL, this, &a1, &a2);
+        return fp;
+    }
+
+
+    /** Call the attached static or member function
+     */
+    R call(A1 a1, A2 a2)
+    {
+        ArgStruct Args(&a1, &a2);
+        return FunctionPointerBase<R>::call(&Args);
+    }
+
+    static_fp get_function()const
+    {
+        return reinterpret_cast<static_fp>(FunctionPointerBase<R>::_object);
+    }
+
+    R operator ()(A1 a1, A2 a2) {
+        return call(a1, a2);
+    }
+
+private:
+    template<typename T>
+    static R membercaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        T* o = static_cast<T*>(object);
+        R (T::**m)(A1, A2) = reinterpret_cast<R (T::**)(A1, A2)>(member);
+        return (o->**m)(Args->a1, Args->a2);
+    }
+    static R staticcaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        (void) member;
+        static_fp f = reinterpret_cast<static_fp>(object);
+        return f(Args->a1, Args->a2);
+    }
+/*    static void constructor(void * dest, va_list args) {
+        A1 *a1 = va_arg(args, A1*);
+        A2 *a2 = va_arg(args, A2*);
+        new(dest) ArgStruct(a1, a2);
+    }
+    static void copy_constructor(void *dest , void* src) {
+        ArgStruct *src_args = static_cast<ArgStruct *>(src);
+        new(dest) ArgStruct(&(src_args->a1), &(src_args->a2));
+    }
+    static void destructor(void *args) {
+        ArgStruct *argstruct = static_cast<ArgStruct *>(args);
+        argstruct->~arg_struct();
+    }
+*/
+protected:
+    static const struct FunctionPointerBase<R>::ArgOps _fp2_ops;
+};
+
+template <typename R, typename A1, typename A2>
+const struct FunctionPointerBase<R>::ArgOps FunctionPointer2<R,A1,A2>::_fp2_ops = {
+    FunctionPointer2<R,A1,A2>::constructor,
+    FunctionPointer2<R,A1,A2>::copy_constructor,
+    FunctionPointer2<R,A1,A2>::destructor
+};
+
+/** A class for storing and calling a pointer to a static or member void function with three arguments
+ */
+template <typename R, typename A1, typename A2, typename A3>
+class FunctionPointer3 : public FunctionPointerBase<R> {
+protected:
+    typedef struct arg_struct{
+        A1 a1;
+        A2 a2;
+        A3 a3;
+        arg_struct(const A1 *b1, const A2 *b2, const A3* b3) {
+            a1 = *b1;
+            a2 = *b2;
+            a3 = *b3;
+        }
+    } ArgStruct;
+
+public:
+    typedef R(*static_fp)(A1, A2, A3);
+    /** Create a FunctionPointer, attaching a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    FunctionPointer3(static_fp function = 0) {
+        attach(function);
+    }
+
+    /** Create a FunctionPointer, attaching a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    FunctionPointer3(T *object, R (T::*member)(A1, A2, A3)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    void attach(static_fp function) {
+        FunctionPointerBase<R>::_object = reinterpret_cast<void*>(function);
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer3::staticcaller;
+    }
+
+    /** Attach a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(A1, A2, A3))
+    {
+        FunctionPointerBase<R>::_object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(A1, A2, A3)>(FunctionPointerBase<R>::_member) = member;
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer3::membercaller<T>;
+    }
+
+    FunctionPointerBind<R> bind(const A1 &a1, const A2 &a2, const A3 &a3) {
+        FunctionPointerBind<R> fp;
+        fp.bind(&_fp3_ops, (ArgStruct *) NULL, this, &a1, &a2, &a3);
+        return fp;
+    }
+
+
+    /** Call the attached static or member function
+     */
+    R call(A1 a1, A2 a2, A3 a3)
+    {
+        ArgStruct Args(&a1, &a2, &a3);
+        return FunctionPointerBase<R>::call(&Args);
+    }
+
+    static_fp get_function()const
+    {
+        return reinterpret_cast<static_fp>(FunctionPointerBase<R>::_object);
+    }
+
+    R operator ()(A1 a1, A2 a2, A3 a3) {
+        return call(a1, a2, a3);
+    }
+
+private:
+    template<typename T>
+    static R membercaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        T* o = static_cast<T*>(object);
+        R (T::**m)(A1, A2, A3) = reinterpret_cast<R (T::**)(A1, A2, A3)>(member);
+        return (o->**m)(Args->a1, Args->a2, Args->a3);
+    }
+    static R staticcaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        (void) member;
+        static_fp f = reinterpret_cast<static_fp>(object);
+        return f(Args->a1, Args->a2, Args->a3);
+    }
+/*    static void constructor(void * dest, va_list args) {
+        A1 *a1 = va_arg(args, A1*);
+        A2 *a2 = va_arg(args, A2*);
+        A3 *a3 = va_arg(args, A3*);
+        new(dest) ArgStruct(a1, a2, a3);
+    }
+    static void copy_constructor(void *dest , void* src) {
+        ArgStruct *src_args = static_cast<ArgStruct *>(src);
+        new(dest) ArgStruct(&(src_args->a1), &(src_args->a2), &(src_args->a3));
+    }
+    static void destructor(void *args) {
+        ArgStruct *argstruct = static_cast<ArgStruct *>(args);
+        argstruct->~arg_struct();
+    }
+*/
+protected:
+    static const struct FunctionPointerBase<R>::ArgOps _fp3_ops;
+};
+
+template <typename R, typename A1, typename A2, typename A3>
+const struct FunctionPointerBase<R>::ArgOps FunctionPointer3<R,A1,A2,A3>::_fp3_ops = {
+    FunctionPointer3<R,A1,A2,A3>::constructor,
+    FunctionPointer3<R,A1,A2,A3>::copy_constructor,
+    FunctionPointer3<R,A1,A2,A3>::destructor
+};
+
+/** A class for storing and calling a pointer to a static or member void function with four arguments
+ */
+template <typename R, typename A1, typename A2, typename A3, typename A4>
+class FunctionPointer4 : public FunctionPointerBase<R> {
+protected:
+    typedef struct arg_struct{
+        A1 a1;
+        A2 a2;
+        A3 a3;
+        A4 a4;
+        arg_struct(const A1 *b1, const A2 *b2, const A3* b3, const A4* b4) {
+            a1 = *b1;
+            a2 = *b2;
+            a3 = *b3;
+            a4 = *b4;
+        }
+    } ArgStruct;
+
+public:
+    typedef R(*static_fp)(A1, A2, A3, A4);
+    /** Create a FunctionPointer, attaching a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    FunctionPointer4(static_fp function = 0) {
+        attach(function);
+    }
+
+    /** Create a FunctionPointer, attaching a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    FunctionPointer4(T *object, R (T::*member)(A1, A2, A3, A4)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    void attach(static_fp function) {
+        FunctionPointerBase<R>::_object = reinterpret_cast<void*>(function);
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer4::staticcaller;
+    }
+
+    /** Attach a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(A1, A2, A3, A4))
+    {
+        FunctionPointerBase<R>::_object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(A1, A2, A3, A4)>(FunctionPointerBase<R>::_member) = member;
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer4::membercaller<T>;
+    }
+
+    FunctionPointerBind<R> bind(const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4) {
+        FunctionPointerBind<R> fp;
+        fp.bind(&_fp4_ops, (ArgStruct *) NULL, this, &a1, &a2, &a3, &a4);
+        return fp;
+    }
+
+
+    /** Call the attached static or member function
+     */
+    R call(A1 a1, A2 a2, A3 a3, A4 a4)
+    {
+        ArgStruct Args(&a1, &a2, &a3, &a4);
+        return FunctionPointerBase<R>::call(&Args);
+    }
+
+    static_fp get_function()const
+    {
+        return reinterpret_cast<static_fp>(FunctionPointerBase<R>::_object);
+    }
+
+    R operator ()(A1 a1, A2 a2, A3 a3, A4 a4) {
+        return call(a1, a2, a3, a4);
+    }
+
+private:
+    template<typename T>
+    static R membercaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        T* o = static_cast<T*>(object);
+        R (T::**m)(A1, A2, A3, A4) = reinterpret_cast<R (T::**)(A1, A2, A3, A4)>(member);
+        return (o->**m)(Args->a1, Args->a2, Args->a3, Args->a4);
+    }
+    static R staticcaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        (void) member;
+        static_fp f = reinterpret_cast<static_fp>(object);
+        return f(Args->a1, Args->a2, Args->a3, Args->a4);
+    }
+/*    static void constructor(void * dest, va_list args) {
+        A1 *a1 = va_arg(args, A1*);
+        A2 *a2 = va_arg(args, A2*);
+        A3 *a3 = va_arg(args, A3*);
+        A4 *a4 = va_arg(args, A4*);
+        new(dest) ArgStruct(a1, a2, a3, a4);
+    }
+    static void copy_constructor(void *dest , void* src) {
+        ArgStruct *src_args = static_cast<ArgStruct *>(src);
+        new(dest) ArgStruct(&(src_args->a1), &(src_args->a2), &(src_args->a3), &(src_args->a4));
+    }
+    static void destructor(void *args) {
+        ArgStruct *argstruct = static_cast<ArgStruct *>(args);
+        argstruct->~arg_struct();
+    }
+*/
+protected:
+    static const struct FunctionPointerBase<R>::ArgOps _fp4_ops;
+};
+
+template <typename R, typename A1, typename A2, typename A3, typename A4>
+const struct FunctionPointerBase<R>::ArgOps FunctionPointer4<R,A1,A2,A3,A4>::_fp4_ops = {
+    FunctionPointer4<R,A1,A2,A3,A4>::constructor,
+    FunctionPointer4<R,A1,A2,A3,A4>::copy_constructor,
+    FunctionPointer4<R,A1,A2,A3,A4>::destructor
+};
+
+typedef FunctionPointer0<void> FunctionPointer;
+//typedef FunctionPointer1<void, int> event_callback_t;
+
+} // namespace mbed
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/FunctionPointerBase.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_FUNCTIONPOINTERBASE_H
+#define MBED_FUNCTIONPOINTERBASE_H
+
+#include <string.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <stdarg.h>
+namespace mbed {
+
+template<typename R>
+class FunctionPointerBase {
+public:
+    operator bool(void) const {
+        return (_membercaller != NULL) && (_object != NULL);
+    }
+
+    /**
+     * Clears the current function pointer assignment
+     * After clear(), this instance will point to nothing (NULL)
+     */
+    virtual void clear() {
+        _membercaller = NULL;
+        _object = NULL;
+    }
+
+protected:
+    struct ArgOps {
+        void (*constructor)(void *, va_list);
+        void (*copy_args)(void *, void *);
+        void (*destructor)(void *);
+    };
+    void * _object; // object Pointer/function pointer
+    R (*_membercaller)(void *, uintptr_t *, void *);
+    // aligned raw member function pointer storage - converted back by registered _membercaller
+    uintptr_t _member[4];
+    static const struct ArgOps _nullops;
+
+protected:
+    FunctionPointerBase():_object(NULL), _membercaller(NULL) {}
+    FunctionPointerBase(const FunctionPointerBase<R> & fp) {
+        copy(&fp);
+    }
+    virtual ~FunctionPointerBase() {
+    }
+
+    /**
+     * Calls the member pointed to by object::member or (function)object
+     * @param arg
+     * @return
+     */
+    inline R call(void* arg) {
+        return _membercaller(_object, _member, arg);
+    }
+
+    void copy(const FunctionPointerBase<R> * fp) {
+        _object = fp->_object;
+        memcpy (_member, fp->_member, sizeof(_member));
+        _membercaller = fp->_membercaller;
+    }
+private:
+    static void _null_constructor(void * dest, va_list args) {(void) dest;(void) args;}
+    static void _null_copy_args(void *dest , void* src) {(void) dest; (void) src;}
+    static void _null_destructor(void *args) {(void) args;}
+
+};
+template<typename R>
+const struct FunctionPointerBase<R>::ArgOps FunctionPointerBase<R>::_nullops = {
+    FunctionPointerBase<R>::_null_constructor,
+    FunctionPointerBase<R>::_null_copy_args,
+    FunctionPointerBase<R>::_null_destructor
+};
+
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/FunctionPointerBind.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,112 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MBED_FUNCTIONPOINTERBIND_H__
+#define MBED_FUNCTIONPOINTERBIND_H__
+
+#include <string.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <assert.h>
+#include "FunctionPointerBase.h"
+
+#ifndef EVENT_STORAGE_SIZE
+#define EVENT_STORAGE_SIZE 32
+#endif
+
+#define MBED_STATIC_ASSERT(MBED_STATIC_ASSERT_FAILED,MSG)\
+    switch(0){\
+        case 0:case (MBED_STATIC_ASSERT_FAILED): \
+        break;}
+
+namespace mbed{
+
+template<typename R>
+class FunctionPointerBind : public FunctionPointerBase<R> {
+public:
+    // Call the Event
+    inline R call() {
+        return FunctionPointerBase<R>::call(static_cast<void *>(_storage));
+    }
+    FunctionPointerBind():
+        FunctionPointerBase<R>(),
+        _ops(&FunctionPointerBase<R>::_nullops)
+    {}
+
+    FunctionPointerBind(const FunctionPointerBind<R> & fp):
+        FunctionPointerBase<R>(),
+        _ops(&FunctionPointerBase<R>::_nullops) {
+        *this = fp;
+    }
+
+    virtual ~FunctionPointerBind() {
+        _ops->destructor(_storage);
+    }
+
+    FunctionPointerBind<R> & operator=(const FunctionPointerBind<R>& rhs) {
+        if (_ops != &FunctionPointerBase<R>::_nullops) {
+            _ops->destructor(_storage);
+        }
+        FunctionPointerBase<R>::copy(&rhs);
+        _ops = rhs._ops;
+        _ops->copy_args(_storage, (void *)rhs._storage);
+        return *this;
+    }
+
+    /**
+     * Clears the current binding, making this instance unbound
+     */
+    virtual void clear() {
+        if (_ops != &FunctionPointerBase<R>::_nullops) {
+            _ops->destructor(_storage);
+        }
+        _ops = &FunctionPointerBase<R>::_nullops;
+        FunctionPointerBase<R>::clear();
+    }
+
+    template<typename S>
+    FunctionPointerBind<R> & bind(const struct FunctionPointerBase<R>::ArgOps * ops , S * argStruct, FunctionPointerBase<R> *fp, ...) {
+        MBED_STATIC_ASSERT(sizeof(S) <= sizeof(_storage), ERROR: Arguments too large for FunctionPointerBind internal storage)
+        if (_ops != &FunctionPointerBase<R>::_nullops) {
+            _ops->destructor(_storage);
+        }
+        _ops = ops;
+        FunctionPointerBase<R>::copy(fp);
+        assert(this->_ops != NULL);
+        assert(this->_ops->constructor != NULL);
+        if (argStruct) {
+            this->_ops->copy_args(this->_storage, (void *)argStruct);
+        } else {
+            va_list args;
+            va_start(args, fp);
+            this->_ops->constructor(_storage, args);
+            va_end(args);
+        }
+        return *this;
+    }
+
+    R operator()() {
+        return call();
+    }
+
+protected:
+    const struct FunctionPointerBase<R>::ArgOps * _ops;
+    uint32_t _storage[(EVENT_STORAGE_SIZE+sizeof(uint32_t)-1)/sizeof(uint32_t)];
+};
+}
+
+#endif // MBED_FUNCTIONPOINTERBIND_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/Ticker.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TICKER_H
+#define TICKER_H
+
+namespace mbed
+{
+typedef uint64_t timestamp_t;
+
+    class Ticker{
+    public :
+        Ticker() {}
+        ~Ticker(){}
+
+        // Ticker
+        template<typename T>
+        void attach_us(T* tptr, void (T::*mptr)(void), timestamp_t){}
+
+        void detach();
+    };
+}
+
+#endif // TICKER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/alltests.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+//#include "../m2mbase/m2mbasetest.h"
+#include "../m2mobject/m2mobjecttest.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/ip6string.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2014-2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef IP6STRING_H
+#define IP6STRING_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+/**
+ * Print binary IPv6 address to a string.
+ * String must contain enough room for full address, 40 bytes exact.
+ * IPv4 tunneling addresses are not covered.
+ * \param ip6addr IPv6 address.
+ * \p buffer to write string to.
+ */
+uint_fast8_t ip6tos(const void *ip6addr, char *p);
+
+/**
+ * Convert numeric IPv6 address string to a binary.
+ * IPv4 tunneling addresses are not covered.
+ * \param ip6addr IPv6 address in string format.
+ * \param len Lenght of ipv6 string, maximum of 41.
+ * \param dest buffer for address. MUST be 16 bytes.
+ */
+void stoip6(const char *ip6addr, size_t len, void *dest);
+/**
+ * Find out numeric IPv6 address prefix length
+ * \param ip6addr  IPv6 address in string format
+ * \return prefix length or 0 if it not given
+ */
+unsigned char sipv6_prefixlength(const char *ip6addr);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/mbed.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_H
+#define MBED_H
+
+#include <cstdio>
+#include <cstring>
+
+#endif // MBED_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/ns_list.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,736 @@
+/*
+ * Copyright (c) 2014-2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef NS_LIST_H_
+#define NS_LIST_H_
+
+#include "ns_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \file
+ * \brief Linked list support library
+ *
+ * The ns_list.h file provides a doubly-linked list/queue, providing O(1)
+ * performance for all insertion/removal operations, and access to either
+ * end of the list.
+ *
+ * Memory footprint is two pointers for the list head, and two pointers in each
+ * list entry. It is similar in concept to BSD's TAILQ.
+ *
+ * Although the API is symmetrical and O(1) in both directions, due to internal
+ * pointer design, it is *slightly* more efficient to insert at the end when
+ * used as a queue, and to iterate forwards rather than backwards.
+ *
+ * Example of an entry type that can be stored to this list.
+ * ~~~
+ *     typedef struct example_entry
+ *     {
+ *         uint8_t        *data;
+ *         uint32_t       data_count;
+ *         ns_list_link_t link;
+ *     }
+ *     example_entry_t;
+ *
+ *     static NS_LIST_HEAD(example_entry_t, link) my_list;
+ *     ns_list_init(&my_list);
+ * ~~~
+ * OR
+ * ~~~
+ *     NS_LIST_HEAD(example_entry_t, link) my_list = NS_LIST_INIT(my_list);
+ * ~~~
+ * OR
+ * ~~~
+ *     static NS_LIST_DEFINE(my_list, example_entry_t, link);
+ * ~~~
+ * OR
+ * ~~~
+ *     typedef NS_LIST_HEAD(example_entry_t, link) example_list_t;
+ *     example_list_t NS_LIST_NAME_INIT(my_list);
+ * ~~~
+ * NOTE: the link field SHALL NOT be accessed by the user.
+ *
+ * An entry can exist on multiple lists by having multiple link fields.
+ *
+ * All the list operations are implemented as macros, most of which are backed
+ * by optionally-inline functions. The macros do not evaluate any arguments more
+ * than once, unless documented.
+ *
+ * In macro documentation, `list_t` refers to a list type defined using
+ * NS_LIST_HEAD(), and `entry_t` to the entry type that was passed to it.
+ */
+
+/** \brief Underlying generic linked list head.
+ *
+ * Users should not use this type directly, but use the NS_LIST_HEAD() macro.
+ */
+typedef struct ns_list
+{
+	void *first_entry;		///< Pointer to first entry, or NULL if list is empty
+	void **last_nextptr;	///< Pointer to last entry's `next` pointer, or
+							///< to head's `first_entry` pointer if list is empty
+} ns_list_t;
+
+/** \brief Declare a list head type
+ *
+ * This union stores the real list head, and also encodes as compile-time type
+ * information the offset of the link pointer, and the type of the entry.
+ *
+ * Note that type information is compiler-dependent; this means
+ * ns_list_get_first() could return either `void *`, or a pointer to the actual
+ * entry type. So `ns_list_get_first()->data` is not a portable construct -
+ * always assign returned entry pointers to a properly typed pointer variable.
+ * This assignment will be then type-checked where the compiler supports it, and
+ * will dereference correctly on compilers that don't support this extension.
+ * ~~~
+ *     NS_LIST_HEAD(example_entry_t, link) my_list;
+ *
+ *     example_entry_t *entry = ns_list_get_first(&my_list);
+ *     do_something(entry->data);
+ * ~~~
+ * Each use of this macro generates a new anonymous union, so these two lists
+ * have different types:
+ * ~~~
+ *     NS_LIST_HEAD(example_entry_t, link) my_list1;
+ *     NS_LIST_HEAD(example_entry_t, link) my_list2;
+ * ~~~
+ * If you need to use a list type in multiple places, eg as a function
+ * parameter, use typedef:
+ * ~~~
+ *     typedef NS_LIST_HEAD(example_entry_t, link) example_list_t;
+ *
+ *     void example_function(example_list_t *);
+ * ~~~
+ */
+#define NS_LIST_HEAD(entry_type, field) \
+union \
+{ \
+    ns_list_t slist; \
+    NS_STATIC_ASSERT(offsetof(entry_type, field) <= UINT_FAST8_MAX, "link offset too large") \
+    char (*offset)[offsetof(entry_type, field)]; \
+	entry_type *type; \
+}
+
+/// \privatesection
+/** \brief Get offset of link field in entry.
+ * \return `(ns_list_offset_t)` The offset of the link field for entries on the specified list
+ */
+#define NS_LIST_OFFSET_(list) ((ns_list_offset_t) sizeof *(list)->offset)
+
+/** \brief Get the entry type.
+ * \def NS_LIST_TYPE_
+ *
+ * \return The type of entry on the specified list.
+ *
+ * Only available if the compiler provides a "typeof" operator.
+ */
+#if defined __cplusplus && __cplusplus >= 201103L
+#define NS_LIST_TYPE_(list) decltype(*(list)->type)
+#elif defined __GNUC__
+#define NS_LIST_TYPE_(list) __typeof__(*(list)->type)
+#endif
+
+/** \brief Check for compatible pointer types
+ *
+ * Although this can be done portably, the GCC custom version is provided to
+ * produce a clearer diagnostic, and it produces an error rather than a warning.
+ *
+ * The portable version will produce a diagnostic about a pointer mismatch on
+ * the == inside the sizeof operator. For example ARM/Norcroft C gives the error:
+ *
+ *     operand types are incompatible ("entry_t *" and "other_t *")
+ */
+#ifdef CPPCHECK
+#define NS_PTR_MATCH_(a, b, str) ((void) 0)
+#elif defined __GNUC__
+#define NS_PTR_MATCH_(a, b, str) __extension__ \
+	({ NS_STATIC_ASSERT(__builtin_types_compatible_p(__typeof__ (*(a)), __typeof__ (*(b))), \
+						str) })
+#else
+#define NS_PTR_MATCH_(a, b, str) ((void) sizeof ((a) == (b)))
+#endif
+
+/** \brief Internal macro to cast returned entry pointers to correct type.
+ *
+ * Not portable in C, alas. With GCC or C++11, the "get entry" macros return
+ * correctly-typed pointers. Otherwise, the macros return `void *`.
+ *
+ * The attempt at a portable version would work if the C `?:` operator wasn't
+ * broken - `x ? (t *) : (void *)` should really have type `(t *)` in C, but
+ * it has type `(void *)`, which only makes sense for C++. The `?:` is left in,
+ * in case some day it works. Some compilers may still warn if this is
+ * assigned to a different type.
+ */
+#ifdef NS_LIST_TYPE_
+#define NS_LIST_TYPECAST_(list, val) ((NS_LIST_TYPE_(list) *) (val))
+#else
+#define NS_LIST_TYPECAST_(list, val) (0 ? (list)->type : (val))
+#endif
+
+/** \brief Internal macro to check types of input entry pointer. */
+#define NS_LIST_TYPECHECK_(list, entry) \
+	(NS_PTR_MATCH_((list)->type, (entry), "incorrect entry type for list"), (entry))
+
+/** \brief Type used to pass link offset to underlying functions
+ *
+ * We could use size_t, but it would be unnecessarily large on 8-bit systems,
+ * where we can be (pretty) confident we won't have next pointers more than
+ * 256 bytes into a structure.
+ */
+typedef uint_fast8_t ns_list_offset_t;
+
+/// \publicsection
+/** \brief The type for the link member in the user's entry structure.
+ *
+ * Users should not access this member directly - just pass its name to the
+ * list head macros. The funny prev pointer simplifies common operations
+ * (eg insertion, removal), at the expense of complicating rare reverse iteration.
+ *
+ * NB - the list implementation relies on next being the first member.
+ */
+typedef struct ns_list_link
+{
+	void *next;		///< Pointer to next entry, or NULL if none
+	void **prev;	///< Pointer to previous entry's (or head's) next pointer
+} ns_list_link_t;
+
+/** \brief "Poison" value placed in unattached entries' link pointers.
+ * \internal What are good values for this? Platform dependent, maybe just NULL
+ */
+#define NS_LIST_POISON ((void *) 0xDEADBEEF)
+
+/** \brief Initialiser for an entry's link member
+ *
+ * This initialiser is not required by the library, but a user may want an
+ * initialiser to include in their own entry initialiser. See
+ * ns_list_link_init() for more discussion.
+ */
+#define NS_LIST_LINK_INIT(name) \
+	NS_FUNNY_INTPTR_OK \
+	{ NS_LIST_POISON, NS_LIST_POISON } \
+	NS_FUNNY_INTPTR_RESTORE
+
+/** \hideinitializer \brief Initialise an entry's list link
+ *
+ * This "initialises" an unattached entry's link by filling the fields with
+ * poison. This is optional, as unattached entries field pointers are not
+ * meaningful, and it is not valid to call ns_list_get_next or similar on
+ * an unattached entry.
+ *
+ * \param entry Pointer to an entry
+ * \param field The name of the link member to initialise
+ */
+#define ns_list_link_init(entry, field) ns_list_link_init_(&(entry)->field)
+
+/** \hideinitializer \brief Initialise a list
+ *
+ * Initialise a list head before use. A list head must be initialised using this
+ * function or one of the NS_LIST_INIT()-type macros before use. A zero-initialised
+ * list head is *not* valid.
+ *
+ * If used on a list containing existing entries, those entries will
+ * become detached. (They are not modified, but their links are now effectively
+ * undefined).
+ *
+ * \param list Pointer to a NS_LIST_HEAD() structure.
+ */
+#define ns_list_init(list) ns_list_init_(&(list)->slist)
+
+/** \brief Initialiser for an empty list
+ *
+ * Usage in an enclosing initialiser:
+ * ~~~
+ *      static my_type_including_list_t x = {
+ *          "Something",
+ *          23,
+ *          NS_LIST_INIT(x),
+ *      };
+ * ~~~
+ * NS_LIST_DEFINE() or NS_LIST_NAME_INIT() may provide a shorter alternative
+ * in simpler cases.
+ */
+#define NS_LIST_INIT(name) { { NULL, &(name).slist.first_entry } }
+
+/** \brief Name and initialiser for an empty list
+ *
+ * Usage:
+ * ~~~
+ *      list_t NS_LIST_NAME_INIT(foo);
+ * ~~~
+ * acts as
+ * ~~~
+ *      list_t foo = { empty list };
+ * ~~~
+ * Also useful with designated initialisers:
+ * ~~~
+ *      .NS_LIST_NAME_INIT(foo),
+ * ~~~
+ * acts as
+ * ~~~
+ *      .foo = { empty list },
+ * ~~~
+ */
+#define NS_LIST_NAME_INIT(name) name = NS_LIST_INIT(name)
+
+/** \brief Define a list, and initialise to empty.
+ *
+ * Usage:
+ * ~~~
+ *     static NS_LIST_DEFINE(my_list, entry_t, link);
+ * ~~~
+ * acts as
+ * ~~~
+ *     static list_type my_list = { empty list };
+ * ~~~
+ */
+#define NS_LIST_DEFINE(name, type, field) \
+	NS_LIST_HEAD(type, field) NS_LIST_NAME_INIT(name)
+
+/** \hideinitializer \brief Add an entry to the start of the linked list.
+ *
+ * ns_list_add_to_end() is *slightly* more efficient than ns_list_add_to_start().
+ *
+ * \param list  `(list_t *)`           Pointer to list.
+ * \param entry `(entry_t * restrict)` Pointer to new entry to add.
+ */
+#define ns_list_add_to_start(list, entry) \
+	ns_list_add_to_start_(&(list)->slist, NS_LIST_OFFSET_(list), NS_LIST_TYPECHECK_(list, entry))
+
+/** \hideinitializer \brief Add an entry to the end of the linked list.
+ *
+ * \param list  `(list_t *)`           Pointer to list.
+ * \param entry `(entry_t * restrict)` Pointer to new entry to add.
+ */
+#define ns_list_add_to_end(list, entry) \
+	ns_list_add_to_end_(&(list)->slist, NS_LIST_OFFSET_(list), NS_LIST_TYPECHECK_(list, entry))
+
+/** \hideinitializer \brief Add an entry before a specified entry.
+ *
+ * \param list   `(list_t *)`           Pointer to list.
+ * \param before `(entry_t *)`          Existing entry before which to place the new entry.
+ * \param entry  `(entry_t * restrict)` Pointer to new entry to add.
+ */
+#define ns_list_add_before(list, before, entry) \
+	ns_list_add_before_(NS_LIST_OFFSET_(list), NS_LIST_TYPECHECK_(list, before), NS_LIST_TYPECHECK_(list, entry))
+
+/** \hideinitializer \brief Add an entry after a specified entry.
+ *
+ * ns_list_add_before() is *slightly* more efficient than ns_list_add_after().
+ *
+ * \param list  `(list_t *)`           Pointer to list.
+ * \param after `(entry_t *)`          Existing entry after which to place the new entry.
+ * \param entry `(entry_t * restrict)` Pointer to new entry to add.
+ */
+#define ns_list_add_after(list, after, entry) \
+	ns_list_add_after_(&(list)->slist, NS_LIST_OFFSET_(list), NS_LIST_TYPECHECK_(list, after), NS_LIST_TYPECHECK_(list, entry))
+
+/** \brief Check if a list is empty.
+ *
+ * \param list `(const list_t *)` Pointer to list.
+ *
+ * \return     `(bool)`           true if the list is empty.
+ */
+#define ns_list_is_empty(list) ((bool) ((list)->slist.first_entry == NULL))
+
+/** \brief Get the first entry.
+ *
+ * \param list `(const list_t *)` Pointer to list.
+ *
+ * \return     `(entry_t *)`      Pointer to first entry.
+ * \return                        NULL if list is empty.
+ */
+#define ns_list_get_first(list) NS_LIST_TYPECAST_(list, (list)->slist.first_entry)
+
+/** \hideinitializer \brief Get the previous entry.
+ *
+ * \param list    `(const list_t *)`  Pointer to list.
+ * \param current `(const entry_t *)` Pointer to current entry.
+ *
+ * \return        `(entry_t *)`       Pointer to previous entry.
+ * \return                            NULL if current entry is first.
+ */
+#define ns_list_get_previous(list, current) \
+	NS_LIST_TYPECAST_(list, ns_list_get_previous_(&(list)->slist, NS_LIST_OFFSET_(list), NS_LIST_TYPECHECK_(list, current)))
+
+/** \hideinitializer \brief Get the next entry.
+ *
+ * \param list    `(const list_t *)`  Pointer to list.
+ * \param current `(const entry_t *)` Pointer to current entry.
+ *
+ * \return        `(entry_t *)`       Pointer to next entry.
+ * \return                            NULL if current entry is last.
+ */
+#define ns_list_get_next(list, current) \
+	NS_LIST_TYPECAST_(list, ns_list_get_next_(NS_LIST_OFFSET_(list), NS_LIST_TYPECHECK_(list, current)))
+
+/** \hideinitializer \brief Get the last entry.
+ *
+ * \param list `(const list_t *)` Pointer to list.
+ *
+ * \return     `(entry_t *)`      Pointer to last entry.
+ * \return                        NULL if list is empty.
+ */
+#define ns_list_get_last(list) \
+	NS_LIST_TYPECAST_(list, ns_list_get_last_(&(list)->slist, NS_LIST_OFFSET_(list)))
+
+/** \hideinitializer \brief Remove an entry.
+ *
+ * \param list  `(list_t *)`  Pointer to list.
+ * \param entry `(entry_t *)` Entry on list to be removed.
+ */
+#define ns_list_remove(list, entry) \
+	ns_list_remove_(&(list)->slist, NS_LIST_OFFSET_(list), NS_LIST_TYPECHECK_(list, entry))
+
+/** \hideinitializer \brief Replace an entry.
+ *
+ * \param list        `(list_t *)`           Pointer to list.
+ * \param current     `(entry_t *)`          Existing entry on list to be replaced.
+ * \param replacement `(entry_t * restrict)` New entry to be the replacement.
+ */
+#define ns_list_replace(list, current, replacement) \
+	ns_list_replace_(&(list)->slist, NS_LIST_OFFSET_(list), NS_LIST_TYPECHECK_(list, current), NS_LIST_TYPECHECK_(list, replacement))
+
+/** \hideinitializer \brief Concatenate two lists.
+ *
+ * Attach the entries on the source list to the end of the destination
+ * list, leaving the source list empty.
+ *
+ * \param dst `(list_t *)` Pointer to destination list.
+ * \param src `(list_t *)` Pointer to source list.
+ *
+ */
+#define ns_list_concatenate(dst, src) \
+		(NS_PTR_MATCH_(dst, src, "concatenating different list types"), \
+		ns_list_concatenate_(&(dst)->slist, &(src)->slist, NS_LIST_OFFSET_(src)))
+
+/** \brief Iterate forwards over a list.
+ *
+ * Example:
+ * ~~~
+ *     ns_list_foreach(const my_entry_t, cur, &my_list)
+ *     {
+ *         printf("%s\n", cur->name);
+ *     }
+ * ~~~
+ * Deletion of the current entry is not permitted as its next is checked after
+ * running user code.
+ *
+ * The iteration pointer is declared inside the loop, using C99/C++, so it
+ * is not accessible after the loop.  This encourages good code style, and
+ * matches the semantics of C++11's "ranged for", which only provides the
+ * declaration form:
+ * ~~~
+ *     for (const my_entry_t cur : my_list)
+ * ~~~
+ * If you need to see the value of the iteration pointer after a `break`,
+ * you will need to assign it to a variable declared outside the loop before
+ * breaking:
+ * ~~~
+ *      my_entry_t *match = NULL;
+ *      ns_list_foreach(my_entry_t, cur, &my_list)
+ *      {
+ *          if (cur->id == id)
+ *          {
+ *              match = cur;
+ *              break;
+ *          }
+ *      }
+ * ~~~
+ *
+ * The user has to specify the entry type for the pointer definition, as type
+ * extraction from the list argument isn't portable. On the other hand, this
+ * also permits const qualifiers, as in the example above, and serves as
+ * documentation. The entry type will be checked against the list type where the
+ * compiler supports it.
+ *
+ * \param type                    Entry type `([const] entry_t)`.
+ * \param e                       Name for iteration pointer to be defined
+ *                                inside the loop.
+ * \param list `(const list_t *)` Pointer to list - evaluated multiple times.
+ */
+#define ns_list_foreach(type, e, list) \
+	for (type *e = ns_list_get_first(list); e; e = ns_list_get_next(list, e))
+
+/** \brief Iterate forwards over a list, where user may delete.
+ *
+ * As ns_list_foreach(), but deletion of current entry is permitted as its
+ * next pointer is recorded before running user code.
+ *
+ * Example:
+ * ~~~
+ *     ns_list_foreach_safe(my_entry_t, cur, &my_list)
+ *     {
+ *         ns_list_remove(cur);
+ *     }
+ * ~~~
+ * \param type               Entry type `(entry_t)`.
+ * \param e                  Name for iteration pointer to be defined
+ *                           inside the loop.
+ * \param list `(list_t *)`  Pointer to list - evaluated multiple times.
+ */
+#define ns_list_foreach_safe(type, e, list) \
+	for (type *e = ns_list_get_first(list), *_next; \
+		e && (_next = ns_list_get_next(list, e), true); e = _next)
+
+/** \brief Iterate backwards over a list.
+ *
+ * As ns_list_foreach(), but going backwards - see its documentation.
+ * Iterating forwards is *slightly* more efficient.
+ */
+#define ns_list_foreach_reverse(type, e, list) \
+	for (type *e = ns_list_get_last(list); e; e = ns_list_get_previous(list, e))
+
+/** \brief Iterate backwards over a list, where user may delete.
+ *
+ * As ns_list_foreach_safe(), but going backwards - see its documentation.
+ * Iterating forwards is *slightly* more efficient.
+ */
+#define ns_list_foreach_reverse_safe(type, e, list) \
+	for (type *e = ns_list_get_last(list), *_next; \
+		e && (_next = ns_list_get_previous(list, e), true); e = _next)
+
+/** \hideinitializer \brief Count entries on a list
+ *
+ * Unlike other operations, this is O(n). Note: if list might contain over
+ * 65535 entries, this function **must not** be used to get the entry count.
+ *
+ * \param list `(const list_t *)` Pointer to list.
+
+ * \return     `(uint_fast16_t)`  Number of entries that are stored in list.
+ */
+#define ns_list_count(list) ns_list_count_(&(list)->slist, NS_LIST_OFFSET_(list))
+
+/** \privatesection
+ *  Internal functions - designed to be accessed using corresponding macros above
+ */
+NS_INLINE void ns_list_init_(ns_list_t *list);
+NS_INLINE void ns_list_link_init_(ns_list_link_t *link);
+NS_INLINE void ns_list_add_to_start_(ns_list_t *list, ns_list_offset_t link_offset, void * restrict entry);
+NS_INLINE void ns_list_add_to_end_(ns_list_t *list, ns_list_offset_t link_offset, void * restrict entry);
+NS_INLINE void ns_list_add_before_(ns_list_offset_t link_offset, void *before, void * restrict entry);
+NS_INLINE void ns_list_add_after_(ns_list_t *list, ns_list_offset_t link_offset, void *after, void * restrict entry);
+NS_INLINE void *ns_list_get_next_(ns_list_offset_t link_offset, const void *current);
+NS_INLINE void *ns_list_get_previous_(const ns_list_t *list, ns_list_offset_t link_offset, const void *current);
+NS_INLINE void *ns_list_get_last_(const ns_list_t *list,  ns_list_offset_t offset);
+NS_INLINE void ns_list_remove_(ns_list_t *list, ns_list_offset_t link_offset, void *entry);
+NS_INLINE void ns_list_replace_(ns_list_t *list, ns_list_offset_t link_offset, void *current, void * restrict replacement);
+NS_INLINE void ns_list_concatenate_(ns_list_t *dst, ns_list_t *src, ns_list_offset_t offset);
+NS_INLINE uint_fast16_t ns_list_count_(const ns_list_t *list, ns_list_offset_t link_offset);
+
+/* Provide definitions, either for inlining, or for ns_list.c */
+#if defined NS_ALLOW_INLINING || defined NS_LIST_FN
+#ifndef NS_LIST_FN
+#define NS_LIST_FN NS_INLINE
+#endif
+
+/* Pointer to the link member in entry e */
+#define NS_LIST_LINK_(e, offset) ((ns_list_link_t *)((char *)(e) + offset))
+
+/* Lvalue of the next link pointer in entry e */
+#define NS_LIST_NEXT_(e, offset) (NS_LIST_LINK_(e, offset)->next)
+
+/* Lvalue of the prev link pointer in entry e */
+#define NS_LIST_PREV_(e, offset) (NS_LIST_LINK_(e, offset)->prev)
+
+/* Convert a pointer to a link member back to the entry;
+ * works for linkptr either being a ns_list_link_t pointer, or its next pointer,
+ * as the next pointer is first in the ns_list_link_t */
+#define NS_LIST_ENTRY_(linkptr, offset) ((void *)((char *)(linkptr) - offset))
+
+NS_LIST_FN void ns_list_init_(ns_list_t *list)
+{
+	list->first_entry = NULL;
+	list->last_nextptr = &list->first_entry;
+}
+
+NS_LIST_FN void ns_list_link_init_(ns_list_link_t *link)
+{
+	NS_FUNNY_INTPTR_OK
+	link->next = NS_LIST_POISON;
+	link->prev = NS_LIST_POISON;
+	NS_FUNNY_INTPTR_RESTORE
+}
+
+NS_LIST_FN void ns_list_add_to_start_(ns_list_t *list, ns_list_offset_t offset, void * restrict entry)
+{
+	void *next;
+
+	NS_LIST_PREV_(entry, offset) = &list->first_entry;
+	NS_LIST_NEXT_(entry, offset) = next = list->first_entry;
+
+	if (next)
+	{
+		NS_LIST_PREV_(next, offset) = &NS_LIST_NEXT_(entry, offset);
+	}
+	else
+	{
+		list->last_nextptr = &NS_LIST_NEXT_(entry, offset);
+	}
+
+	list->first_entry = entry;
+}
+
+NS_LIST_FN void ns_list_add_after_(ns_list_t *list, ns_list_offset_t offset, void *current, void * restrict entry)
+{
+	void *next;
+
+	NS_LIST_PREV_(entry, offset) = &NS_LIST_NEXT_(current, offset);
+	NS_LIST_NEXT_(entry, offset) = next = NS_LIST_NEXT_(current, offset);
+
+	if (next)
+	{
+		NS_LIST_PREV_(next, offset) = &NS_LIST_NEXT_(entry, offset);
+	}
+	else
+	{
+		list->last_nextptr = &NS_LIST_NEXT_(entry, offset);
+	}
+
+	NS_LIST_NEXT_(current, offset) = entry;
+}
+
+NS_LIST_FN void ns_list_add_before_(ns_list_offset_t offset, void *current, void * restrict entry)
+{
+	void **prev_nextptr;
+
+	NS_LIST_NEXT_(entry, offset) = current;
+	NS_LIST_PREV_(entry, offset) = prev_nextptr = NS_LIST_PREV_(current, offset);
+	*prev_nextptr = entry;
+	NS_LIST_PREV_(current, offset) = &NS_LIST_NEXT_(entry, offset);
+}
+
+NS_LIST_FN void ns_list_add_to_end_(ns_list_t *list, ns_list_offset_t offset, void * restrict entry)
+{
+	void **prev_nextptr;
+
+	NS_LIST_NEXT_(entry, offset) = NULL;
+	NS_LIST_PREV_(entry, offset) = prev_nextptr = list->last_nextptr;
+	*prev_nextptr = entry;
+	list->last_nextptr = &NS_LIST_NEXT_(entry, offset);
+}
+
+NS_LIST_FN void *ns_list_get_next_(ns_list_offset_t offset, const void *current)
+{
+	return NS_LIST_NEXT_(current, offset);
+}
+
+NS_LIST_FN void *ns_list_get_previous_(const ns_list_t *list, ns_list_offset_t offset, const void *current)
+{
+	if(current == list->first_entry)
+	{
+		return NULL;
+	}
+
+	// Tricky. We don't have a direct previous pointer, but a pointer to the
+	// pointer that points to us - ie &head->first_entry OR &{prev}->next.
+	// This makes life easier on insertion and removal, but this is where we
+	// pay the price.
+
+	// We have to check manually for being the first entry above, so we know it's
+	// a real link's next pointer. Then next is the first field of
+	// ns_list_link_t, so we can use the normal offset value.
+
+	return NS_LIST_ENTRY_(NS_LIST_PREV_(current, offset), offset);
+}
+
+NS_LIST_FN void *ns_list_get_last_(const ns_list_t *list, ns_list_offset_t offset)
+{
+	if(!list->first_entry)
+	{
+		return NULL;
+	}
+
+	// See comments in ns_list_get_previous_()
+	return NS_LIST_ENTRY_(list->last_nextptr, offset);
+}
+
+NS_LIST_FN void ns_list_remove_(ns_list_t *list, ns_list_offset_t offset, void *removed)
+{
+	void *next;
+	void **prev_nextptr;
+
+	next = NS_LIST_NEXT_(removed, offset);
+	prev_nextptr = NS_LIST_PREV_(removed, offset);
+	if (next)
+	{
+		NS_LIST_PREV_(next, offset) = prev_nextptr;
+	}
+	else
+	{
+		list->last_nextptr = prev_nextptr;
+	}
+	*prev_nextptr = next;
+
+	ns_list_link_init_(NS_LIST_LINK_(removed, offset));
+}
+
+NS_LIST_FN void ns_list_replace_(ns_list_t *list, ns_list_offset_t offset, void *current, void * restrict replacement)
+{
+	void *next;
+	void **prev_nextptr;
+
+	NS_LIST_PREV_(replacement, offset) = prev_nextptr = NS_LIST_PREV_(current, offset);
+	NS_LIST_NEXT_(replacement, offset) = next = NS_LIST_NEXT_(current, offset);
+
+	if (next)
+	{
+		NS_LIST_PREV_(next, offset) = &NS_LIST_NEXT_(replacement, offset);
+	}
+	else
+	{
+		list->last_nextptr = &NS_LIST_NEXT_(replacement, offset);
+	}
+	*prev_nextptr = replacement;
+
+	ns_list_link_init_(NS_LIST_LINK_(current, offset));
+}
+
+NS_LIST_FN void ns_list_concatenate_(ns_list_t *dst, ns_list_t *src, ns_list_offset_t offset)
+{
+	ns_list_link_t *src_first;
+
+	src_first = src->first_entry;
+	if (!src_first)
+		return;
+
+	*dst->last_nextptr = src_first;
+	NS_LIST_PREV_(src_first, offset) = dst->last_nextptr;
+	dst->last_nextptr = src->last_nextptr;
+
+	ns_list_init_(src);
+}
+
+NS_LIST_FN uint_fast16_t ns_list_count_(const ns_list_t *list, ns_list_offset_t offset)
+{
+	uint_fast16_t count = 0;
+
+	for (void *p = list->first_entry; p; p = NS_LIST_NEXT_(p, offset))
+	{
+		count++;
+	}
+
+	return count;
+}
+#endif /* defined NS_ALLOW_INLINING || defined NS_LIST_FN */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NS_LIST_H_ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/ns_types.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,392 @@
+/*
+ * Copyright (c) 2014-2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * ns_types.h - Basic compiler and type setup for Nanostack libraries.
+ */
+#ifndef NS_TYPES_H_
+#define NS_TYPES_H_
+
+/** \file
+ * \brief Basic compiler and type setup
+ *
+ * We currently assume C99 or later.
+ *
+ * C99 features being relied on:
+ *
+ *   - <inttypes.h> and <stdbool.h>
+ *   - inline (with C99 semantics, not C++ as per default GCC);
+ *   - designated initialisers;
+ *   - compound literals;
+ *   - restrict;
+ *   - [static N] in array parameters;
+ *   - declarations in for statements;
+ *   - mixing declarations and statements
+ *
+ * Compilers should be set to C99 or later mode when building Nanomesh source.
+ * For GCC this means "-std=gnu99" (C99 with usual GNU extensions).
+ *
+ * Also, a little extra care is required for public header files that could be
+ * included from C++, especially as C++ lacks some C99 features.
+ *
+ * (TODO: as this is exposed to API users, do we need a predefine to distinguish
+ * internal and external use, for finer control? Not yet, but maybe...)
+ */
+
+/* Make sure <stdint.h> defines its macros if C++ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS
+#endif
+#ifndef __STDC_CONSTANT_MACROS
+#define __STDC_CONSTANT_MACROS
+#endif
+
+#include <stddef.h>
+#include <inttypes.h> // includes <stdint.h>; debugf() users need PRIu32 etc
+#include <stdbool.h>
+
+#if defined __GNUC__ && defined __arm__
+/* arm-none-eabi-gcc 4.8-2014q3 has a problem in its <inttypes.h>:
+ * int_fast32_t is defined as int, but PRI<x>FAST32 are defined as "l<x>".
+ * Try to detect this situation and override it.
+ * Very hard to detect types in the preprocessor - this is best I could do.
+ * Expansion works by:
+ *   NS_TEST_Y(INT_FAST32_MAX) -> NS_TEST_X(2147483647) -> __NS2147483647 -> 1
+ * Nested macros are needed so we don't get __NSINT_FAST32_MAX.
+ */
+#define __NS2147483647	1
+#define __NS2147483647L	2
+#define NS_TEST_X(x) __NS##x
+#define NS_TEST_Y(x) NS_TEST_X(x)
+
+#if NS_TEST_Y(INT_FAST32_MAX) == __NS2147483647 && \
+	NS_TEST_Y(INT_LEAST32_MAX) == __NS2147483647L && \
+	NS_TEST_Y(INT32_MAX) == __NS2147483647L
+
+// Fast 32-bit types are int, others are long - this is the problem case in
+// arm-none-eabi-gcc.
+#undef PRIoFAST32
+#undef PRIuFAST32
+#undef PRIxFAST32
+#undef PRIXFAST32
+#undef PRIdFAST32
+#undef PRIiFAST32
+#define PRIoFAST32 "o"
+#define PRIuFAST32 "u"
+#define PRIxFAST32 "x"
+#define PRIXFAST32 "X"
+#define PRIdFAST32 "d"
+#define PRIiFAST32 "i"
+#endif
+#undef NS_TEST_X
+#undef NS_TEST_Y
+#undef __NS2147483647
+#undef __NS2147483647L
+#endif
+
+/*
+ * Create the optional <stdint.h> 24-bit types if they don't exist (worth trying
+ * to use them, as they could exist and be more efficient than 32-bit on 8-bit
+ * systems...)
+ */
+#ifndef UINT24_LEAST_MAX
+typedef uint_least32_t uint_least24_t;
+#define UINT_LEAST24_MAX UINT_LEAST32_MAX
+#define UINT24_C(x) UINT32_C(x)
+#define PRIoLEAST24 PRIoLEAST32
+#define PRIuLEAST24 PRIuLEAST32
+#define PRIxLEAST24 PRIxLEAST32
+#define PRIXLEAST24 PRIXLEAST32
+#endif
+
+#ifndef INT24_LEAST_MAX
+typedef int_least32_t int_least24_t;
+#define INT24_LEAST_MIN INT_LEAST32_MIN
+#define INT24_LEAST_MAX INT_LEAST32_MAX
+#define INT24_C(x) INT32_C(x)
+#define PRIdLEAST24 PRIdLEAST32
+#define PRIiLEAST24 PRIiLEAST32
+#endif
+
+#ifndef UINT24_FAST_MAX
+typedef uint_fast32_t uint_fast24_t;
+#define UINT_FAST24_MAX UINT_FAST32_MAX
+#define PRIoFAST24 PRIoFAST32
+#define PRIuFAST24 PRIuFAST32
+#define PRIxFAST24 PRIxFAST32
+#define PRIXFAST24 PRIXFAST32
+#endif
+
+#ifndef INT24_FAST_MAX
+typedef int_fast32_t int_fast24_t;
+#define INT_FAST24_MIN INT_FAST32_MIN
+#define INT_FAST24_MAX INT_FAST32_MAX
+#define PRIdFAST24 PRIdFAST32
+#define PRIiFAST24 PRIiFAST32
+#endif
+
+/* C11's "noreturn" macro, emulated if necessary */
+#ifndef noreturn
+#if defined  __cplusplus && __cplusplus >= 201103L
+// noreturn is a C++11 keyword
+#elif __STDC_VERSION__ >= 201112L
+#include <stdnoreturn.h>
+#elif defined __GNUC__
+#define noreturn /*__attribute__((__noreturn__))*/
+#elif defined __CC_ARM
+#define noreturn __declspec(noreturn)
+#elif defined __IAR_SYSTEMS_ICC__
+#define noreturn __noreturn
+#else
+#define noreturn
+#endif
+#endif
+
+/* C11's "alignas" macro, emulated for integer expressions if necessary */
+#ifndef __alignas_is_defined
+#if __STDC_VERSION__ >= 201112L || (defined __cplusplus && __cplusplus >= 201103L)
+#include <stdalign.h>
+#elif defined __GNUC__
+#define alignas(n) __attribute__((__aligned__(n)))
+#define __alignas_is_defined 1
+#elif defined __CC_ARM || defined __TASKING__
+#define alignas(n) __align(n)
+#define __alignas_is_defined 1
+#elif defined __IAR_SYSTEMS_ICC__
+/* Does this really just apply to the next variable? */
+#define alignas(n) __Alignas(data_alignment=n)
+#define __Alignas(x) _Pragma(#x)
+#define __alignas_is_defined 1
+#endif
+#endif
+
+/**
+ * Marker for functions or objects that may be unused, suppressing warnings.
+ * Place after the identifier:
+ * ~~~
+ *    static int X MAYBE_UNUSED = 3;
+ *    static int foo(void) MAYBE_UNUSED;
+ * ~~~
+ */
+#if defined __CC_ARM || defined __GNUC__
+#define MAYBE_UNUSED __attribute__((unused))
+#else
+#define MAYBE_UNUSED
+#endif
+
+/*
+ * C++ (even C++11) doesn't provide restrict: define away or provide
+ * alternative.
+ */
+#ifdef __cplusplus
+#ifdef __GNUC__
+#define restrict __restrict
+#else
+#define restrict
+#endif
+#endif /* __cplusplus */
+
+
+/**
+ * C++ doesn't allow "static" in function parameter types: ie
+ * ~~~
+ *    entry_t *find_entry(const uint8_t address[static 16])
+ * ~~~
+ * If a header file may be included from C++, use this __static define instead.
+ *
+ * (Syntax introduced in C99 - `uint8_t address[16]` in a prototype was always
+ * equivalent to `uint8_t *address`, but the C99 addition of static tells the
+ * compiler that address is never NULL, and always points to at least 16
+ * elements. This adds no new type-checking, but the information could aid
+ * compiler optimisation, and it can serve as documentation).
+ */
+#ifdef __cplusplus
+#define __static
+#else
+#define __static static
+#endif
+
+#ifdef __GNUC__
+#define NS_GCC_VERSION (__GNUC__ * 10000 \
+                   + __GNUC_MINOR__ * 100 \
+                   + __GNUC_PATCHLEVEL__)
+#endif
+
+/** \brief Compile-time assertion
+ *
+ * C11 provides _Static_assert, as does GCC even in C99 or C++ mode (and
+ * as a freestanding implementation, we can't rely on <assert.h> to get
+ * the static_assert macro).
+ * C++11 provides static_assert as a keyword.
+ *
+ * The assertion acts as a declaration that can be placed at file scope, in a
+ * code block (except after a label), or as a member of a struct/union. It
+ * produces a compiler error if "test" evaluates to 0.
+ *
+ * Note that this *includes* the required semicolon when defined, else it
+ * is totally empty, permitting use in structs. (If the user provided the `;`,
+ * it would leave an illegal stray `;` if unavailable).
+ */
+#if __STDC_VERSION__ >= 201112L
+#define NS_STATIC_ASSERT(test, str) _Static_assert(test, str);
+#elif defined  __cplusplus && __cplusplus >= 201103L
+#define NS_STATIC_ASSERT(test, str) static_assert(test, str);
+#elif defined __GNUC__ && NS_GCC_VERSION >= 40600
+//#define NS_STATIC_ASSERT(test, str) __extension__ _Static_assert(test, str);
+#define NS_STATIC_ASSERT(test, str)
+#else
+#define NS_STATIC_ASSERT(test, str)
+#endif
+
+#define static_assert _Static_assert
+
+/** \brief Pragma to suppress warnings about unusual pointer values.
+ *
+ * Useful if using "poison" values.
+ */
+#ifdef __IAR_SYSTEMS_ICC__
+#define NS_FUNNY_INTPTR_OK		_Pragma("diag_suppress=Pe1053")
+#define NS_FUNNY_INTPTR_RESTORE	_Pragma("diag_default=Pe1053")
+#else
+#define NS_FUNNY_INTPTR_OK
+#define NS_FUNNY_INTPTR_RESTORE
+#endif
+
+/** \brief Convert pointer to member to pointer to containing structure */
+#define NS_CONTAINER_OF(ptr, type, member) \
+	((type *) ((char *) (ptr) - offsetof(type, member)))
+
+/*
+ * Inlining could cause problems when mixing with C++; provide a mechanism to
+ * disable it. This could also be turned off for other reasons (although
+ * this can usually be done through a compiler flag, eg -O0 on gcc).
+ */
+#ifndef __cplusplus
+#define NS_ALLOW_INLINING
+#endif
+
+/* There is inlining problem in GCC version 4.1.x and we know it works in 4.6.3 */
+#if defined __GNUC__ && NS_GCC_VERSION < 40600
+#undef NS_ALLOW_INLINING
+#endif
+
+/** \brief Mark a potentially-inlineable function.
+ *
+ * We follow C99 semantics, which requires precisely one external definition.
+ * To also allow inlining to be totally bypassed under control of
+ * NS_ALLOW_INLINING, code can be structured as per the example of ns_list:
+ *
+ * foo.h
+ * -----
+ * ~~~
+ *    NS_INLINE int my_func(int);
+ *
+ *    #if defined NS_ALLOW_INLINING || defined FOO_FN
+ *    #ifndef FOO_FN
+ *    #define FOO_FN NS_INLINE
+ *    #endif
+ *    FOO_FN int my_func(int a)
+ *    {
+ *        definition;
+ *    }
+ *    #endif
+ * ~~~
+ * foo.c
+ * -----
+ * ~~~
+ *    #define FOO_FN extern
+ *    #include "foo.h"
+ * ~~~
+ * Which generates:
+ * ~~~
+ *                 NS_ALLOW_INLINING set          NS_ALLOW_INLINING unset
+ *                 =====================          =======================
+ *                 Include foo.h                  Include foo.h
+ *                 -------------                  -------------
+ *                 inline int my_func(int);       int my_func(int);
+ *
+ *                 // inline definition
+ *                 inline int my_func(int a)
+ *                 {
+ *                     definition;
+ *                 }
+ *
+ *                 Compile foo.c                  Compile foo.c
+ *                 -------------                  -------------
+ *    (from .h)    inline int my_func(int);       int my_func(int);
+ *
+ *                 // external definition
+ *                 // because of no "inline"      // normal external definition
+ *                 extern int my_func(int a)      extern int my_func(int a)
+ *                 {                              {
+ *                     definition;                    definition;
+ *                 }                              }
+ * ~~~
+ *
+ * Note that even with inline keywords, whether the compiler inlines or not is
+ * up to it. For example, gcc at "-O0" will not inline at all, and will always
+ * call the real functions in foo.o, just as if NS_ALLOW_INLINING was unset.
+ * At "-O2", gcc could potentially inline everything, meaning that foo.o is not
+ * referenced at all.
+ *
+ * Alternatively, you could use "static inline", which gives every caller its
+ * own internal definition. This is compatible with C++ inlining (which expects
+ * the linker to eliminate duplicates), but in C it's less efficient if the code
+ * ends up non-inlined, and it's harder to breakpoint. I don't recommend it
+ * except for the most trivial functions (which could then probably be macros).
+ */
+#ifdef NS_ALLOW_INLINING
+#define NS_INLINE inline
+#else
+#define NS_INLINE
+#endif
+
+#if defined __SDCC_mcs51 || defined __ICC8051__ || defined __C51__
+
+/* The 8051 environments: SDCC (historic), IAR (current), Keil (future?) */
+
+#define NS_LARGE			__xdata
+#define NS_LARGE_PTR		__xdata
+#ifdef __ICC8051__
+#define NS_REENTRANT
+#define NS_REENTRANT_PREFIX	__idata_reentrant
+#else
+#define NS_REENTRANT		__reentrant
+#define NS_REENTRANT_PREFIX
+#endif
+#define NS_NEAR_FUNC		__near_func
+
+#else
+
+/* "Normal" systems. Define it all away. */
+#define NS_LARGE
+#define NS_LARGE_PTR
+#define NS_REENTRANT
+#define NS_REENTRANT_PREFIX
+#define NS_NEAR_FUNC
+
+#endif
+
+/** \brief Scatter-gather descriptor
+ *
+ * Slightly optimised for small platforms - we assume we won't need any
+ * element bigger than 64K.
+ */
+typedef struct ns_iovec
+{
+	void *iov_base;
+	uint_fast16_t iov_len;
+} ns_iovec_t;
+#endif /* NS_TYPES_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sal/socket_api.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,164 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKET_ABSTRACT_SOCKET_API_H__
+#define __MBED_NET_SOCKET_ABSTRACT_SOCKET_API_H__
+
+#include <stdint.h>
+#include "socket_types.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef SOCKET_MAX_STACKS
+#define SOCKET_MAX_STACKS 2
+#endif
+
+typedef socket_error_t (*socket_init)();
+typedef socket_error_t (*socket_create)(struct socket *socket,
+        const socket_address_family_t af, const socket_proto_family_t pf,
+        socket_api_handler_t const handler);
+typedef socket_error_t (*socket_destroy)(struct socket *socket);
+typedef socket_error_t (*socket_close)(struct socket *socket);
+typedef socket_api_handler_t (*socket_periodic_task)(const struct socket * socket);
+typedef uint32_t (*socket_periodic_interval)(const struct socket * socket);
+typedef socket_error_t (*socket_resolve)(struct socket *socket, const char *address);
+typedef socket_error_t (*socket_connect)(struct socket *sock, const struct socket_addr *address, const uint16_t port);
+typedef socket_error_t (*socket_bind)(struct socket *socket, const struct socket_addr *address, const uint16_t port);
+typedef socket_error_t (*socket_str2addr)(const struct socket *socket, struct socket_addr *addr, const char *address);
+typedef socket_error_t (*socket_start_listen)(struct socket *socket, const uint32_t backlog);
+typedef socket_error_t (*socket_stop_listen)(struct socket *socket);
+typedef socket_error_t (*socket_accept)(struct socket *sock, socket_api_handler_t handler);
+typedef socket_error_t (*socket_reject)(struct socket *sock);
+typedef socket_error_t (*socket_send)(struct socket *socket, const void * buf, const size_t len);
+typedef socket_error_t (*socket_send_to)(struct socket *socket, const void * buf, const size_t len, const struct socket_addr *addr, const uint16_t port);
+typedef socket_error_t (*socket_recv)(struct socket *socket, void * buf, size_t *len);
+typedef socket_error_t (*socket_recv_from)(struct socket *socket, void * buf, size_t *len, struct socket_addr *addr, uint16_t *port);
+
+typedef socket_error_t (*socket_get_local_addr)(const struct socket *socket, struct socket_addr *addr);
+typedef socket_error_t (*socket_get_remote_addr)(const struct socket *socket, struct socket_addr *addr);
+typedef socket_error_t (*socket_get_local_port)(const struct socket *socket, uint16_t *port);
+typedef socket_error_t (*socket_get_remote_port)(const struct socket *socket, uint16_t *port);
+
+typedef uint8_t (*socket_is_connected)(const struct socket *socket);
+typedef uint8_t (*socket_is_bound)(const struct socket *socket);
+
+struct socket_api {
+    socket_stack_t              stack;
+    uint32_t                    version;
+    socket_init                 init;
+    socket_create               create;
+    socket_destroy              destroy;
+    socket_close                close;
+    socket_periodic_task        periodic_task;
+    socket_periodic_interval    periodic_interval;
+    socket_resolve              resolve;
+    socket_connect              connect;
+    socket_str2addr             str2addr;
+    socket_bind                 bind;
+    socket_start_listen         start_listen;
+    socket_stop_listen          stop_listen;
+    socket_accept               accept;
+    socket_reject               reject;
+    socket_send                 send;
+    socket_send_to              send_to;
+    socket_recv                 recv;
+    socket_recv_from            recv_from;
+    socket_is_connected         is_connected;
+    socket_is_bound             is_bound;
+    socket_get_local_addr       get_local_addr;
+    socket_get_remote_addr      get_remote_addr;
+    socket_get_local_port       get_local_port;
+    socket_get_remote_port      get_remote_port;
+};
+#define SOCKET_API_FIRST_PTR init
+#define SOCKET_API_LAST_PTR get_remote_port
+
+socket_error_t socket_register_stack(const struct socket_api * api);
+const char * socket_strerror(const socket_error_t err);
+const struct socket_api * socket_get_api(const socket_stack_t stack);
+
+static inline int socket_addr_is_ipv4(const struct socket_addr *addr)
+{
+    if ((addr->ipv6be[0] == 0) &&
+        (addr->ipv6be[1] == 0) &&
+        (addr->ipv6be[2] == 0)) {
+            return 1;
+    } else {
+        return 0;
+    }
+}
+static inline int socket_addr_is_any(const struct socket_addr *addr)
+{
+    if ((addr->ipv6be[0] == 0) &&
+        (addr->ipv6be[1] == 0) &&
+        (addr->ipv6be[2] == 0) &&
+        (addr->ipv6be[3] == 0)) {
+            return 1;
+    } else {
+        return 0;
+    }
+}
+static inline void socket_addr_set_ipv4_addr(struct socket_addr *addr, uint32_t ipv4addr)
+{
+    addr->ipv6be[0] = 0;
+    addr->ipv6be[1] = 0;
+    addr->ipv6be[2] = 0;
+    addr->ipv6be[3] = ipv4addr;
+}
+static inline uint32_t socket_addr_get_ipv4_addr(const struct socket_addr *addr)
+{
+    if (!socket_addr_is_ipv4(addr)) {
+        return 0;
+    }
+    return addr->ipv6be[3];
+}
+static inline const uint32_t * socket_addr_get_ipv4_addrp(const struct socket_addr *addr)
+{
+    if (!socket_addr_is_ipv4(addr)) {
+        return NULL;
+    }
+    return &addr->ipv6be[3];
+}
+static inline void socket_addr_set_any(struct socket_addr *addr)
+{
+    addr->ipv6be[0] = 0;
+    addr->ipv6be[1] = 0;
+    addr->ipv6be[2] = 0;
+    addr->ipv6be[3] = 0;
+}
+
+static inline void socket_addr_copy(struct socket_addr *dest, const struct socket_addr *src)
+{
+    (dest)->ipv6be[0] = (src)->ipv6be[0];
+    (dest)->ipv6be[1] = (src)->ipv6be[1];
+    (dest)->ipv6be[2] = (src)->ipv6be[2];
+    (dest)->ipv6be[3] = (src)->ipv6be[3];
+}
+static inline int socket_addr_cmp(const struct socket_addr *a, const struct socket_addr *b)
+{
+    return
+        a->ipv6be[0] != b->ipv6be[0] ||
+        a->ipv6be[1] != b->ipv6be[1] ||
+        a->ipv6be[2] != b->ipv6be[2] ||
+        a->ipv6be[3] != b->ipv6be[3];
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MBED_NET_SOCKET_ABSTRACT_SOCKET_API_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sal/socket_types.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,181 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKET_ABSTRACT_SOCKET_TYPES_H__
+#define __MBED_NET_SOCKET_ABSTRACT_SOCKET_TYPES_H__
+
+#include <stddef.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef MBED_NET_LWIP
+#define MBED_NET_LWIP 1
+#endif
+
+typedef enum {
+    SOCKET_ERROR_NONE = 0,
+    SOCKET_ERROR_UNKNOWN,
+    SOCKET_ERROR_UNIMPLEMENTED,
+    SOCKET_ERROR_BUSY,
+    SOCKET_ERROR_NULL_PTR,
+    SOCKET_ERROR_BAD_FAMILY,
+    SOCKET_ERROR_TIMEOUT,
+    SOCKET_ERROR_BAD_ALLOC,
+    SOCKET_ERROR_NO_CONNECTION,
+    SOCKET_ERROR_SIZE,
+    SOCKET_ERROR_STACK_EXISTS,
+    SOCKET_ERROR_STACKS,
+    SOCKET_ERROR_BAD_STACK,
+    SOCKET_ERROR_BAD_ADDRESS,
+    SOCKET_ERROR_DNS_FAILED,
+    SOCKET_ERROR_WOULD_BLOCK,
+    SOCKET_ERROR_CLOSED,
+    SOCKET_ERROR_VALUE,
+    SOCKET_ERROR_ADDRESS_IN_USE,
+    SOCKET_ERROR_ALREADY_CONNECTED,
+    SOCKET_ERROR_ABORT,
+    SOCKET_ERROR_RESET,
+    SOCKET_ERROR_BAD_ARGUMENT,
+    SOCKET_ERROR_INTERFACE_ERROR,
+    SOCKET_ERROR_API_VERSION,
+    SOCKET_ERROR_NOT_BOUND,
+
+} socket_error_t;
+
+typedef enum {
+    SOCKET_ALLOC_HEAP = 0,
+    SOCKET_ALLOC_POOL_BEST,
+} socket_alloc_pool_t;
+
+typedef enum {
+    SOCKET_AF_UNINIT,
+    SOCKET_AF_INET4,
+    SOCKET_AF_INET6,
+    SOCKET_AF_MAX,
+} socket_address_family_t;
+
+typedef enum {
+    SOCKET_PROTO_UNINIT = 0,
+    SOCKET_DGRAM,
+    SOCKET_STREAM,
+    SOCKET_PROTO_MAX,
+} socket_proto_family_t;
+
+typedef enum {
+    SOCKET_EVENT_NONE = 0,
+    SOCKET_EVENT_ERROR,
+    SOCKET_EVENT_RX_DONE,
+    SOCKET_EVENT_TX_DONE,
+    SOCKET_EVENT_RX_ERROR,
+    SOCKET_EVENT_TX_ERROR,
+    SOCKET_EVENT_CONNECT,
+    SOCKET_EVENT_DISCONNECT,
+    SOCKET_EVENT_DNS,
+    SOCKET_EVENT_ACCEPT,
+} event_flag_t;
+
+typedef enum {
+    SOCKET_STATUS_IDLE      = 0,
+    SOCKET_STATUS_RX_BUSY   = 1 << 0,
+    SOCKET_STATUS_TX_BUSY   = 1 << 1,
+    SOCKET_STATUS_CONNECTED = 1 << 2,
+    SOCKET_STATUS_BOUND     = 1 << 3,
+} socket_status_t;
+
+typedef enum {
+    SOCKET_STACK_UNINIT = 0,
+    SOCKET_STACK_LWIP_IPV4,
+    SOCKET_STACK_LWIP_IPV6,
+    SOCKET_STACK_RESERVED,
+    SOCKET_STACK_NANOSTACK_IPV6,
+    SOCKET_STACK_PICOTCP,
+    SOCKET_STACK_MAX,
+} socket_stack_t;
+
+typedef enum {
+    SOCKET_BUFFER_UNINITIALISED = 0,
+    SOCKET_BUFFER_RAW,
+    SOCKET_BUFFER_LWIP_PBUF,
+    SOCKET_BUFFER_NANOSTACK_PBUF,
+} socket_buffer_type_t;
+
+struct socket_addr {
+    uint32_t ipv6be[4];
+};
+
+struct socket_buffer {
+    socket_buffer_type_t type;
+    const struct socket_buf_api *api;
+    void *impl;
+};
+
+struct socket_rawbuf {
+    void * buf;
+    size_t size;
+    size_t pos;
+};
+
+typedef void (*socket_api_handler_t)(void);
+typedef struct {
+    void * (*alloc)(void *,const size_t);
+    void (*dealloc)(void *, void *);
+    void *context;
+} socket_allocator_t;
+
+struct socket_tx_info {
+    uint16_t sentbytes;
+};
+
+struct socket_dns_info {
+  struct socket_addr addr; // A stack-specific socket address struct
+  const char *domain;
+};
+
+struct socket_accept_info {
+    void * newimpl;
+    uint8_t reject;
+};
+
+struct socket_event {
+    event_flag_t event;
+    struct socket *sock;
+    union {
+        struct socket_tx_info t;
+        socket_error_t e;
+        struct socket_dns_info d;
+        struct socket_accept_info a;
+    } i;
+};
+typedef struct socket_event socket_event_t;
+
+struct socket {
+    socket_api_handler_t handler;
+    socket_event_t *event; // TODO: (CThunk upgrade/Alpha3)
+    const struct socket_api *api;
+    void *impl;
+    socket_status_t status;
+    uint8_t family;
+    socket_stack_t stack;
+    void *rxBufChain; // TODO: Only required in some stacks, which do not support BSD-style buffering
+};
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __MBED_NET_SOCKET_ABSTRACT_SOCKET_TYPES_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/Socket.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_SOCKET_H__
+#define __MBED_NET_SOCKETS_SOCKET_H__
+
+/* Include all versions of the API */
+#include "v0/Socket.h"
+
+/* Set the current namespace */
+namespace mbed {
+    namespace Sockets {
+        namespace current {
+            using namespace mbed::Sockets::v0;
+        }
+    }
+}
+
+#endif // __MBED_NET_SOCKETS_SOCKET_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/SocketAddr.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_SOCKETADDR_H__
+#define __MBED_NET_SOCKETS_SOCKETADDR_H__
+
+/* Include all versions of the API */
+#include "v0/SocketAddr.h"
+
+/* Set the current namespace */
+namespace mbed {
+    namespace Sockets {
+        namespace current {
+            using namespace mbed::Sockets::v0;
+        }
+    }
+}
+
+#endif // __MBED_NET_SOCKETS_SOCKETADDR_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/UDPSocket.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_UDPSOCKET_H__
+#define __MBED_NET_SOCKETS_UDPSOCKET_H__
+
+/* Include all versions of the API */
+#include "v0/UDPSocket.h"
+
+/* Set the current namespace */
+namespace mbed {
+    namespace Sockets {
+        namespace current {
+            using namespace mbed::Sockets::v0;
+        }
+    }
+}
+
+#endif // __MBED_NET_SOCKETS_UDPSOCKET_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/Socket.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,268 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_SOCKET_H__
+#define __MBED_NET_SOCKETS_V0_SOCKET_H__
+
+
+#include <stddef.h>
+#include <stdint.h>
+#include "mbed.h"
+#include "FunctionPointer.h"
+#include "CThunk.h"
+#include "sal/socket_types.h"
+#include "SocketAddr.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+
+/**
+ * \brief Socket implements most of the interfaces required for sockets.
+ * Socket is a pure virtual class; it should never be instantiated directly, but it provides
+ * common functionality for derived classes.
+ */
+class Socket {
+public:
+    typedef FunctionPointer3<void, Socket *, struct socket_addr, const char *> DNSHandler_t;
+    typedef FunctionPointer2<void, Socket *, socket_error_t> ErrorHandler_t;
+    typedef FunctionPointer1<void, Socket *> ReadableHandler_t;
+    typedef FunctionPointer2<void, Socket *, uint16_t> SentHandler_t;
+protected:
+    /**
+     * Socket constructor
+     * Initializes the Socket object.  Initializes the underlying struct socket.  Does not instantiate
+     * an underlying network stack socket.
+     * Since it is somewhat awkward to provide the network stack, a future change will provide
+     * a way to pass the network interface to the socket constructor, which will extract the stack from
+     * the interface.
+     * @param[in] stack The network stack to use for this socket.
+     */
+    Socket(const socket_stack_t stack);
+    /**
+     * Socket destructor
+     * Frees the underlying socket implementation.
+     */
+    virtual ~Socket();
+public:
+    /**
+     * Start the process of resolving a domain name.
+     * If the input is a text IP address, an event is queued immediately; otherwise, onDNS is
+     * queued as soon as DNS is resolved.
+     * The socket must have been opened before resolve is called
+     * @param[in] address The domain name to resolve
+     * @param[in] onDNS The handler to call when the name is resolved
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t resolve(const char* address, const DNSHandler_t &onDNS);
+    /**
+     * Open the socket.
+     * Instantiates and initializes the underlying socket. Receive is started immediately after
+     * the socket is opened.
+     * @param[in] af Address family (SOCKET_AF_INET4 or SOCKET_AF_INET6), currently only IPv4 is supported
+     * @param[in] pf Protocol family (SOCKET_DGRAM or SOCKET_STREAM)
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t open(const socket_address_family_t af, const socket_proto_family_t pf);
+    /**
+     * Binds the socket's local address and IP.
+     * 0.0.0.0 is accepted as a local address if only the port is meant to be bound.
+     * The behaviour of bind("0.0.0.0",...) is undefined where two or more stacks are in use.
+     *
+     * @param[in] address The string representation of the address to bind
+     * @param[in] port The local port to bind
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t bind(const char *address, const uint16_t port);
+    /**
+     * bind(const SocketAddr *, const uint16_t) is the same as bind(const char *, const uint16_t),
+     * except that the address passed in is a SocketAddr.
+     * @param[in] address The address to bind
+     * @param[in] port The local port to bind
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t bind(const SocketAddr *address, const uint16_t port);
+    /**
+     * Set the error handler.
+     * Errors are ignored if onError is not set.
+     * @param[in] onError
+     */
+    virtual void setOnError(const ErrorHandler_t &onError);
+    /**
+     * Set the received data handler
+     * Received data is queued until it is read using recv or recv_from.
+     * @param[in] onReadable the handler to use for receive events
+     */
+    virtual void setOnReadable(const ReadableHandler_t &onReadable);
+    /**
+     * Receive a message
+     * @param[out] buf The buffer to fill
+     * @param[in,out] len A pointer to the size of the receive buffer.  Sets the maximum number of bytes
+     * to read but is updated with the actual number of bytes copied on success.  len is not changed on
+     * failure
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t recv(void * buf, size_t *len);
+    /**
+     * Receive a message with the sender address and port
+     * This API is not valid for SOCK_STREAM
+     * @param[out] buf The buffer to fill
+     * @param[in,out] len A pointer to the size of the receive buffer.  Sets the maximum number of bytes
+     * to read but is updated with the actual number of bytes copied on success.  len is not changed on
+     * failure
+     * @param[out] remote_addr Pointer to an address structure to fill with the sender address
+     * @param[out] remote_port Pointer to a uint16_t to fill with the sender port
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t recv_from(void * buf, size_t *len, SocketAddr *remote_addr, uint16_t *remote_port);
+    /**
+     * Set the onSent handler.
+     * The exact moment this handler is called varies from implementation to implementation.
+     * On LwIP, onSent is called when the remote host ACK's data in TCP sockets, or when the message enters
+     * the network stack in UDP sockets.
+     * @param[in] onSent The handler to call when a send completes
+     */
+    virtual void setOnSent(const SentHandler_t &onSent);
+    /**
+     * Send a message
+     * Sends a message over an open connection.  This call is valid for UDP sockets, provided that connect()
+     * has been called.
+     * @param[in] buf The payload to send
+     * @param[in] len The size of the payload
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t send(const void * buf, const size_t len);
+    /**
+     * Send a message to a specific address and port
+     * This API is not valid for SOCK_STREAM
+     * @param[in] buf The payload to send
+     * @param[in] len The size of the payload
+     * @param[in] address The address to send to
+     * @param[in] port The remote port to send to
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t send_to(const void * buf, const size_t len, const SocketAddr *remote_addr, uint16_t remote_port);
+    /**
+     * Shuts down a socket.
+     * Sending and receiving are no longer possible after close() is called.
+     * The socket is not deallocated on close.  A socket must not be reopened, it should be
+     * destroyed (either with delete, or by going out of scope) after calling close.
+     * Calling open on a closed socket can result in a memory leak.
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t close();
+    /**
+     * Error checking utility
+     * Generates an event on error, does nothing on SOCKET_ERROR_NONE
+     * @param[in] err the error code to check
+     * @return false if err is SOCKET_ERROR_NONE, true otherwise
+     */
+    virtual bool error_check(socket_error_t err);
+
+    /**
+     * Checks the socket status to determine whether it is still connected.
+     * @return true if the socket is connected, false if it is not
+     */
+    virtual bool isConnected() const;
+
+    /**
+     * Get the local address of the socket if bound.
+     * There are several failing conditions for this method:
+     * 1. If the socket has not been opened, returns SOCKET_ERROR_NULL_PTR
+     * 2. If the socket has not been bound, returns SOCKET_ERROR_NOT_BOUND
+     * 3. If addr is NULL, returns SOCKET_ERROR_NULL_PTR
+     *
+     * Otherwise, populates the SocketAddr object with the local address
+     *
+     * @param[out] addr a pointer to a SocketAddr object
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure (see description)
+     */
+    virtual socket_error_t getLocalAddr(SocketAddr *addr) const;
+
+    /**
+     * Get the local port of the socket if bound.
+     * There are several failing conditions for this method:
+     * 1. If the socket has not been opened, returns SOCKET_ERROR_NULL_PTR
+     * 2. If the socket has not been bound, returns SOCKET_ERROR_NOT_BOUND
+     * 3. If port is NULL, returns SOCKET_ERROR_NULL_PTR
+     *
+     * Otherwise, populates the uint16_t object with the local port
+     *
+     * @param[out] port a pointer to a uint16_t
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure (see description)
+     */
+    virtual socket_error_t getLocalPort(uint16_t *port) const;
+
+    /**
+     * Get the remote address of the socket if connected.
+     * There are several failing conditions for this method:
+     * 1. If the socket has not been opened, returns SOCKET_ERROR_NULL_PTR
+     * 2. If the socket has not been connected, returns SOCKET_ERROR_NO_CONNECTION
+     * 3. If addr is NULL, returns SOCKET_ERROR_NULL_PTR
+     *
+     * Otherwise, populates the SocketAddr object with the remote address
+     *
+     * @param[out] addr a pointer to a SocketAddr object
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure (see description)
+     */
+    virtual socket_error_t getRemoteAddr(SocketAddr *addr) const;
+    /**
+     * Get the remote port of the socket if connected.
+     * There are several failing conditions for this method:
+     * 1. If the socket has not been opened, returns SOCKET_ERROR_NULL_PTR
+     * 2. If the socket has not been connected, returns SOCKET_ERROR_NO_CONNECTION
+     * 3. If port is NULL, returns SOCKET_ERROR_NULL_PTR
+     *
+     * Otherwise, populates the uint16_t object with the remote port
+     *
+     * @param[out] port a pointer to a uint16_t
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure (see description)
+     */
+    virtual socket_error_t getRemotePort(uint16_t *port) const;
+
+#if 0 // not implemented yet
+    static long ntohl(long);
+    static short ntohs(short);
+    static long long ntohll(long long);
+#endif
+
+protected:
+    /**
+     * The internal event handler
+     * @param[in] ev The event to handle
+     */
+    virtual void _eventHandler(struct socket_event *ev);
+
+protected:
+    DNSHandler_t      _onDNS;
+    ErrorHandler_t    _onError;
+    ReadableHandler_t _onReadable;
+    SentHandler_t     _onSent;
+
+    CThunk<Socket> _irq;
+    struct socket _socket;
+private:
+    socket_event_t *_event;
+    /**
+     * Internal event handler.
+     * @param[in] arg
+     */
+    void _nvEventHandler(void * arg);
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_SOCKET_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/SocketAddr.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,43 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_SOCKETADDR_H__
+#define __MBED_NET_SOCKETS_V0_SOCKETADDR_H__
+
+#include "sal/socket_types.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+
+class SocketAddr {
+public:
+    struct socket_addr * getAddr() {return &_addr;}
+    const struct socket_addr * getAddr() const {return &_addr;}
+    void setAddr(const struct socket_addr *addr);
+    void setAddr(const SocketAddr *addr);
+    size_t getAddrSize() const {return sizeof(_addr.ipv6be);}
+    bool is_v4();
+
+    int fmtIPv4(char *buf, size_t size);
+    int fmtIPv6(char *buf, size_t size);
+protected:
+    struct socket_addr _addr;
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_SOCKETADDR_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/TCPAsynch.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,47 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_TCP_ASYNCH__
+#define __MBED_NET_SOCKETS_V0_TCP_ASYNCH__
+
+#include "Socket.h"
+#include "sal/socket_api.h"
+
+#include "Ticker.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+class TCPAsynch: public Socket {
+protected:
+    TCPAsynch(const socket_stack_t stack);
+    ~TCPAsynch();
+
+public:
+    virtual socket_error_t open(const socket_address_family_t af);
+protected:
+    static Ticker _ticker;
+    static FunctionPointer0<void> _tick_handler;
+    // uintptr_t is used to guarantee that there will always be a large enough
+    // counter to avoid overflows. Memory allocation will always fail before
+    // counter overflow if the counter is the same size as the pointer type and
+    // sizeof(TCPAsynch) > 0
+    static uintptr_t _TCPSockets;
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_TCP_ASYNCH__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/TCPListener.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,86 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_TCPLISTENER_H__
+#define __MBED_NET_SOCKETS_V0_TCPLISTENER_H__
+
+#include <stddef.h>
+#include <stdint.h>
+#include "mbed/FunctionPointer.h"
+#include "TCPAsynch.h"
+#include "TCPStream.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+/** \brief TCPListener: a TCP server socket
+ *  The TCPListener listens for incoming connections.  Prior to listening, the
+ *  TCPListener must be bound to a port and, optionally, an address.
+ */
+class TCPListener: public TCPAsynch {
+public:
+    typedef FunctionPointer2<void, TCPListener *, void *> IncomingHandler_t;
+    /**
+     *  The TCP Listener constructor.
+     * @param[in] stack the network stack to use
+     */
+    TCPListener(const socket_stack_t stack);
+
+    /**
+     *  The TCP Listener destructor
+     *  This performs teardown of the listener
+     */
+    ~TCPListener();
+
+    /**
+     *  Begin listening for incoming connections.
+     *  The supplied listenHandler will be called whenever an incoming connection arrives
+     *  To reject a connection, the event handler needs to set the reject flag in the event.
+     * @param[in] listenHandler The event handler to call when an incoming connection arrives
+     * @param[in] backlog The number of connection requests to keep in the backlog
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    socket_error_t start_listening(IncomingHandler_t listenHandler, uint32_t backlog = 0);
+    /**
+     * Stop listening for incoming connections
+     * After this call, the server will reject incoming connections until start_listening is called again
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    socket_error_t stop_listening();
+
+    /**
+     * accept is a utility function for constructing a new TCPStream from an incoming connection
+     * The event passed to the listenHandler contains a pointer to a low level implementation of an
+     * already connected socket.  This function
+     * @param new_impl
+     * @return
+     */
+    virtual TCPStream * accept(void *new_impl);
+    virtual void reject(void *new_impl);
+
+protected:
+    /**
+     * Internal event handler
+     * @param[in] ev the event to handle
+     */
+    void _eventHandler(struct socket_event *ev);
+
+    IncomingHandler_t _onIncoming;
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_TCPLISTENER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/TCPStream.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,83 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_TCPSTREAM_H__
+#define __MBED_NET_SOCKETS_V0_TCPSTREAM_H__
+#include <stddef.h>
+#include <stdint.h>
+#include "Ticker.h"
+#include "TCPAsynch.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+
+class TCPStream: public TCPAsynch {
+public:
+    typedef FunctionPointer1<void, TCPStream *> ConnectHandler_t;
+    typedef FunctionPointer1<void, TCPStream *> DisconnectHandler_t;
+    /**
+     * TCP socket constructor.
+     * Does not allocate an underlying TCP Socket instance.
+     * @param[in] stack The network stack to use for this socket.
+     */
+    TCPStream(const socket_stack_t stack);
+    /**
+     * TCP socket constructor.
+     * Does not allocate an underlying TCP Socket instance. This version is for use with
+     * TCPListener::accept(). The struct socket instance passed into this constructor should
+     * be a fully initialized socket, with an initialized impl field.  TCPStream will copy
+     * the stack, API, protocol family, and impl pointer from sock.
+     * @param[in] sock The TCP socket instance to use for this TCP socket.
+     */
+    TCPStream(const struct socket * sock);
+    /**
+     * TCP socket destructor
+     */
+    ~TCPStream();
+    /**
+     * Connect to a remote host.
+     * Initates the TCP Connection process.  onConnect is called when the connection
+     * is acknowledged.
+     * @param[in] address The remote host to connect to
+     * @param[in] port The remote port to connect to
+     * @param[in] onConnect
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t connect(const SocketAddr &address, const uint16_t port,
+            const ConnectHandler_t &onConnect);
+    /**
+     * Set a disconnect handler
+     * This handler only needs to be configured once onConnect has been called
+     * @param[in] h the handler to call when a connection is disconnected
+     */
+    virtual void setOnDisconnect(const DisconnectHandler_t &h) { _onDisconnect = h; }
+
+protected:
+    /**
+     * Internal event handler
+     * @param[in] ev the event to handle
+     */
+    void _eventHandler(struct socket_event *ev);
+
+protected:
+    ConnectHandler_t _onConnect;
+    DisconnectHandler_t _onDisconnect;
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_TCPSTREAM_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/common/sockets/v0/UDPSocket.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,64 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_UDPSOCKET_H__
+#define __MBED_NET_SOCKETS_V0_UDPSOCKET_H__
+
+#include <stddef.h>
+#include <stdint.h>
+#include "Socket.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+
+/* UDP socket class */
+class UDPSocket: public Socket {
+public:
+    /**
+     * UDP socket constructor.
+     * Does not allocate an underlying UDP Socket instance.
+     * @param[in] stack The network stack to use for this socket.
+     */
+    UDPSocket(socket_stack_t stack);
+    /**
+     * UDP Socket destructor
+     */
+    ~UDPSocket();
+    /**
+     * Open a UDP socket
+     * Instantiates and initializes the underlying socket. Receive is started immediately after
+     * the socket is opened.
+     * @param[in] af Address family (SOCKET_AF_INET4 or SOCKET_AF_INET6), currently only IPv4 is supported
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    socket_error_t inline open(const socket_address_family_t af)
+    {
+        return Socket::open(af,SOCKET_DGRAM);
+    }
+    /**
+     * Connect to a remote host.
+     * This is an internal configuration API only.  No network traffic is generated.
+     * @param[in] address The remote host to connect to
+     * @param[in] port The remote port to connect to
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    socket_error_t connect(const SocketAddr *address, const uint16_t port);
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_UDPSOCKET_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,27 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mconnectionsecurity_mbedtls
+        "../../../../source/m2mconnectionsecurity.cpp"
+        "main.cpp"
+        "m2mconnectionsecurity_mbedtlstest.cpp"
+        "test_m2mconnectionsecurity_mbedtls.cpp"
+        "../stub/m2msecurity_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mtimer_stub.cpp"
+        "../stub/mbedtls_stub.cpp"
+        "../stub/m2mconnectionhandler_stub.cpp"
+        "../stub/m2mconnectionsecuritypimpl_stub.cpp"
+)
+target_link_libraries(m2mconnectionsecurity_mbedtls
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mconnectionsecurity_mbedtls
+PROPERTIES COMPILE_FLAGS "${UTEST_COMPILE_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mconnectionsecurity_mbedtls -ojunit")
+add_test(m2mconnectionsecurity_mbedtls ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,21 @@
+include ../makefile_defines.txt
+
+COMPONENT_NAME = m2mconnectionsecurity_unit
+SRC_FILES = \
+        ../../../../source/m2mconnectionsecurity.cpp \
+
+TEST_SRC_FILES = \
+	main.cpp \
+	m2mconnectionsecurity_mbedtlstest.cpp \
+        test_m2mconnectionsecurity_mbedtls.cpp \
+        ../stub/m2mstring_stub.cpp \
+        ../stub/m2mtimer_stub.cpp \
+        ../stub/m2mbase_stub.cpp \
+        ../stub/m2mobject_stub.cpp \
+        ../stub/m2msecurity_stub.cpp \
+        ../stub/mbedtls_stub.cpp \
+        ../stub/m2mconnectionhandler_stub.cpp \
+        ../stub/m2mconnectionsecuritypimpl_stub.cpp \
+
+
+include ../MakefileWorker.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/m2mconnectionsecurity_mbedtlstest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mconnectionsecurity_mbedtls.h"
+
+
+TEST_GROUP(M2MConnectionSecurity_mbedtls)
+{
+  Test_M2MConnectionSecurity* inst;
+
+  void setup()
+  {
+    inst = new Test_M2MConnectionSecurity();
+  }
+  void teardown()
+  {
+    delete inst;
+  }
+};
+
+TEST(M2MConnectionSecurity_mbedtls, Create)
+{
+    CHECK(inst != NULL);
+}
+
+TEST(M2MConnectionSecurity_mbedtls, test_constructor)
+{
+    inst->test_constructor();
+}
+
+TEST(M2MConnectionSecurity_mbedtls, test_destructor)
+{
+    inst->test_destructor();
+}
+
+TEST(M2MConnectionSecurity_mbedtls, test_reset)
+{
+    inst->test_reset();
+}
+
+TEST(M2MConnectionSecurity_mbedtls, test_init)
+{
+    inst->test_init();
+}
+
+TEST(M2MConnectionSecurity_mbedtls, test_connect)
+{
+    inst->test_connect();
+}
+
+TEST(M2MConnectionSecurity_mbedtls, test_start_connecting_non_blocking)
+{
+    inst->test_start_connecting_non_blocking();
+}
+
+TEST(M2MConnectionSecurity_mbedtls, test_continue_connecting)
+{
+    inst->test_continue_connecting();
+}
+
+TEST(M2MConnectionSecurity_mbedtls, test_send_message)
+{
+    inst->test_send_message();
+}
+
+TEST(M2MConnectionSecurity_mbedtls, test_read)
+{
+    inst->test_read();
+}
+
+TEST(M2MConnectionSecurity_mbedtls, test_set_random_number_callback)
+{
+    inst->test_set_random_number_callback();
+}
+
+TEST(M2MConnectionSecurity_mbedtls, test_set_entropy_callback)
+{
+    inst->test_set_entropy_callback();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+    return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP(M2MConnectionSecurity_mbedtls);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/test_m2mconnectionsecurity_mbedtls.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mconnectionsecurity_mbedtls.h"
+#include "m2mtimerobserver.h"
+#include "m2msecurity.h"
+#include "m2msecurity_stub.h"
+#include "mbedtls_stub.h"
+#include "m2mconnectionhandler.h"
+#include "mbed-client-mbed-os/m2mconnectionhandlerpimpl.h"
+#include "m2mconnectionsecuritypimpl_stub.h"
+
+entropy_cb ent_cb;
+
+class TestObserver : public M2MConnectionObserver {
+
+public:
+    TestObserver(){}
+    void data_available(uint8_t*,
+                        uint16_t,
+                        const M2MConnectionObserver::SocketAddress &){}
+
+    void socket_error(uint8_t error_code){}
+
+    void address_ready(const M2MConnectionObserver::SocketAddress &,
+                       M2MConnectionObserver::ServerType,
+                       const uint16_t){}
+
+    void data_sent(){}
+};
+
+Test_M2MConnectionSecurity::Test_M2MConnectionSecurity()
+{
+    mbedtls_stub::clear();
+    m2msecurity_stub::clear();
+}
+
+Test_M2MConnectionSecurity::~Test_M2MConnectionSecurity()
+{
+}
+
+void Test_M2MConnectionSecurity::test_constructor()
+{
+    M2MConnectionSecurity impl = M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+}
+
+void Test_M2MConnectionSecurity::test_destructor()
+{
+    M2MConnectionSecurity* impl = new M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    delete impl;
+    //Memory leak detector will report an error if leaks
+}
+
+void Test_M2MConnectionSecurity::test_reset()
+{
+    M2MConnectionSecurity impl = M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    impl.reset();
+}
+
+void Test_M2MConnectionSecurity::test_init()
+{
+    M2MConnectionSecurity impl = M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    m2mconnectionsecuritypimpl_stub::int_value = 7;
+    CHECK( 7 == impl.init(NULL) );
+}
+
+void Test_M2MConnectionSecurity::test_connect()
+{
+    M2MConnectionSecurity impl = M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    m2mconnectionsecuritypimpl_stub::int_value = 7;
+    CHECK( 7 == impl.connect(NULL));
+}
+
+void Test_M2MConnectionSecurity::test_start_connecting_non_blocking()
+{
+    M2MConnectionSecurity impl = M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    m2mconnectionsecuritypimpl_stub::int_value = 7;
+    CHECK( 7 == impl.start_connecting_non_blocking(NULL));
+}
+
+void Test_M2MConnectionSecurity::test_continue_connecting()
+{
+    M2MConnectionSecurity impl = M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    m2mconnectionsecuritypimpl_stub::int_value = 7;
+    CHECK( 7 == impl.continue_connecting());
+}
+
+void Test_M2MConnectionSecurity::test_send_message()
+{
+    M2MConnectionSecurity impl = M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    unsigned char msg[6] = "hello";
+    m2mconnectionsecuritypimpl_stub::int_value = 7;
+    CHECK( 7 == impl.send_message(msg, 5) );
+}
+
+void Test_M2MConnectionSecurity::test_read()
+
+{
+    M2MConnectionSecurity impl = M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    unsigned char msg[50];
+    m2mconnectionsecuritypimpl_stub::int_value = 7;
+    CHECK( 7 == impl.read(msg, 49));
+}
+
+void Test_M2MConnectionSecurity::test_set_random_number_callback()
+{
+    M2MConnectionSecurity impl = M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    random_number_cb cb(&test_random_callback);
+    impl.set_random_number_callback(cb);
+
+}
+
+void Test_M2MConnectionSecurity::test_set_entropy_callback()
+{
+    M2MConnectionSecurity impl = M2MConnectionSecurity(M2MConnectionSecurity::TLS);
+    impl.set_entropy_callback(ent_cb);
+}
+
+uint32_t test_random_callback(void)
+{
+    return 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecurity_mbedtls/test_m2mconnectionsecurity_mbedtls.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_CONNECTION_SECURITY_H
+#define TEST_M2M_CONNECTION_SECURITY_H
+
+#include "m2mconnectionsecurity.h"
+
+uint32_t test_random_callback(void);
+
+class Test_M2MConnectionSecurity
+{
+public:
+    Test_M2MConnectionSecurity();
+
+    virtual ~Test_M2MConnectionSecurity();
+
+    void test_constructor();
+
+    void test_destructor();
+
+    void test_reset();
+
+    void test_init();
+
+    void test_connect();
+
+    void test_start_connecting_non_blocking();
+
+    void test_continue_connecting();
+
+    void test_send_message();
+
+    void test_read();
+
+    void test_set_random_number_callback();
+
+    void test_set_entropy_callback();
+};
+
+
+#endif // TEST_M2M_CONNECTION_SECURITY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,28 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mconnectionsecuritypimpl_mbedtls
+        "../../../../yotta_modules/mbed-client-mbedtls/source/m2mconnectionsecuritypimpl.cpp"
+        "main.cpp"
+        "m2mconnectionsecuritypimpl_mbedtlstest.cpp"
+        "test_m2mconnectionsecuritypimpl_mbedtls.cpp"
+        "../stub/m2msecurity_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mtimer_stub.cpp"
+        "../stub/mbedtls_stub.cpp"
+        "../stub/m2mconnectionhandler_stub.cpp"
+        "../stub/m2mconnectionsecurity_stub.cpp"
+)
+
+target_link_libraries(m2mconnectionsecuritypimpl_mbedtls
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mconnectionsecuritypimpl_mbedtls
+PROPERTIES COMPILE_FLAGS "${UTEST_COMPILE_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mconnectionsecuritypimpl_mbedtls -ojunit")
+add_test(m2mconnectionsecuritypimpl_mbedtls ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,20 @@
+include ../makefile_defines.txt
+
+COMPONENT_NAME = m2mconnectionsecuritypimpl_unit
+SRC_FILES = \
+        ../../../../source/m2mconnectionsecuritypimpl.cpp \
+
+TEST_SRC_FILES = \
+	main.cpp \
+	m2mconnectionsecuritypimpl_mbedtlstest.cpp \
+        test_m2mconnectionsecuritypimpl_mbedtls.cpp \
+        ../stub/m2mstring_stub.cpp \
+        ../stub/m2mtimer_stub.cpp \
+        ../stub/m2mbase_stub.cpp \
+        ../stub/m2mobject_stub.cpp \
+        ../stub/m2msecurity_stub.cpp \
+        ../stub/mbedtls_stub.cpp \
+        ../stub/m2mconnectionhandler_stub.cpp \
+        ../stub/m2mconnectionsecurity_stub.cpp \
+
+include ../MakefileWorker.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/m2mconnectionsecuritypimpl_mbedtlstest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mconnectionsecuritypimpl_mbedtls.h"
+
+
+TEST_GROUP(M2MConnectionSecurityPimpl_mbedtls)
+{
+  Test_M2MConnectionSecurityPimpl* inst;
+
+  void setup()
+  {
+    inst = new Test_M2MConnectionSecurityPimpl();
+  }
+  void teardown()
+  {
+    delete inst;
+  }
+};
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, Create)
+{
+    CHECK(inst != NULL);
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_constructor)
+{
+    inst->test_constructor();
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_destructor)
+{
+    inst->test_destructor();
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_reset)
+{
+    inst->test_reset();
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_init)
+{
+    inst->test_init();
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_connect)
+{
+    inst->test_connect();
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_start_connecting_non_blocking)
+{
+    inst->test_start_connecting_non_blocking();
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_continue_connecting)
+{
+    inst->test_continue_connecting();
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_send_message)
+{
+    inst->test_send_message();
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_read)
+{
+    inst->test_read();
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_timer_expired)
+{
+    inst->test_timer_expired();
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_set_random_number_callback)
+{
+    inst->test_set_random_number_callback();
+}
+
+TEST(M2MConnectionSecurityPimpl_mbedtls, test_set_entropy_callback)
+{
+    inst->test_set_entropy_callback();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+    return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP(M2MConnectionSecurityPimpl_mbedtls);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/test_m2mconnectionsecuritypimpl_mbedtls.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,409 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mconnectionsecuritypimpl_mbedtls.h"
+#include "m2mtimerobserver.h"
+#include "m2msecurity.h"
+#include "m2msecurity_stub.h"
+#include "mbedtls_stub.h"
+#include "mbed-client/m2mconnectionhandler.h"
+#include "m2mtimer_stub.h"
+
+uint32_t get_random_number(void)
+{
+    return time(NULL);
+}
+
+entropy_cb ent_cb;
+
+int ent_poll( void *, unsigned char *output, size_t len,
+                           size_t *olen )
+{
+    for(uint16_t i=0; i < len; i++){
+        srand(time(NULL));
+        output[i] = rand() % 256;
+    }
+    *olen = len;
+
+    return( 0 );
+}
+
+class TestObserver : public M2MConnectionObserver {
+
+public:
+    TestObserver(){}
+    void data_available(uint8_t*,
+                        uint16_t,
+                        const M2MConnectionObserver::SocketAddress &){}
+
+    void socket_error(uint8_t error_code, bool retry = true){}
+
+    void address_ready(const M2MConnectionObserver::SocketAddress &,
+                       M2MConnectionObserver::ServerType,
+                       const uint16_t){}
+
+    void data_sent(){}
+};
+
+Test_M2MConnectionSecurityPimpl::Test_M2MConnectionSecurityPimpl()
+{
+    mbedtls_stub::clear();
+    m2msecurity_stub::clear();
+}
+
+Test_M2MConnectionSecurityPimpl::~Test_M2MConnectionSecurityPimpl()
+{
+}
+
+void Test_M2MConnectionSecurityPimpl::test_constructor()
+{
+    M2MConnectionSecurityPimpl impl = M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    CHECK(impl._timer != NULL);
+}
+
+void Test_M2MConnectionSecurityPimpl::test_destructor()
+{
+    M2MConnectionSecurityPimpl* impl = new M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    delete impl;
+    //Memory leak detector will report an error if leaks
+}
+
+void Test_M2MConnectionSecurityPimpl::test_reset()
+{
+    M2MConnectionSecurityPimpl impl = M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    impl._init_done = true;
+    impl.reset();
+    CHECK(impl._init_done == false);
+}
+
+void Test_M2MConnectionSecurityPimpl::test_init()
+{
+    M2MConnectionSecurityPimpl impl = M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    CHECK( -1 == impl.init(NULL) );
+
+    m2msecurity_stub::int_value = 5;
+    M2MSecurity* sec = new M2MSecurity(M2MSecurity::Bootstrap);
+    CHECK( -1 == impl.init(sec) );
+
+    m2msecurity_stub::int_value = 5;
+    m2msecurity_stub::has_value = true;
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = -1;
+    m2msecurity_stub::int_value = M2MSecurity::Psk;
+    CHECK( -1 == impl.init(sec) );
+
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    m2msecurity_stub::int_value = 5;
+    m2msecurity_stub::has_value = true;
+    mbedtls_stub::expected_int = -1;
+    mbedtls_stub::crt_expected_int = -1;
+    CHECK( -1 == impl.init(sec) );
+
+    mbedtls_stub::crt_expected_int = 0;
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    mbedtls_stub::retArray[1] = 0;
+    mbedtls_stub::retArray[2] = 0;
+    m2msecurity_stub::int_value = M2MSecurity::Psk;
+    CHECK( 0 == impl.init(sec) );
+
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    mbedtls_stub::retArray[1] = -1;
+    mbedtls_stub::retArray[2] = -1;
+    m2msecurity_stub::int_value = M2MSecurity::Certificate;
+    CHECK( -1 == impl.init(sec) );
+
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    mbedtls_stub::retArray[1] = 0;
+    m2msecurity_stub::int_value = M2MSecurity::Certificate;
+    CHECK( -1 == impl.init(sec) );
+
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    mbedtls_stub::retArray[1] = 0;
+    mbedtls_stub::retArray[2] = 0;
+    m2msecurity_stub::int_value = M2MSecurity::Certificate;
+    CHECK( -1 == impl.init(sec) );
+
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    mbedtls_stub::retArray[1] = 0;
+    mbedtls_stub::retArray[2] = 0;
+    mbedtls_stub::retArray[3] = 0;
+    mbedtls_stub::retArray[4] = -1;
+    m2msecurity_stub::int_value = M2MSecurity::Certificate;
+    CHECK( -1 == impl.init(sec) );
+
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    mbedtls_stub::retArray[1] = 0;
+    mbedtls_stub::retArray[2] = 0;
+    mbedtls_stub::retArray[3] = 0;
+    mbedtls_stub::retArray[4] = 0;
+    m2msecurity_stub::int_value = M2MSecurity::Certificate;
+    CHECK( 0 == impl.init(sec) );
+
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    mbedtls_stub::retArray[1] = 0;
+    mbedtls_stub::retArray[2] = 0;
+    m2msecurity_stub::int_value = 99;
+    CHECK( -1 == impl.init(sec) );
+
+    impl.set_random_number_callback(NULL);
+
+    ent_cb.entropy_source_ptr = ent_poll;
+    ent_cb.p_source = NULL;
+    ent_cb.threshold = 128;
+    ent_cb.strong = 0;
+
+    m2msecurity_stub::int_value = 5;
+    m2msecurity_stub::has_value = false;
+    mbedtls_stub::useCounter = false;
+    mbedtls_stub::expected_int = 0;
+    mbedtls_stub::crt_expected_int = 0;
+    mbedtls_stub::counter = 1;
+    m2msecurity_stub::int_value = M2MSecurity::Certificate;
+    CHECK( -1 == impl.init(sec) );
+
+    impl.set_entropy_callback(ent_cb);
+    m2msecurity_stub::int_value = 5;
+    m2msecurity_stub::has_value = false;
+    mbedtls_stub::useCounter = false;
+    mbedtls_stub::expected_int = -1;
+    mbedtls_stub::crt_expected_int = 0;
+    mbedtls_stub::counter = 1;
+    m2msecurity_stub::int_value = M2MSecurity::Certificate;
+    CHECK( -1 == impl.init(sec) );
+
+    delete sec;
+    mbedtls_stub::clear();
+}
+
+void Test_M2MConnectionSecurityPimpl::test_connect()
+{
+    mbedtls_stub::invalidate_timer = true;
+    M2MConnectionSecurityPimpl impl = M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    CHECK( -1 == impl.connect(NULL));
+
+    impl._init_done = true;
+    CHECK( -1 == impl.connect(NULL));
+
+    m2msecurity_stub::int_value = 5;
+    m2msecurity_stub::has_value = true;
+
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    CHECK( -1 == impl.connect(NULL));
+
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    CHECK( -1 == impl.connect(NULL));
+
+    m2mtimer_stub::bool_value = true;
+
+    TestObserver obs;
+    M2MConnectionHandler* obj = new M2MConnectionHandler(obs, NULL, M2MInterface::NOT_SET,M2MInterface::LwIP_IPv4);
+
+    mbedtls_stub::expected_uint32_value = 12;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    mbedtls_stub::retArray[1] = 0;
+    mbedtls_stub::retArray[2] = MBEDTLS_ERR_SSL_WANT_READ;
+    mbedtls_stub::retArray[3] = MBEDTLS_ERR_SSL_WANT_WRITE;
+    mbedtls_stub::retArray[4] = 0;
+    CHECK( -1 == impl.connect(obj));
+
+    delete obj;
+
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::expected_uint32_value = 0;
+    CHECK( 0 == impl.connect(NULL));
+
+    //Tests mbedtls_timing_get_delay() for intermediate case
+    mbedtls_stub::counter = 0;
+    m2mtimer_stub::total_bool_value = false;
+    m2mtimer_stub::bool_value = true;
+    mbedtls_stub::expected_uint32_value = 1;
+
+    CHECK( -1 == impl.connect(obj));
+
+    //Tests mbedtls_timing_get_delay() for cancelled case
+    mbedtls_stub::invalidate_timer = true;
+
+    mbedtls_stub::counter = 0;
+    m2mtimer_stub::total_bool_value = true;
+    CHECK( -1 == impl.connect(obj));
+
+    //Tests mbedtls_timing_get_delay() for NULL case
+    mbedtls_stub::counter = 0;
+    delete(impl._timer);
+    impl._timer = NULL;
+    CHECK( -1 == impl.connect(obj));
+}
+
+void Test_M2MConnectionSecurityPimpl::test_start_connecting_non_blocking()
+{
+    M2MConnectionSecurityPimpl impl = M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    CHECK( -1 == impl.start_connecting_non_blocking(NULL));
+
+    m2mtimer_stub::total_bool_value = false;
+    impl._init_done = true;
+    impl._sec_mode = M2MConnectionSecurity::TLS;
+    CHECK( -1 == impl.start_connecting_non_blocking(NULL));
+
+    m2msecurity_stub::int_value = 5;
+    m2msecurity_stub::has_value = true;
+
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    CHECK( -1 == impl.start_connecting_non_blocking(NULL));
+
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    mbedtls_stub::retArray[1] = 0;
+    CHECK( -1 == impl.start_connecting_non_blocking(NULL));
+
+    TestObserver obs;
+    M2MConnectionHandler* obj = new M2MConnectionHandler(obs, NULL, M2MInterface::NOT_SET, M2MInterface::LwIP_IPv4);
+
+    m2mtimer_stub::total_bool_value = true;
+    mbedtls_stub::expected_uint32_value = 12;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    mbedtls_stub::retArray[1] = 0;
+    mbedtls_stub::retArray[2] = 0;
+    mbedtls_stub::retArray[3] = 0;
+    mbedtls_stub::retArray[4] = 0;
+    CHECK( 1 == impl.start_connecting_non_blocking(obj));
+
+    delete obj;
+
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::expected_uint32_value = 0;
+    mbedtls_stub::retArray[3] = -1;
+    CHECK( -1 == impl.start_connecting_non_blocking(NULL));
+}
+
+void Test_M2MConnectionSecurityPimpl::test_continue_connecting()
+{
+    M2MConnectionSecurityPimpl impl = M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    impl._ssl.state = MBEDTLS_SSL_HELLO_REQUEST;
+    mbedtls_stub::expected_int = MBEDTLS_ERR_SSL_WANT_READ;
+    CHECK( M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ == impl.continue_connecting());
+
+    mbedtls_stub::expected_int = MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST;
+    impl._ssl.state = MBEDTLS_SSL_CLIENT_HELLO;
+    CHECK( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST == impl.continue_connecting());
+
+    mbedtls_stub::expected_int = -6;
+    impl._ssl.state = MBEDTLS_SSL_HANDSHAKE_OVER;
+    CHECK( -6 == impl.continue_connecting());
+
+    mbedtls_stub::expected_int = 0;
+    impl._ssl.state = MBEDTLS_SSL_HANDSHAKE_OVER;
+    CHECK( 0 == impl.continue_connecting());
+}
+
+void Test_M2MConnectionSecurityPimpl::test_send_message()
+{
+    M2MConnectionSecurityPimpl impl = M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    unsigned char msg[6] = "hello";
+    CHECK( -1 == impl.send_message(msg, 5) );
+    impl._init_done = true;
+
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = MBEDTLS_ERR_SSL_WANT_READ;
+    mbedtls_stub::retArray[1] = MBEDTLS_ERR_SSL_WANT_WRITE;
+    mbedtls_stub::retArray[2] = 65;
+    CHECK( 65 == impl.send_message(msg, 5) );
+}
+
+void Test_M2MConnectionSecurityPimpl::test_read()
+
+{
+    M2MConnectionSecurityPimpl impl = M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    unsigned char msg[50];
+    CHECK( -1 == impl.read(msg, 49));
+
+    impl._init_done = true;
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = MBEDTLS_ERR_SSL_WANT_READ;
+    mbedtls_stub::retArray[1] = MBEDTLS_ERR_SSL_WANT_WRITE;
+    mbedtls_stub::retArray[2] = 25;
+    CHECK( 25 == impl.read(msg, 49));
+}
+
+void Test_M2MConnectionSecurityPimpl::test_timer_expired()
+{
+    //This uses static function so we need to prepare test using connect() function.
+    mbedtls_stub::invalidate_timer = false;
+    M2MConnectionSecurityPimpl impl = M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    impl._init_done = true;
+    m2msecurity_stub::int_value = 5;
+    m2msecurity_stub::has_value = true;
+    mbedtls_stub::useCounter = true;
+    mbedtls_stub::counter = 0;
+    mbedtls_stub::retArray[0] = 0;
+    mbedtls_stub::retArray[1] = 0;
+    mbedtls_stub::retArray[3] = M2MConnectionHandler::CONNECTION_ERROR_WANTS_READ;
+    impl.connect(NULL);
+
+    void *bio = malloc(1);
+    impl._ssl.p_bio = bio;
+    impl.timer_expired(M2MTimerObserver::Dtls);
+
+    // For testing blocking mode use case
+    mbedtls_stub::useCounter = false;
+    mbedtls_stub::expected_int = MBEDTLS_ERR_SSL_TIMEOUT;
+
+    impl.timer_expired(M2MTimerObserver::Dtls);
+    free(bio);
+}
+
+void Test_M2MConnectionSecurityPimpl::test_set_random_number_callback()
+{
+    M2MConnectionSecurityPimpl impl = M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    random_number_cb cb(&test_random_callback);
+    impl.set_random_number_callback(cb);
+}
+
+void Test_M2MConnectionSecurityPimpl::test_set_entropy_callback()
+{
+    M2MConnectionSecurityPimpl impl = M2MConnectionSecurityPimpl(M2MConnectionSecurity::TLS);
+    impl.set_entropy_callback(ent_cb);
+}
+
+uint32_t test_random_callback(void)
+{
+    return 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/m2mconnectionsecuritypimpl_mbedtls/test_m2mconnectionsecuritypimpl_mbedtls.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_CONNECTION_SECURITY_PIMPL_H
+#define TEST_M2M_CONNECTION_SECURITY_PIMPL_H
+
+#include "mbed-client-mbedtls/m2mconnectionsecuritypimpl.h"
+
+uint32_t test_random_callback(void);
+
+class Test_M2MConnectionSecurityPimpl
+{
+public:
+    Test_M2MConnectionSecurityPimpl();
+
+    virtual ~Test_M2MConnectionSecurityPimpl();
+
+    void test_constructor();
+
+    void test_destructor();
+
+    void test_reset();
+
+    void test_init();
+
+    void test_connect();
+
+    void test_start_connecting_non_blocking();
+
+    void test_continue_connecting();
+
+    void test_send_message();
+
+    void test_read();
+
+    void test_timer_expired();
+
+    void test_set_random_number_callback();
+
+    void test_set_entropy_callback();
+
+};
+
+
+#endif // TEST_M2M_CONNECTION_SECURITY_PIMPL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/makefile_defines.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,28 @@
+#--- Inputs ----#
+CPPUTEST_HOME = /usr
+CPPUTEST_USE_EXTENSIONS = Y
+CPPUTEST_USE_VPATH = Y
+CPPUTEST_USE_GCOV = Y
+CPP_PLATFORM = gcc
+INCLUDE_DIRS =\
+  .\
+  ../common\
+  ../stub\
+  ../../../../source/include\
+  ../../../../source\
+  ../../../../\
+  ../../../../yotta_modules/mbed-client/mbed-client\
+  ../../../../yotta_modules/mbed-client\
+  ../../../../yotta_modules/mbed-client/source\
+  ../../../../yotta_modules/mbed-client/source/include\
+  ../../../../yotta_modules/mbed-client-c\
+  ../../../../yotta_modules/mbed-client-c/source/libNsdl\
+  ../../../../yotta_modules/mbed-client-c/source/libNsdl/src/include\
+  ../../../../yotta_modules/mbedtls\
+  ../../../../yotta_modules/mbed-client-mbed-os\
+  ../../../../yotta_modules/nanostack-libservice\
+  ../../../../yotta_modules/mbed-trace\
+  /usr/include\
+  $(CPPUTEST_HOME)/include\
+
+CPPUTESTFLAGS = -D__thumb2__ -w
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/common_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,436 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "common_stub.h"
+#include "sn_grs.h"
+#include <sys/socket.h>
+
+socket_error_t common_stub::error;
+socket_event_t * common_stub::event;
+socket_addr * common_stub::addr;
+void * common_stub::void_value;
+bool common_stub::visited;
+bool common_stub::bool_value;
+int common_stub::int_value;
+int common_stub::int2_value;
+addrinfo* common_stub::addrinfo;
+uint16_t common_stub::uint_value;
+omalw_certificate_list_t *common_stub::cert;
+sn_coap_hdr_s *common_stub::coap_header;
+sn_nsdl_resource_info_s *common_stub::resource;
+pthread_t common_stub::thread;
+const char* common_stub::char_value;
+
+using namespace mbed;
+using namespace mbed::Sockets::v0;
+
+void common_stub::clear()
+{
+    int_value = -1;
+    int2_value = -1;
+    uint_value = 0;
+    error = SOCKET_ERROR_NONE;
+    event = NULL;
+    addr = NULL;
+    void_value = NULL;
+    cert = NULL;
+    visited = false;
+    bool_value= false;
+    coap_header = NULL;
+    resource = NULL;
+    addrinfo = NULL;
+    char_value = NULL;
+}
+
+UDPSocket::UDPSocket(socket_stack_t stack) :Socket(stack)
+{
+}
+
+UDPSocket::~UDPSocket()
+{
+}
+
+socket_error_t UDPSocket::connect(const SocketAddr *, const uint16_t )
+{
+    return common_stub::error;
+}
+
+//SocketAddr
+
+void SocketAddr::setAddr(const struct socket_addr *)
+{
+}
+
+void SocketAddr::setAddr(const SocketAddr *)
+{
+}
+
+bool SocketAddr::SocketAddr::is_v4()
+{
+    return common_stub::bool_value;
+}
+
+void mbed::Ticker::detach()
+{
+    common_stub::visited = true;
+}
+
+
+// SN_NSDL_LIB
+
+struct nsdl_s *sn_nsdl_init	(uint8_t (*sn_nsdl_tx_cb)(struct nsdl_s *, sn_nsdl_capab_e , uint8_t *, uint16_t, sn_nsdl_addr_s *),
+                             uint8_t (*sn_nsdl_rx_cb)(struct nsdl_s *, sn_coap_hdr_s *, sn_nsdl_addr_s *),
+                             void *(*sn_nsdl_alloc)(uint16_t),void (*sn_nsdl_free)(void *))
+{
+    return NULL;
+}
+
+uint16_t sn_nsdl_register_endpoint(struct nsdl_s *, sn_nsdl_ep_parameters_s *)
+{
+    return common_stub::uint_value;
+}
+
+uint16_t sn_nsdl_unregister_endpoint(struct nsdl_s *)
+{
+    return common_stub::uint_value;
+}
+
+uint16_t sn_nsdl_update_registration(struct nsdl_s *,uint8_t *, uint8_t)
+{
+    return common_stub::uint_value;
+}
+
+uint16_t sn_nsdl_send_observation_notification(struct nsdl_s *, uint8_t *, uint8_t,
+                                                    uint8_t *, uint16_t,
+                                                    uint8_t *, uint8_t,
+                                                    sn_coap_msg_type_e , uint8_t)
+{
+    return common_stub::uint_value;
+}
+
+int8_t sn_nsdl_destroy(struct nsdl_s *handle)
+{
+    return common_stub::int_value;
+}
+
+sn_coap_hdr_s *sn_nsdl_build_response(struct nsdl_s *, sn_coap_hdr_s *, uint8_t )
+{
+    return common_stub::coap_header;
+}
+
+sn_nsdl_resource_info_s *sn_nsdl_get_resource(struct nsdl_s *, uint16_t, uint8_t *)
+{
+    return common_stub::resource;
+}
+
+int8_t sn_nsdl_process_coap(struct nsdl_s *, uint8_t *, uint16_t , sn_nsdl_addr_s *)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_exec(struct nsdl_s *, uint32_t)
+{
+    return common_stub::int_value;
+}
+
+void sn_nsdl_release_allocated_coap_msg_mem(struct nsdl_s *, sn_coap_hdr_s *header)
+{
+    if(header && header != common_stub::coap_header){
+        if( header->content_type_ptr ){
+            free(header->content_type_ptr);
+            header->content_type_ptr = NULL;
+        }
+        if( header->options_list_ptr){
+            free(header->options_list_ptr);
+            header->options_list_ptr = NULL;
+        }
+        free(header);
+        header = NULL;
+    }
+}
+
+int8_t sn_nsdl_create_resource(struct nsdl_s *, sn_nsdl_resource_info_s *)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_delete_resource(struct nsdl_s *, uint16_t , uint8_t *)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_send_coap_message(struct nsdl_s *, sn_nsdl_addr_s *, sn_coap_hdr_s *)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_update_resource(struct nsdl_s *, sn_nsdl_resource_info_s *)
+{
+    return common_stub::int_value;
+}
+
+int8_t set_NSP_address(struct nsdl_s *, uint8_t *, uint16_t, sn_nsdl_addr_type_e)
+{
+    return common_stub::int_value;
+}
+
+uint16_t sn_nsdl_oma_bootstrap(struct nsdl_s *, sn_nsdl_addr_s *,
+                             sn_nsdl_ep_parameters_s *,
+                             sn_nsdl_bs_ep_info_t *)
+{
+    return common_stub::uint_value;
+}
+
+omalw_certificate_list_t *sn_nsdl_get_certificates(struct nsdl_s *)
+{
+    return common_stub::cert;
+}
+
+int8_t sn_nsdl_update_certificates(struct nsdl_s *, omalw_certificate_list_t*, uint8_t)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_create_oma_device_object(struct nsdl_s *, sn_nsdl_oma_device_t *)
+{
+    return common_stub::int_value;
+}
+
+//Coap Headers
+
+sn_coap_hdr_s *sn_coap_build_response(struct coap_s *, sn_coap_hdr_s *, uint8_t )
+{
+    return common_stub::coap_header;
+}
+
+void sn_coap_parser_release_allocated_coap_msg_mem(struct coap_s *, sn_coap_hdr_s *)
+{
+}
+
+int8_t sn_coap_protocol_set_retransmission_parameters(uint8_t, uint8_t)
+{
+    return common_stub::int_value;
+}
+
+// IP6String.h
+uint_fast8_t ip6tos(const void *, char *)
+{
+}
+
+//Socket
+Socket::Socket(const socket_stack_t ) : _irq(this)
+{
+    _socket.api = NULL;
+}
+
+Socket::~Socket()
+{
+}
+
+socket_error_t Socket::open(const socket_address_family_t , const socket_proto_family_t )
+{
+    return common_stub::error;
+}
+
+bool Socket::error_check(socket_error_t )
+{
+    return common_stub::bool_value;
+}
+
+void Socket::_eventHandler(struct socket_event *)
+{
+}
+
+void Socket::setOnError(const ErrorHandler_t &)
+{
+}
+
+void Socket::setOnReadable(const ReadableHandler_t &)
+{
+}
+
+void Socket::setOnSent(const SentHandler_t & )
+{
+}
+
+void Socket::_nvEventHandler(void * )
+{
+}
+
+socket_error_t Socket::getLocalAddr(SocketAddr *) const
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::getLocalPort(uint16_t *) const
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::getRemoteAddr(SocketAddr *) const
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::getRemotePort(uint16_t *) const
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::resolve(const char* , const DNSHandler_t & )
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::bind(const char * , const uint16_t )
+{
+    return common_stub::error;
+}
+socket_error_t Socket::bind(const SocketAddr * , const uint16_t )
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::close()
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::recv(void * , size_t *)
+{
+    return common_stub::error;
+}
+socket_error_t Socket::recv_from(void * , size_t *, SocketAddr *, uint16_t *)
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::send(const void * , const size_t )
+{
+    return common_stub::error;
+}
+socket_error_t Socket::send_to(const void * , const size_t , const SocketAddr *, uint16_t )
+{
+    return common_stub::error;
+}
+
+bool Socket::isConnected() const {
+    return common_stub::error;
+}
+
+// pthread
+int pthread_equal (pthread_t , pthread_t ) __THROW
+{
+    return common_stub::int2_value;
+}
+
+pthread_t pthread_self (void) __THROW
+{
+    return common_stub::thread;
+}
+
+int pthread_detach (pthread_t) __THROW
+{
+    return common_stub::int_value;
+}
+
+int pthread_create (pthread_t * ,
+                    const pthread_attr_t *,
+                    void *(*__start_routine) (void *),
+                    void *) __THROWNL
+{
+    __start_routine(NULL);
+    return common_stub::int_value;
+}
+
+int pthread_cancel (pthread_t)
+{
+    return common_stub::int_value;
+}
+
+int pthread_join (pthread_t , void **)
+{
+    return common_stub::int_value;
+}
+
+void pthread_exit (void *__retval)/* __attribute__ ((__noreturn__))*/
+{
+
+}
+
+// sys/socket
+#ifndef __SOCKADDR_ARG
+# define __SOCKADDR_ARG		struct sockaddr *__restrict
+#endif
+
+#ifndef __CONST_SOCKADDR_ARG
+# define __CONST_SOCKADDR_ARG	const struct sockaddr *
+#endif
+
+#ifndef __socklen_t_defined
+typedef __socklen_t socklen_t;
+# define __socklen_t_defined
+#endif
+
+int bind (int , __CONST_SOCKADDR_ARG , socklen_t )
+     __THROW
+{
+    return common_stub::int_value;
+}
+
+ssize_t sendto (int , const void *, size_t ,
+                               int , __CONST_SOCKADDR_ARG ,
+                               socklen_t )
+{
+    return common_stub::int_value;
+}
+
+ssize_t recvfrom (int , void * , size_t ,
+             int , __SOCKADDR_ARG ,
+             socklen_t * )
+{
+    return common_stub::int_value;
+}
+
+int getaddrinfo (const char *__restrict,
+            const char *__restrict,
+            const struct addrinfo *__restrict,
+            struct addrinfo **__restrict addr)
+{
+    //*addr = (addrinfo*)malloc(sizeof(addrinfo));
+    //(*addr)->ai_addr = (sockaddr*)malloc(sizeof(sockaddr));
+    *addr = common_stub::addrinfo;
+    return common_stub::int_value;
+}
+
+void freeaddrinfo (struct addrinfo * addr)
+__THROW
+{
+//    free(addr->ai_addr);
+//    free(addr);
+}
+
+const char *inet_ntop (int, const void *__restrict,
+                  char *__restrict, socklen_t)
+     __THROW
+{
+    return common_stub::char_value;
+}
+
+int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
+{
+    return common_stub::int_value;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/common_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef COMMON_STUB_H
+#define COMMON_STUB_H
+
+#include <sys/types.h>
+#include <netdb.h>
+//#include "UDPSocket.h"
+#include "sockets/UDPSocket.h"
+#include "nsdlaccesshelper.h"
+#include "ip6string.h"
+#include "Ticker.h"
+
+//some internal test related stuff
+namespace common_stub
+{
+    extern socket_error_t error;
+    extern socket_event_t* event;
+    extern socket_addr* addr;
+    extern bool visited;
+    extern bool bool_value;
+    extern void* void_value;
+    extern int int_value;
+    extern int int2_value;
+    extern uint16_t uint_value;
+    extern omalw_certificate_list_t *cert;
+    extern addrinfo* addrinfo;
+    extern sn_coap_hdr_s *coap_header;
+    extern sn_nsdl_resource_info_s *resource;
+    extern pthread_t thread;
+    extern const char *char_value;
+    void clear();
+}
+
+#endif // COMMON_STUB_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mbase_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,337 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mbase_stub.h"
+
+#include <assert.h>
+
+uint8_t m2mbase_stub::uint8_value;
+uint16_t m2mbase_stub::uint16_value;
+uint32_t m2mbase_stub::uint32_value;
+uint16_t m2mbase_stub::int_value;
+int32_t m2mbase_stub::name_id_value;
+
+bool m2mbase_stub::bool_value;
+String *m2mbase_stub::string_value;
+
+M2MBase::BaseType m2mbase_stub::base_type;
+M2MBase::Operation m2mbase_stub::operation;
+M2MBase::Mode m2mbase_stub::mode_value;
+M2MBase::Observation m2mbase_stub::observation_level_value;
+
+void *m2mbase_stub::void_value;
+M2MObservationHandler *m2mbase_stub::observe;
+M2MReportHandler *m2mbase_stub::report;
+bool m2mbase_stub::is_value_updated_function_set;
+
+
+void m2mbase_stub::clear()
+{
+    int_value = 0;
+    uint8_value = 0;
+    uint16_value = 0;
+    uint32_value = 0;
+    string_value = NULL;
+    name_id_value = -1;
+    mode_value = M2MBase::Static;
+    base_type = M2MBase::Object;
+    observation_level_value = M2MBase::None;
+    bool_value = false;
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+    void_value = NULL;
+    observe = NULL;
+    report = NULL;
+    is_value_updated_function_set = false;
+}
+
+M2MBase::M2MBase(const String &/*resource_name*/,
+                 M2MBase::Mode /*mode*/)
+{
+}
+
+M2MBase& M2MBase::operator=(const M2MBase& other)
+{
+    if (this != &other) { // protect against invalid self-assignment
+    }
+    return *this;
+}
+
+M2MBase::M2MBase(const M2MBase& other)
+{
+    this->operator=(other);
+}
+
+M2MBase::~M2MBase()
+{
+}
+
+void M2MBase::set_operation(M2MBase::Operation opr)
+{
+    m2mbase_stub::operation = opr;
+}
+
+void M2MBase::set_interface_description(const String &/*desc*/)
+{
+}
+
+void M2MBase::set_resource_type(const String &/*res_type*/)
+{
+}
+
+void M2MBase::set_coap_content_type(const uint8_t /*con_type*/)
+{
+}
+
+void M2MBase::set_instance_id(const uint16_t /*inst_id*/)
+{
+}
+
+void M2MBase::set_observation_number(const uint16_t /*observation_number*/)
+{
+}
+
+void M2MBase::set_max_age(const uint32_t /*max_age*/)
+{
+}
+
+M2MBase::Operation M2MBase::operation() const
+{
+    return m2mbase_stub::operation;
+}
+
+const String& M2MBase::name() const
+{
+    return *m2mbase_stub::string_value;
+}
+
+int32_t M2MBase::name_id() const
+{
+    return m2mbase_stub::name_id_value;
+}
+
+uint16_t M2MBase::instance_id() const
+{
+    return m2mbase_stub::int_value;
+}
+
+const String& M2MBase::interface_description() const
+{
+    return *m2mbase_stub::string_value;
+}
+
+const String& M2MBase::resource_type() const
+{
+    return *m2mbase_stub::string_value;
+}
+
+uint8_t M2MBase::coap_content_type() const
+{
+    return m2mbase_stub::uint8_value;
+}
+
+uint32_t M2MBase::max_age() const
+{
+    return m2mbase_stub::uint32_value;
+}
+
+void M2MBase::set_observable(bool /*observable*/)
+{
+}
+
+void M2MBase::add_observation_level(M2MBase::Observation)
+{
+}
+
+void M2MBase::remove_observation_level(M2MBase::Observation)
+{
+}
+
+void M2MBase::set_under_observation(bool /*observed*/,
+                                   M2MObservationHandler */*handler*/)
+{
+}
+
+void M2MBase::set_observation_token(const uint8_t */*token*/,
+                                    const uint8_t /*length*/)
+{
+}
+
+bool M2MBase::is_observable() const
+{
+    return m2mbase_stub::bool_value;
+}
+
+M2MBase::Observation M2MBase::observation_level() const
+{
+    return m2mbase_stub::observation_level_value;
+}
+
+void M2MBase::get_observation_token(uint8_t *&/*token*/,
+                                    uint32_t &/*length*/)
+{
+}
+
+void M2MBase::set_base_type(M2MBase::BaseType /*type*/)
+{
+}
+
+M2MBase::BaseType M2MBase::base_type() const
+{
+    return m2mbase_stub::base_type;
+}
+
+M2MBase::Mode M2MBase::mode() const
+{
+    return m2mbase_stub::mode_value;
+}
+
+uint16_t M2MBase::observation_number() const
+{
+    return m2mbase_stub::uint16_value;
+}
+
+void M2MBase::remove_resource_from_coap(const String &)
+{
+}
+
+void M2MBase::remove_object_from_coap()
+{
+}
+
+bool M2MBase::handle_observation_attribute(char *&query)
+{
+    return m2mbase_stub::bool_value;
+}
+
+void M2MBase::observation_to_be_sent(m2m::Vector<uint16_t>, bool)
+{
+}
+
+void *M2MBase::memory_alloc(uint32_t size)
+{
+    if(size)
+        return malloc(size);
+    else
+        return 0;
+}
+
+void M2MBase::memory_free(void *ptr)
+{
+    if(ptr)
+        free(ptr);
+}
+
+uint8_t* M2MBase::alloc_string_copy(const uint8_t* source, uint32_t size)
+{
+    assert(source != NULL);
+
+    uint8_t* result = (uint8_t*)memory_alloc(size + 1);
+    if (result) {
+        memcpy(result, source, size);
+        result[size] = '\0';
+    }
+    return result;
+}
+
+uint8_t* M2MBase::alloc_copy(const uint8_t* source, uint32_t size)
+{
+    assert(source != NULL);
+
+    uint8_t* result = (uint8_t*)memory_alloc(size);
+    if (result) {
+        memcpy(result, source, size);
+    }
+    return result;
+}
+
+M2MReportHandler* M2MBase::report_handler()
+{
+    return m2mbase_stub::report;
+}
+
+M2MObservationHandler* M2MBase::observation_handler()
+{
+    return m2mbase_stub::observe;
+}
+
+sn_coap_hdr_s* M2MBase::handle_get_request(nsdl_s */*nsdl*/,
+                                           sn_coap_hdr_s */*received_coap_header*/,
+                                           M2MObservationHandler */*observation_handler*/)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+sn_coap_hdr_s* M2MBase::handle_put_request(nsdl_s */*nsdl*/,
+                                           sn_coap_hdr_s */*received_coap_header*/,
+                                           M2MObservationHandler */*observation_handler*/,
+                                           bool &execute_value_updated)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+sn_coap_hdr_s* M2MBase::handle_post_request(nsdl_s */*nsdl*/,
+                                            sn_coap_hdr_s */*received_coap_header*/,
+                                            M2MObservationHandler */*observation_handler*/,
+                                            bool &,
+                                            sn_nsdl_addr_s *)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+void M2MBase::set_register_uri( bool register_uri)
+{
+}
+
+bool M2MBase::register_uri()
+{
+    return m2mbase_stub::bool_value;
+}
+
+void M2MBase::set_uri_path(const String &uri_path)
+{
+}
+
+const String& M2MBase::uri_path() const
+{
+    return *m2mbase_stub::string_value;
+}
+
+bool M2MBase::is_under_observation() const
+{
+    return m2mbase_stub::bool_value;
+}
+
+void M2MBase::set_value_updated_function(value_updated_callback callback)
+{
+
+}
+
+void M2MBase::set_value_updated_function(value_updated_callback2 callback)
+{
+
+}
+
+bool M2MBase::is_value_updated_function_set()
+{
+    return m2mbase_stub::is_value_updated_function_set;
+}
+
+void M2MBase::execute_value_updated(const String& name)
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mbase_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_BASE_STUB_H
+#define M2M_BASE_STUB_H
+
+#include "m2mbase.h"
+
+//some internal test related stuff
+namespace m2mbase_stub
+{
+    extern uint8_t uint8_value;
+    extern uint16_t uint16_value;
+    extern uint32_t uint32_value;
+    extern uint16_t int_value;
+    extern int32_t name_id_value;
+    extern String *string_value;
+    extern bool bool_value;
+    extern M2MBase::BaseType base_type;
+    extern M2MBase::Mode mode_value;
+    extern M2MBase::Operation operation;
+    extern void *void_value;
+    extern M2MObservationHandler *observe;
+    extern M2MReportHandler *report;
+    extern M2MBase::Observation observation_level_value;
+    extern bool is_value_updated_function_set;
+    void clear();
+}
+
+#endif // M2M_BASE_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionhandler_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mconnectionhandler_stub.h"
+#include "m2mconnectionsecurity.h"
+#include "common_stub.h"
+
+int m2mconnectionhandler_stub::int_value;
+uint16_t m2mconnectionhandler_stub::uint_value;
+bool m2mconnectionhandler_stub::bool_value;
+
+void m2mconnectionhandler_stub::clear()
+{
+    int_value = -1;
+    uint_value = 0;
+    bool_value = false;
+}
+
+M2MConnectionHandler::M2MConnectionHandler(M2MConnectionObserver &observer,
+                                           M2MConnectionSecurity* sec,
+                                           M2MInterface::BindingMode,
+                                           M2MInterface::NetworkStack)
+:_observer(observer)
+{
+    if( sec ){
+        delete sec;
+        sec = NULL;
+    }
+}
+
+M2MConnectionHandler::~M2MConnectionHandler()
+{
+}
+
+bool M2MConnectionHandler::bind_connection(const uint16_t)
+{
+    return m2mconnectionhandler_stub::bool_value;
+}
+
+bool M2MConnectionHandler::resolve_server_address(const String&,
+                                                  const uint16_t,
+                                                  M2MConnectionObserver::ServerType,
+                                                  const M2MSecurity* )
+{
+    return m2mconnectionhandler_stub::bool_value;
+}
+
+bool M2MConnectionHandler::start_listening_for_data()
+{
+    return m2mconnectionhandler_stub::bool_value;
+}
+
+bool M2MConnectionHandler::send_data(uint8_t *,
+                                     uint16_t ,
+                                     sn_nsdl_addr_s *)
+{
+    return m2mconnectionhandler_stub::bool_value;
+}
+
+void M2MConnectionHandler::stop_listening()
+{
+}
+
+int M2MConnectionHandler::send_to_socket(const unsigned char *, size_t )
+{
+    return m2mconnectionhandler_stub::int_value;
+}
+
+int M2MConnectionHandler::receive_from_socket(unsigned char *buf, size_t len)
+{
+    return m2mconnectionhandler_stub::int_value;
+}
+
+void M2MConnectionHandler::handle_connection_error(int)
+{
+}
+
+void M2MConnectionHandler::set_platform_network_handler(void *)
+{
+}
+
+void M2MConnectionHandler::claim_mutex()
+{
+}
+
+void M2MConnectionHandler::release_mutex()
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionhandler_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_CONNECTION_HANDLER_IMPL_MBED_STUB_H
+#define M2M_CONNECTION_HANDLER_IMPL_MBED_STUB_H
+
+#include "m2mconnectionhandler.h"
+
+//some internal test related stuff
+namespace m2mconnectionhandler_stub
+{
+    extern int int_value;
+    extern uint16_t uint_value;
+    extern bool bool_value;
+    void clear();
+}
+
+#endif // M2M_CONNECTION_HANDLER_IMPL_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionsecurity_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "m2mconnectionhandler.h"
+#include "m2mconnectionsecurity.h"
+#include "m2mtimer.h"
+#include "m2msecurity.h"
+#include <string.h>
+#include "m2mconnectionsecurity_stub.h"
+
+bool m2mconnectionsecurityimpl_stub::use_inc_int;
+int m2mconnectionsecurityimpl_stub::inc_int_value;
+int m2mconnectionsecurityimpl_stub::int_value;
+
+void m2mconnectionsecurityimpl_stub::clear()
+{
+    int_value = -1;
+    use_inc_int = false;
+    inc_int_value = 0;
+}
+
+M2MConnectionSecurity::M2MConnectionSecurity(M2MConnectionSecurity::SecurityMode mode)
+{
+
+}
+
+M2MConnectionSecurity::~M2MConnectionSecurity(){
+}
+
+void M2MConnectionSecurity::reset(){
+}
+
+int M2MConnectionSecurity::init(const M2MSecurity *security){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::connect(M2MConnectionHandler* connHandler){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::start_connecting_non_blocking(M2MConnectionHandler* connHandler)
+{
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::continue_connecting()
+{
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::send_message(unsigned char *message, int len){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::read(unsigned char* buffer, uint16_t len){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionsecurity_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_CONNECTION_SECURITY_IMPL_STUB_H
+#define M2M_CONNECTION_SECURITY_IMPL_STUB_H
+
+//some internal test related stuff
+namespace m2mconnectionsecurityimpl_stub
+{
+    extern int int_value;
+    extern bool use_inc_int;
+    extern int inc_int_value;
+    void clear();
+}
+
+#endif // M2M_CONNECTION_SECURITY_IMPL_STUB_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionsecuritypimpl_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "m2mconnectionhandler.h"
+#include "m2mconnectionsecurity.h"
+#include "mbed-client-mbedtls/m2mconnectionsecuritypimpl.h"
+#include "m2mtimer.h"
+#include "m2msecurity.h"
+#include <string.h>
+#include "m2mconnectionsecuritypimpl_stub.h"
+
+int m2mconnectionsecuritypimpl_stub::int_value;
+
+void m2mconnectionsecuritypimpl_stub::clear()
+{
+    int_value = -1;
+}
+
+M2MConnectionSecurityPimpl::M2MConnectionSecurityPimpl(M2MConnectionSecurity::SecurityMode mode)
+{
+
+}
+
+M2MConnectionSecurityPimpl::~M2MConnectionSecurityPimpl(){
+}
+
+void M2MConnectionSecurityPimpl::reset(){
+}
+
+int M2MConnectionSecurityPimpl::init(const M2MSecurity *security){
+    return m2mconnectionsecuritypimpl_stub::int_value;
+}
+
+int M2MConnectionSecurityPimpl::connect(M2MConnectionHandler* connHandler){
+    return m2mconnectionsecuritypimpl_stub::int_value;
+}
+
+int M2MConnectionSecurityPimpl::start_connecting_non_blocking(M2MConnectionHandler* connHandler)
+{
+    return m2mconnectionsecuritypimpl_stub::int_value;
+}
+
+int M2MConnectionSecurityPimpl::continue_connecting()
+{
+    return m2mconnectionsecuritypimpl_stub::int_value;
+}
+
+int M2MConnectionSecurityPimpl::send_message(unsigned char *message, int len){
+    return m2mconnectionsecuritypimpl_stub::int_value;
+}
+
+int M2MConnectionSecurityPimpl::read(unsigned char* buffer, uint16_t len){
+    return m2mconnectionsecuritypimpl_stub::int_value;
+}
+
+void M2MConnectionSecurityPimpl::timer_expired(M2MTimerObserver::Type type){
+}
+
+void M2MConnectionSecurityPimpl::set_random_number_callback(random_number_cb){
+}
+
+void M2MConnectionSecurityPimpl::set_entropy_callback(entropy_cb){
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mconnectionsecuritypimpl_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_CONNECTION_SECURITY_PIMPL_STUB_H
+#define M2M_CONNECTION_SECURITY_PIMPL_STUB_H
+
+//some internal test related stuff
+namespace m2mconnectionsecuritypimpl_stub
+{
+    extern int int_value;
+    void clear();
+}
+
+#endif // M2M_CONNECTION_SECURITY_PIMPL_STUB_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mobject_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mobject_stub.h"
+
+u_int16_t m2mobject_stub::int_value;
+bool m2mobject_stub::bool_value;
+M2MObjectInstance* m2mobject_stub::inst;
+M2MObjectInstanceList m2mobject_stub::instance_list;
+M2MBase::BaseType m2mobject_stub::base_type;
+sn_coap_hdr_s *m2mobject_stub::header;
+
+void m2mobject_stub::clear()
+{
+    int_value = 0;
+    bool_value = false;
+    m2mobject_stub::base_type = M2MBase::Object;
+    instance_list.clear();
+    header = NULL;
+}
+
+M2MObject::M2MObject(const String &object_name)
+: M2MBase(object_name,M2MBase::Dynamic)
+{
+}
+
+M2MObject::~M2MObject()
+{
+}
+
+M2MObject& M2MObject::operator=(const M2MObject& )
+{
+    return *this;
+}
+
+M2MObject::M2MObject(const M2MObject& other)
+: M2MBase(other)
+{
+    *this = other;
+}
+
+M2MObjectInstance* M2MObject::create_object_instance(uint16_t instance_id)
+{
+    return m2mobject_stub::inst;
+}
+
+bool M2MObject::remove_object_instance(uint16_t)
+{
+    return m2mobject_stub::bool_value;
+}
+
+M2MObjectInstance* M2MObject::object_instance(uint16_t) const
+{
+    return m2mobject_stub::inst;
+}
+
+const M2MObjectInstanceList& M2MObject::instances() const
+{
+    return m2mobject_stub::instance_list;
+}
+
+uint16_t M2MObject::instance_count() const
+{
+    return m2mobject_stub::int_value;
+}
+
+M2MBase::BaseType M2MObject::base_type() const
+{
+    return m2mobject_stub::base_type;
+}
+
+void M2MObject::add_observation_level(M2MBase::Observation)
+{
+
+}
+
+void M2MObject::remove_observation_level(M2MBase::Observation)
+{
+
+}
+
+sn_coap_hdr_s* M2MObject::handle_get_request(nsdl_s *,
+                                  sn_coap_hdr_s *,
+                                  M2MObservationHandler *)
+{
+    return m2mobject_stub::header;
+}
+
+sn_coap_hdr_s* M2MObject::handle_put_request(nsdl_s *,
+                                  sn_coap_hdr_s *,
+                                  M2MObservationHandler *,
+                                  bool &execute)
+{
+    execute = m2mobject_stub::bool_value;
+    return m2mobject_stub::header;
+}
+
+sn_coap_hdr_s* M2MObject::handle_post_request(nsdl_s *,
+                                   sn_coap_hdr_s *,
+                                   M2MObservationHandler *,
+                                   bool &,
+                                   sn_nsdl_addr_s *)
+{
+    return m2mobject_stub::header;
+}
+
+void M2MObject::notification_update(uint16_t obj_instance_id)
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mobject_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_OBJECT_STUB_H
+#define M2M_OBJECT_STUB_H
+
+#include "m2mobject.h"
+#include "m2mobjectinstance.h"
+
+//some internal test related stuff
+namespace m2mobject_stub
+{
+    extern u_int16_t int_value;
+    extern M2MObjectInstance* inst;
+    extern bool bool_value;
+    extern M2MObjectInstanceList instance_list;
+    extern M2MBase::BaseType base_type;
+    extern sn_coap_hdr_s *header;
+    void clear();
+}
+
+#endif // M2M_OBJECT_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2msecurity_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2msecurity_stub.h"
+
+bool m2msecurity_stub::has_value;
+uint32_t m2msecurity_stub::int_value;
+bool m2msecurity_stub::bool_value;
+String *m2msecurity_stub::string_value;
+M2MResource* m2msecurity_stub::resource;
+
+void m2msecurity_stub::clear()
+{
+    has_value = false;
+    int_value = -1;
+    bool_value = false;
+    string_value = NULL;
+    resource = NULL;
+}
+
+M2MSecurity::M2MSecurity(ServerType ser_type)
+: M2MObject("0"),
+ _server_type(ser_type),
+ _server_instance(NULL)
+{
+}
+
+M2MSecurity::~M2MSecurity()
+{
+}
+
+M2MResource* M2MSecurity::create_resource(SecurityResource, uint32_t)
+{
+    return m2msecurity_stub::resource;
+}
+
+bool M2MSecurity::delete_resource(SecurityResource)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource,
+                                     const String &)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource,
+                                     uint32_t)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource,
+                                     const uint8_t *,
+                                     const uint16_t)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+String M2MSecurity::resource_value_string(SecurityResource) const
+{
+    return *m2msecurity_stub::string_value;
+}
+
+uint32_t M2MSecurity::resource_value_buffer(SecurityResource,
+                               uint8_t *&value) const
+{
+    if( m2msecurity_stub::has_value ){
+        value = (uint8_t *)malloc(5);
+        return 5;
+    }
+    return m2msecurity_stub::int_value;
+}
+
+uint32_t M2MSecurity::resource_value_buffer(SecurityResource,
+                               const uint8_t *&value) const
+{
+    if( m2msecurity_stub::has_value ){
+        value = (const uint8_t*)"dummy";
+        return 6;
+    }
+    return m2msecurity_stub::int_value;
+}
+
+uint32_t M2MSecurity::resource_value_int(SecurityResource) const
+{
+    return m2msecurity_stub::int_value;
+}
+
+bool M2MSecurity::is_resource_present(SecurityResource) const
+{
+    return m2msecurity_stub::bool_value;
+}
+
+uint16_t M2MSecurity::total_resource_count() const
+{
+    return (uint16_t)m2msecurity_stub::int_value;
+}
+
+M2MSecurity::ServerType M2MSecurity::server_type() const
+{
+    return _server_type;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2msecurity_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_SECURITY_STUB_H
+#define M2M_SECURITY_STUB_H
+
+#include "m2msecurity.h"
+
+//some internal test related stuff
+namespace m2msecurity_stub
+{
+    extern bool has_value;
+    extern uint32_t int_value;
+    extern bool bool_value;
+    extern String *string_value;
+    extern M2MResource* resource;
+    void clear();
+}
+
+#endif // M2M_SECURITY_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mstring_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,419 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mstring.h"
+#include <string.h> // strlen
+#include <stdlib.h> // malloc, realloc
+#include <assert.h>
+#include <algorithm> // min
+
+namespace m2m {
+
+const String::size_type String::npos = static_cast<size_t>(-1);
+
+char* String::strdup(const char* s)
+{
+    const size_t len = strlen(s)+1;
+    char *p2 = static_cast<char*>(malloc(len));
+    memcpy(p2, s, len);
+    allocated_ = len;
+    size_ = len-1;
+    return p2;
+}
+
+String::String()
+    : p( strdup("") )
+{
+}
+
+String::~String()
+{
+    free(p);
+    p = 0;
+}
+
+String::String(const String& s)
+    : p(0)
+{
+    if( &s != NULL ) {
+        p = static_cast<char*>(malloc(s.size_ + 1));
+
+        allocated_ = s.size_ + 1;
+        size_      = s.size_;
+        memcpy(p, s.p, size_ + 1);
+    }
+}
+
+String::String(const char* s)
+    : p(strdup(s))
+{
+}
+
+String& String::operator=(const char* s)
+{
+    if ( p != s ) {
+        // s could point into our own string, so we have to allocate a new string
+        const size_t len = strlen(s);
+        char* copy = (char*) malloc( len + 1);
+        memmove(copy, s, len+1); // trailing 0
+        free( p );
+        p = copy;
+        size_ = len;
+        allocated_ = len+1;
+    }
+    return *this;
+}
+
+String& String::operator=(const String& s)
+{
+    return operator=(s.p);
+}
+
+String& String::operator+=(const String& s)
+{
+    if (s.size_ > 0) {
+        this->reserve(size_ + s.size_);
+        memmove(p+size_, s.p, s.size_+1); // trailing 0
+        size_ += s.size_;
+    }
+    return *this;
+}
+
+// since p and s may overlap, we have to copy our own string first
+String& String::operator+=(const char* s)
+{
+    const size_type lens = strlen(s);
+    if (lens > 0) {
+        if (size_ + lens + 1 <= allocated_) {
+            memmove(p+size_, s, lens+1); // trailing 0
+            size_ += lens;
+        } else {
+            String s2( *this );  // copy own data
+            s2.reserve(size_ + lens);
+            memmove(s2.p+size_, s, lens+1); // trailing 0
+            s2.size_ = size_ + lens;
+            this->swap( s2 );
+        }
+    }
+    return *this;
+}
+
+String& String::operator+=(const char c)
+{
+    push_back(c);
+    return *this;
+}
+
+void String::push_back(const char c) {
+
+    if (size_ == allocated_ - 1) {
+        size_t more =  (allocated_* 3) / 2; // factor 1.5
+        if ( more < 4 ) more = 4;
+        reserve( size_ + more );
+    }
+
+    p[size_] = c;
+    size_++;
+    p[size_] = 0;
+}
+
+bool String::operator==(const char* s) const
+{
+    if( s == NULL ) {
+        if( p == NULL ) {
+            return true;
+        }
+        return false;
+    }
+    bool ret = strcmp(p, s);
+    return !ret;
+}
+
+bool String::operator==(const String& s) const
+{
+    bool ret = strcmp(p, s.p);
+    return !ret;
+}
+
+void String::clear()
+{
+    size_ = 0;
+    p[0]  = 0;
+}
+
+String String::substr(const size_type pos, size_type length) const
+{
+    String s;
+    const size_type len = size_;
+
+    if ( pos <= len ) {
+
+        size_type remain = len - pos;
+
+        if ( length > remain )
+            length = remain;
+
+        s.reserve( length );
+
+        memcpy(s.p, p + pos, length);
+        s.p[length] = '\0';
+        s.size_ = length;
+    }
+    return s;
+}
+
+
+// checked access, accessing the NUL at end is allowed
+char String::at(const size_type i) const
+{
+    if ( i <= strlen(p) ) {
+        return p[i];
+    } else {
+        return '\0';
+    }
+}
+
+String& String::erase(size_type pos, size_type len)
+{
+    if (len > 0) {
+
+        if ( pos < size_ ) { // user must not remove trailing 0
+
+            size_type s2 = size_;
+            size_type remain = s2 - pos - len;
+
+            if (remain > 0) {
+                // erase by overwriting
+                memmove(p + pos, p + pos + len, remain);
+            }
+
+            //if ( remain < 0 ) remain = 0;
+
+            // remove unused space
+            this->resize( pos+remain );
+
+        }
+    }
+    return *this;
+}
+
+String& String::append( const char* str, size_type n) {
+    if (str && n > 0) {
+        size_t lens = strlen(str);
+        if (n > lens)
+            n = lens;
+        size_t newlen = size_ + n;
+        this->reserve( newlen );
+        memmove(p+size_, str, n); // p and s.p MAY overlap
+        p[newlen] = 0; // add NUL termination
+        size_ = newlen;
+    }
+    return *this;
+}
+
+String& String::append_raw( const char* str, size_type n) {
+    if (str && n > 0) {
+        size_t newlen = size_ + n;
+        this->reserve( newlen );
+        memmove(p+size_, str, n); // p and s.p MAY overlap
+        p[newlen] = 0; // add NUL termination
+        size_ = newlen;
+    }
+    return *this;
+}
+
+void String::append_int(int param) {
+
+    // max len of "-9223372036854775808" plus zero termination
+    char conv_buff[20+1];
+
+    int len = itoa_c(param, conv_buff);
+    append_raw(conv_buff, len);
+}
+
+int String::compare( size_type pos, size_type len, const String& str ) const {
+    int r = -1;
+    if (pos <= size_) {
+        if ( len > size_ - pos)
+            len = size_ - pos; // limit len to available length
+
+        const size_type osize = str.size();
+        const size_type len2   = std::min(len, osize);
+        r = strncmp( p + pos, str.p, len2);
+        if (r==0) // equal so far, now compare sizes
+            r = len < osize ? -1 : ( len == osize ? 0 : +1 );
+    }
+    return r;
+}
+
+int String::compare( size_type pos, size_type len, const char* str ) const {
+    int r = -1;
+    if (pos <= size_) {
+
+        if ( len > size_ - pos)
+            len = size_ - pos; // limit len to available length
+
+        const size_type osize = strlen(str);
+        const size_type len2   = std::min(len, osize);
+        r = strncmp( p + pos, str, len2);
+        if (r==0) // equal so far, now compare sizes
+            r = len < osize ? -1 : ( len == osize ? 0 : +1 );
+    }
+    return r;
+}
+
+int String::find_last_of(char c) const {
+    int r = -1;
+    char *v;
+    v = strrchr(p,c);
+    if (v != NULL) {
+        r = 0;
+        char* i = p;
+        while (v != i) {
+            i++;
+            r++;
+        }
+    }
+    return r;
+}
+
+void String::new_realloc( size_type n) {
+    if (n > 0 ) {
+        char* pnew = static_cast<char*>(realloc(p, n)); // could return NULL
+        if (pnew)
+            p = pnew;
+    }
+}
+
+void String::reserve( const size_type n) {
+    if (n >= allocated_ ) {
+        this->new_realloc(n + 1);
+        allocated_ = n + 1;
+    }
+}
+
+void String::resize( const size_type n) {
+    this->resize( n, 0 );
+}
+
+void String::resize( const size_type n, const char c) {
+    if (n < size_ ) {
+        p[n] = 0;
+        size_ = n;
+    }
+    else if (n >  size_ ) {
+        this->reserve( n );
+        for (size_type i=size_; i < n; ++i )
+            p[i] = c;
+        p[n] = 0;
+        size_ = n;
+    }
+}
+
+void String::swap( String& s ) {
+    std::swap( allocated_, s.allocated_ );
+    std::swap( size_,      s.size_      );
+    std::swap( p,          s.p          );
+}
+
+
+// Comparison
+bool operator<( const String& s1, const String& s2 ) {
+    return strcmp( s1.c_str(), s2.c_str() ) < 0;
+}
+
+void reverse(char s[], uint32_t length)
+{
+    uint32_t i, j;
+    char c;
+
+    for (i = 0, j = length-1; i<j; i++, j--) {
+        c = s[i];
+        s[i] = s[j];
+        s[j] = c;
+    }
+}
+
+uint32_t itoa_c (int64_t n, char s[])
+{
+    int64_t sign;
+    uint32_t i;
+
+    if ((sign = n) < 0)
+        n = -n;
+
+    i = 0;
+
+    do {
+        s[i++] = n % 10 + '0';
+    }
+    while ((n /= 10) > 0);
+
+    if (sign < 0)
+        s[i++] = '-';
+
+    s[i] = '\0';
+
+    m2m::reverse(s, i);
+    return i;
+}
+
+uint8_t* String::convert_integer_to_array(int64_t value, uint8_t &size, uint8_t *array, uint32_t array_size)
+{
+    uint8_t* buffer = NULL;
+    size = 0;
+    if (array) {
+        value = String::convert_array_to_integer(array, array_size);
+    }
+
+    if(value < 0xFF) {
+        size = 1;
+    } else if(value < 0xFFFF) {
+        size = 2;
+    } else if(value < 0xFFFFFF) {
+        size = 3;
+    } else if(value < 0xFFFFFFFF) {
+        size = 4;
+    } else if(value < 0xFFFFFFFFFF) {
+        size = 5;
+    } else if(value < 0xFFFFFFFFFFFF) {
+        size = 6;
+    } else if(value < 0xFFFFFFFFFFFFFF) {
+        size = 7;
+    } else {
+        size = 8;
+    }
+
+    buffer = (uint8_t*)malloc(size);
+    if (buffer) {
+        for (int i = 0; i < size; i++) {
+            buffer[i] = (value >> ((size - i - 1) * 8));
+        }
+    } else {
+        size = 0;
+    }
+    return buffer;
+}
+
+int64_t String::convert_array_to_integer(uint8_t *value, uint32_t size)
+{
+    int64_t temp_64 = 0;
+    for (int i = size - 1; i >= 0; i--) {
+        temp_64 += (uint64_t)(*value++) << i * 8;
+    }
+    return temp_64;
+}
+
+} // namespace
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mtimer_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mtimer_stub.h"
+
+bool m2mtimer_stub::bool_value;
+bool m2mtimer_stub::total_bool_value;
+
+void m2mtimer_stub::clear()
+{
+    bool_value = false;
+    total_bool_value = false;
+}
+
+// Prevents the use of assignment operator
+M2MTimer& M2MTimer::operator=(const M2MTimer& /*other*/)
+{
+    return *this;
+}
+
+// Prevents the use of copy constructor
+M2MTimer::M2MTimer(const M2MTimer& other)
+: _observer(other._observer)
+{
+    *this = other;
+}
+
+M2MTimer::M2MTimer(M2MTimerObserver& observer)
+: _observer(observer)
+{
+}
+
+M2MTimer::~M2MTimer()
+{
+}
+
+void M2MTimer::start_timer(uint64_t /*interval*/,
+                           M2MTimerObserver::Type /*type*/,
+                           bool /*single_shot*/)
+{
+}
+
+void M2MTimer::start_dtls_timer(uint64_t , uint64_t , M2MTimerObserver::Type )
+{
+}
+
+void M2MTimer::stop_timer()
+{
+}
+
+
+bool M2MTimer::is_intermediate_interval_passed(){
+    return m2mtimer_stub::bool_value;
+}
+
+bool M2MTimer::is_total_interval_passed(){
+    return m2mtimer_stub::total_bool_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/m2mtimer_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_TIMER_STUB_H
+#define M2M_TIMER_STUB_H
+
+#include "m2mtimer.h"
+
+//some internal test related stuff
+namespace m2mtimer_stub
+{
+    extern bool bool_value;
+    extern bool total_bool_value;
+    void clear();
+}
+
+#endif // M2M_TIMER_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/mbedtls_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbedtls_stub.h"
+
+bool mbedtls_stub::useCounter;
+int mbedtls_stub::counter;
+int mbedtls_stub::retArray[20];
+int mbedtls_stub::crt_expected_int;
+int mbedtls_stub::expected_int;
+uint32_t mbedtls_stub::expected_uint32_value;
+bool mbedtls_stub::invalidate_timer;
+
+void mbedtls_stub::clear()
+{
+    mbedtls_stub::useCounter = false;
+    counter = 0;
+    expected_int = -1;
+    crt_expected_int = -1;
+    expected_uint32_value = 0;
+    for( int i=0; i < 20; i++ ){
+        retArray[i] = -1;
+    }
+    invalidate_timer = false;
+}
+
+//From ssl.h
+int mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl )
+{
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+int mbedtls_ssl_close_notify( mbedtls_ssl_context * )
+{
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+void mbedtls_ssl_init( mbedtls_ssl_context * ){
+
+}
+
+void mbedtls_ssl_config_init( mbedtls_ssl_config * ){
+
+}
+
+void mbedtls_ssl_conf_handshake_timeout( mbedtls_ssl_config *, uint32_t, uint32_t)
+{
+
+}
+
+void mbedtls_ssl_free( mbedtls_ssl_context * ){
+
+}
+
+int mbedtls_ssl_session_reset( mbedtls_ssl_context * ){
+
+}
+
+int mbedtls_ssl_conf_own_cert( mbedtls_ssl_config *,
+                              mbedtls_x509_crt *,
+                              mbedtls_pk_context * ){
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+void mbedtls_ssl_conf_authmode( mbedtls_ssl_config *, int  ){
+
+}
+
+void mbedtls_ssl_conf_ca_chain( mbedtls_ssl_config *,
+                               mbedtls_x509_crt *,
+                               mbedtls_x509_crl * ){
+
+}
+
+int mbedtls_ssl_conf_psk( mbedtls_ssl_config *,
+                const unsigned char *, size_t ,
+                const unsigned char *, size_t  ){
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+int mbedtls_ssl_config_defaults( mbedtls_ssl_config *,
+                                 int , int, int ){
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+void mbedtls_ssl_conf_rng( mbedtls_ssl_config *,
+                  int (*f_rng)(void *, unsigned char *, size_t),
+                  void * ){
+
+}
+
+void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *,
+                                   const int *)
+{
+
+}
+
+int mbedtls_ssl_setup( mbedtls_ssl_context *,
+                       const mbedtls_ssl_config * ){
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+void mbedtls_ssl_set_bio( mbedtls_ssl_context *ssl,
+        void *p_bio,
+        int (*f_send)(void *, const unsigned char *, size_t),
+        int (*f_recv)(void *, unsigned char *, size_t),
+        int (*f_recv_timeout)(void *, unsigned char *, size_t, uint32_t) ){
+    if( p_bio != NULL ){
+        f_send( p_bio, NULL, 0 );
+        f_recv( p_bio, NULL, 0 );
+        f_recv_timeout( p_bio, NULL, 0, 0 );
+    }
+}
+
+void mbedtls_ssl_set_timer_cb( mbedtls_ssl_context *,
+                               void *ctx,
+                               void (*f_set_timer)(void *, uint32_t int_ms, uint32_t fin_ms),
+                               int (*f_get_timer)(void *) ){
+    f_set_timer(ctx, 1, 2);
+    f_get_timer(ctx);
+    if(mbedtls_stub::invalidate_timer){
+        f_set_timer(ctx, 0, 0);
+    }
+    f_get_timer(ctx);
+}
+
+int mbedtls_ssl_handshake( mbedtls_ssl_context *ssl ){
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+uint32_t mbedtls_ssl_get_verify_result( const mbedtls_ssl_context * ){
+    return mbedtls_stub::expected_uint32_value;
+}
+
+int mbedtls_ssl_read( mbedtls_ssl_context *, unsigned char *, size_t ){
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+int mbedtls_ssl_write( mbedtls_ssl_context *, const unsigned char *, size_t  ){
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+
+
+//From crt_drbg.h
+int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *,
+                   int (*f_entropy)(void *, unsigned char *, size_t),
+                   void *,
+                   const unsigned char *,
+                   size_t  ){
+    return mbedtls_stub::crt_expected_int;
+}
+
+void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context * ){
+
+}
+
+void mbedtls_ctr_drbg_free( mbedtls_ctr_drbg_context * ){
+
+}
+
+int mbedtls_ctr_drbg_random_with_add( void *,
+                              unsigned char *, size_t ,
+                              const unsigned char *, size_t  ){
+    return mbedtls_stub::crt_expected_int;
+}
+
+int mbedtls_ctr_drbg_random( void *p_rng,
+                     unsigned char *output, size_t output_len ){
+    return mbedtls_stub::crt_expected_int;
+}
+
+//From x509_crt.h
+void mbedtls_x509_crt_init( mbedtls_x509_crt * ){
+
+}
+
+void mbedtls_x509_crt_free( mbedtls_x509_crt * ){
+
+}
+
+int mbedtls_x509_crt_parse( mbedtls_x509_crt *, const unsigned char *, size_t  ){
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+//From entropy.h
+void mbedtls_entropy_init( mbedtls_entropy_context * ){
+
+}
+
+void mbedtls_entropy_free( mbedtls_entropy_context *ctx ){
+
+}
+
+int mbedtls_entropy_func( void *, unsigned char *, size_t  ){
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+int mbedtls_entropy_add_source( mbedtls_entropy_context *,
+                        mbedtls_entropy_f_source_ptr f_source, void *,
+                        size_t, int  ){
+    unsigned char buf[2];
+    size_t len;
+    f_source(NULL, buf, 1, &len);
+
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    if(mbedtls_stub::counter == 1){
+        mbedtls_stub::counter--;
+        return 0;
+    }
+    return mbedtls_stub::expected_int;
+}
+
+//From pk.h
+int mbedtls_pk_parse_key( mbedtls_pk_context *,
+                  const unsigned char *, size_t ,
+                  const unsigned char *, size_t  ){
+    if( mbedtls_stub::useCounter ){
+        return mbedtls_stub::retArray[mbedtls_stub::counter++];
+    }
+    return mbedtls_stub::expected_int;
+}
+
+void mbedtls_pk_init( mbedtls_pk_context *ctx )
+{
+
+}
+
+void mbedtls_pk_free( mbedtls_pk_context *ctx )
+{
+
+}
+
+void mbedtls_ssl_config_free( mbedtls_ssl_config * )
+{
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/test/mbed-client-mbed-tls/unittest/stub/mbedtls_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBEDTLS_STUB_H
+#define MBEDTLS_STUB_H
+
+#include "mbedtls/platform.h"
+#include "mbedtls/ssl.h"
+#include "mbedtls/ctr_drbg.h"
+#include "mbedtls/x509_crt.h"
+#include "mbedtls/entropy.h"
+#include "mbedtls/pk.h"
+
+namespace mbedtls_stub
+{
+    extern int crt_expected_int;
+    extern bool useCounter;
+    extern int counter;
+    extern int retArray[20];
+    extern int expected_int;
+    extern uint32_t expected_uint32_value;
+    extern bool invalidate_timer;    
+    void clear();
+}
+
+#endif // MBEDTLS_STUB_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/toolchain_rules.mk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,293 @@
+#
+# Toolchain rules for building libraries
+#
+# Support multi-platform builds
+# You may define PLATFORM=.. prefix for compiler
+# if PLATFORM is defined it will owerride CC and AR
+# You may also specify CC and AR separately.
+# example: Compile with KEIL
+# make CC=ArmCC AR=ArmAR
+#
+# example: Cross Compile with Gnu toolchain, for embedded Linux
+# make PLATFORM=arm-linux-gnueabi-
+#
+# Special rules for IAR-ARM toolchains added, AR tool on that does not follow common arquements.
+# make CC=iccarm  uses iarchive.exe for creating a archive.
+#
+# Special rules for IAR-RL78 toolchain added, uses own AR and compiler requires specific flags
+# make CC=iccrl78
+#
+# When using ArmCC, Select CPU by defining one of following supported values
+#  CPU=Cortex-M0
+#  CPU=Cortex-M3
+#  CPU=Cortex-M4
+#
+# example:
+# make CC=armcc CPU=Cortex-M4
+
+#
+# If PLATFORM prefix is defined,
+# generate CC and AR accordingly
+#
+ifneq ($(strip $(PLATFORM)),)
+CC:=$(PLATFORM)gcc
+AR:=$(PLATFORM)ar
+endif
+
+#
+# Windows specific tweaks for echo and mkdir to work
+#
+ifeq ($(OS),Windows_NT)
+SHELL := cmd.exe
+mkdir = if not exist $(1) md $(subst /,\,$(1))
+else
+mkdir = mkdir -p $(1)
+endif
+
+#
+# Append CC and CPU to library names
+#
+LIB:=$(LIB:%.a=%_$(CC).a)
+ifneq (,$(CPU))
+	LIB:=$(LIB:%.a=%_$(CPU).a)
+endif
+
+##########################################################
+#        TOOLCHAIN SPECIFIC RULES AND FLAGS              #
+##########################################################
+
+#
+# GCC toolchains
+#
+ifneq (,$(findstring gcc,$(CC)))
+	# Flags for common toolchain, usually GCC or CC
+	AROPTS=-rsc $@ $^
+	override CFLAGS += -Wall -pedantic-errors
+	# Dependency generation
+	override CFLAGS += -MMD -MP
+	ifneq (,$(CPU))
+	# CPU must be lowercase on GCC
+	CPU_L:=$(shell echo $(CPU) | tr A-Z a-z)
+	override CFLAGS += -mcpu=$(CPU_L)
+	# Use THUMB instructions of Cortex-M cores
+	ifeq (cortex-m,$(findstring cortex-m,$(CPU_L)))
+	override CFLAGS += -mthumb
+	endif
+	endif
+	# Debug
+	ifeq ($(DEBUG),1)
+	override CFLAGS += -g -O0
+	else
+	override CFLAGS += -O2
+	endif
+	# Enable Coverage generation
+	ifeq ($(COVERAGE),1)
+	override CFLAGS += -ftest-coverage -fprofile-arcs
+	override LDFLAGS += -ftest-coverage -fprofile-arcs
+	endif
+	COMPILE = $(CC) -std=gnu99 -c -o $@
+	CXXCOMPILE = $(CC) -std=c++11 -c -o $@
+
+#
+# IAR-ARM toolchain
+#
+else ifneq (,$(findstring iccarm,$(CC)))
+	AR:=iarchive
+	AROPTS=$^ --create -o $@
+	DLIB_FILE=$(subst bin\iccarm.exe,inc\c\DLib_Config_Full.h,$(shell where iccarm))
+	override CFLAGS += --dlib_config '$(DLIB_FILE)' --cpu Cortex-M4 --vla --diag_suppress Pa50
+	# Dependency generation
+	override CFLAGS += --dependencies=m $(basename $@).d
+	# Debug
+	ifeq ($(DEBUG),1)
+	override CFLAGS += --debug -On
+	else
+	override CFLAGS += -Om
+	endif
+	COMPILE = $(CC) -c -o $@
+
+#
+# ArmCC toolchain (Used by Keil)
+#
+else ifneq (,$(findstring armcc,$(CC)))
+	AR:=armar
+	AROPTS=-rsc $@ $^
+	override CFLAGS += --c99 --no_wrap_diagnostics
+	# Dependency generation
+	override CFLAGS += --depend $(basename $@).d --phony_targets
+	LIB:=$(LIB:%.a=%.lib)
+	ifneq (,$(CPU))
+	override CFLAGS += --cpu=$(CPU)
+	endif
+	# Debug
+	ifeq ($(DEBUG),1)
+	override CFLAGS += -g -O0
+	else
+	override CFLAGS += -O2
+	endif
+	COMPILE = $(CC) -c -o $@
+
+#
+# IAR Renesas78 toolchain
+#
+else ifneq (,$(findstring iccrl78,$(CC)))
+	AR:=xar
+	AROPTS=$@ $^
+	# Hack to get \lib include path which contains dlib config headers for compiler
+	DIR=$(subst iccrl78.exe,..\lib\,$(shell where iccrl78))
+	override CFLAGS += --core rl78_1 --code_model far --data_model far --dlib_config full --vla --no_wrap_diagnostics -I'$(DIR)'
+	# Dependency generation
+	LIB:=$(LIB:%.a=%.lib)
+	override CFLAGS += --dependencies=m $(basename $@).d
+	# Debug
+	ifeq ($(DEBUG),1)
+	override CFLAGS += --debug -Oh
+	else
+	override CFLAGS += -Ohz
+	endif
+	COMPILE = $(CC) -o $@
+
+#
+# IAR MSP430 toolchain
+#
+else ifneq (,$(findstring icc430,$(CC)))
+	AR:=xar
+	AROPTS=$@ $^
+	# Hack to get \lib include path which contains dlib config headers for compiler
+	DIR=$(subst bin\icc430.exe,lib,$(shell where icc430))
+	DLIB_FILE=$(subst bin\icc430.exe,lib\dlib\dl430xllff.h,$(shell where icc430))
+	override CFLAGS += --dlib_config '$(DLIB_FILE)' --vla --core 430X --data_model large --no_wrap_diagnostics -I'$(DIR)'
+	# Dependency generation
+	LIB:=$(LIB:%.a=%.lib)
+	override CFLAGS += --dependencies=m $(basename $@).d
+	# Debug
+	ifeq ($(DEBUG),1)
+	override CFLAGS += --debug -On
+	else
+	override CFLAGS += -Ohz
+	endif
+	COMPILE = $(CC) -o $@
+
+#
+# CppCheck toolchain
+# This is used only for static testing the code.
+# cppcheck is used in place of compiler and linker phase is ignored
+else ifneq (,$(findstring cppcheck,$(CC)))
+	AR = cppcheck -q --enable=warning --enable=style --std=c99 --inline-suppr -DCPPCHECK $(CPPCHECK_OPTS) $(CFLAGS) $(SRCS)
+	COMPILE = true
+	CPPCHECK = 1
+	LIB:= "ignored_with_cppcheck"
+
+
+###################################
+# End of toolchain specific rules #
+###################################
+endif
+
+#
+# Generate VERSION tag
+#
+ifeq (,$(CPPCHECK))
+VERSION := $(shell git describe --tags --long --dirty --always)
+CFLAGS += -DVERSION='"$(VERSION)"'
+endif
+
+############################################################
+# AUTOMATICALLY GENERATE LIBRARY COMPILATION RULES         #
+#                                                          #
+# Use:                                                     #
+#   $(eval $(call generate_rules,$(OUTPUT_LIB),$(SRCS)))   #
+# at the end of your Makefile                              #
+#                                                          #
+############################################################
+
+define generate_rules
+
+DEST_LIB := $(1)
+LIB_SRCS := $(2)
+C_SRCS := $$(filter %.c,$$(LIB_SRCS))
+CXX_SRCS := $$(filter %.cpp,$$(LIB_SRCS))
+all: $$(DEST_LIB)
+
+#
+# Define build dir outside from src folders
+#
+BUILD_DIR := output/$$(CC)
+ifneq (,$$(CPU))
+BUILD_DIR := $$(BUILD_DIR)_$$(CPU)
+endif
+ifneq (generic,$$(CONFIG))
+BUILD_DIR := $$(BUILD_DIR)_$$(CONFIG)
+endif
+OBJS := $$(C_SRCS:%.c=$$(BUILD_DIR)/%.o) $$(CXX_SRCS:%.cpp=$$(BUILD_DIR)/%.o)
+
+# Include auto-dependencies
+-include $$(OBJS:.o=.d)
+
+# Create list of output directories.
+OBJ_DIRS := $$(sort $$(dir $$(OBJS)))
+
+# requires directories to be created before build.
+# '|' means do not care about timestamps of requisities
+$$(OBJS): | $$(OBJ_DIRS)
+
+# Need to redefine build rule to find the sources
+# from correct folder.
+$$(BUILD_DIR)/%.o: %.c
+ifeq ($(V),1)
+	$$(COMPILE) $$(CFLAGS) $$<
+else ifeq (1,$(CPPCHECK))
+	@$$(COMPILE) $$(CFLAGS) $$<
+else ifeq (1,$(UNITTEST))
+	@echo Building unittest $$<
+ifneq ($(OS),Windows_NT)
+	ruby $(UNIT_TEST_BASE)/../auto/generate_test_runner.rb Test.c Test_Runner.c
+endif
+	@gcc $$(CFLAGS) $$(SRCS) -o $$(OUTPUT_LIB)
+else
+	@echo Building $$<
+	@$$(COMPILE) $$(CFLAGS) $$<
+endif
+
+# Same again for C++
+$$(BUILD_DIR)/%.o: %.cpp
+ifeq ($(V),1)
+	$$(CXXCOMPILE) $$(CFLAGS) $$<
+else ifeq (1,$(CPPCHECK))
+	@$$(CXXCOMPILE) $$(CFLAGS) $$<
+else
+	@echo Building $$<
+	@$$(CXXCOMPILE) $$(CFLAGS) $$<
+endif
+
+# Rule to create a object directory
+$$(OBJ_DIRS):
+	@-$$(call mkdir,$$@)
+
+$$(DEST_LIB): $$(OBJS)
+ifeq ($(V),1)
+	-$$(addprefix $$(RM) ,$$(wildcard $$@))
+	$$(AR) $$(AROPTS)
+else ifeq (1,$(CPPCHECK))
+	@$$(AR) $$(AROPTS)
+else ifeq (1,$(UNITTEST))
+#ifneq ($(OS),Windows_NT)
+#	lcov -q --capture -i --directory $(CURDIR) --output-file lib_base.info
+#	./$$@
+#	lcov -q --capture --directory $(CURDIR) --output-file lib_test.info
+#	lcov -a lib_base.info -a lib_test.info -o coverage.info
+#endif
+else
+	@echo Linking $$(notdir $$@)
+	@-$$(addprefix $$(RM) ,$$(wildcard $$@))
+	@$$(AR) $$(AROPTS)
+endif
+
+clean:
+	@$(RM) -r $$(BUILD_DIR)
+	@$(RM) $$(DEST_LIB)
+
+clean-all:
+	@$(RM) -r output *.a
+
+endef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client-mbed-tls/xsl_script.sh	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# Copyright (c) 2015 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# * http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+echo 
+echo "Creating report"
+echo 
+
+echo '<?xml version="1.0" encoding="UTF-8" ?>
+<?xml-stylesheet type="text/xsl" href="junit_xsl.xslt"?>
+<list>' >> lcov/index.xml
+
+for f in lcov/results/*.xml
+do
+name=${f##*/}
+echo '<entry name="results/'"$name"'" />'>> lcov/index.xml
+done
+
+echo '</list>' >> lcov/index.xml
+
+echo
+echo "Report created to lcov/index.xml (outputs html)"
+echo
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/functionpointer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,368 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef FUNCTIONPOINTER_H
+#define FUNCTIONPOINTER_H
+
+#include <string.h>
+#include <stdint.h>
+
+/*! \file functionpointer.h
+* \brief A class for storing and calling a pointer to a static or member void function.
+ */
+
+template <typename R>
+class FP0{
+public:
+    /** Create a function pointer, attaching a static function.
+     *
+     *  \param function The void static function to attach (default is none).
+     */
+    FP0(R (*function)(void) = 0) {
+        memset(_member,0,sizeof(_member));
+        attach(function);
+    }
+
+    /** Create a function pointer, attaching a member function.
+     *
+     *  \param object The object pointer to invoke the member function on (the "this" pointer).
+     *  \param function The address of the void member function to attach.
+     */
+    template<typename T>
+    FP0(T *object, R (T::*member)(void)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function.
+     *
+     *  \param function The void static function to attach (default is none).
+     */
+    void attach(R (*function)(void)) {
+        _p.function = function;
+        _membercaller = 0;
+    }
+
+    /** Attach a member function.
+     *
+     *  \param object The object pointer to invoke the member function on (the "this" pointer).
+     *  \param function The address of the void member function to attach.
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(void)) {
+        _p.object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(void)>(_member) = member;
+        _membercaller = &FP0::membercaller<T>;
+    }
+
+    /** Call the attached static or member function.
+     */
+    R call(){
+        if (_membercaller == 0 && _p.function) {
+            return _p.function();
+        } else if (_membercaller && _p.object) {
+            return _membercaller(_p.object, _member);
+        }
+        return (R)0;
+    }
+
+    typedef R (*static_fp)();
+    static_fp get_function() const {
+        return (R(*)())_p.function;
+    }
+
+    R operator ()(void) {
+        return call();
+    }
+    operator bool(void) {
+        void *q = &_p.function;
+        return (_membercaller != NULL) && _p.object != NULL && (*static_cast<void **>(q) != NULL);
+    }
+
+private:
+    template<typename T>
+    static void membercaller(void *object, uintptr_t *member) {
+        T* o = static_cast<T*>(object);
+        R (T::**m)(void) = reinterpret_cast<R (T::**)(void)>(member);
+        (o->**m)();
+    }
+
+    union {
+        R (*function)(void);               // static function pointer - 0 if none attached
+        void *object;                         // object this pointer - 0 if none attached
+    } _p;
+    uintptr_t _member[2];                     // aligned raw member function pointer storage - converted back by registered _membercaller
+    R (*_membercaller)(void*, uintptr_t*); // registered membercaller function to convert back and call _m.member on _object
+};
+
+/* If we had variadic templates, this wouldn't be a problem, but until C++11 is enabled, we are stuck with multiple classes... */
+
+/** A class for storing and calling a pointer to a static or member void function
+ */
+template <typename R, typename A1>
+class FP1{
+public:
+    /** Create a function pointer, attaching a static function.
+     *
+     *  \param function The void static function to attach (default is none).
+     */
+    FP1(R (*function)(A1) = 0) {
+        memset(_member,0,sizeof(_member));
+        attach(function);
+    }
+
+    /** Create a function pointeer, attaching a member function.
+     *
+     *  \param object The object pointer to invoke the member function on (the "this" pointer).
+     *  \param function The address of the void member function to attach.
+     */
+    template<typename T>
+    FP1(T *object, R (T::*member)(A1)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function.
+     *
+     *  \param function The void static function to attach (default is none).
+     */
+    void attach(R (*function)(A1)) {
+        _p.function = function;
+        _membercaller = 0;
+    }
+
+    /** Attach a member function.
+     *
+     *  \param object The object pointer to invoke the member function on (the "this" pointer).
+     *  \param function The address of the void member function to attach.
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(A1)) {
+        _p.object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(A1)>(_member) = member;
+        _membercaller = &FP1::membercaller<T>;
+    }
+
+    /** Call the attached static or member function.
+     */
+    R call(A1 a){
+        if (_membercaller == 0 && _p.function) {
+           return _p.function(a);
+        } else if (_membercaller && _p.object) {
+           return _membercaller(_p.object, _member, a);
+        }
+        return (R)0;
+    }
+
+    typedef R (*static_fp)();
+    static_fp get_function() const {
+        return (R(*)())_p.function;
+    }
+
+    R operator ()(A1 a) {
+        return call(a);
+    }
+    operator bool(void)
+    {
+        void *q = &_p.function;
+        return (_membercaller != NULL) && _p.object != NULL && (*static_cast<void **>(q) != NULL);
+    }
+private:
+    template<typename T>
+    static void membercaller(void *object, uintptr_t *member, A1 a) {
+        T* o = static_cast<T*>(object);
+        R (T::**m)(A1) = reinterpret_cast<R (T::**)(A1)>(member);
+        (o->**m)(a);
+    }
+
+    union {
+        R (*function)(A1);               // static function pointer - 0 if none attached
+        void *object;                         // object this pointer - 0 if none attached
+    } _p;
+    uintptr_t _member[2];                     // aligned raw member function pointer storage - converted back by registered _membercaller
+    R (*_membercaller)(void*, uintptr_t*, A1); // registered membercaller function to convert back and call _m.member on _object
+};
+
+/** A class for storing and calling a pointer to a static or member void function.
+ */
+template <typename R, typename A1, typename A2>
+class FP2{
+public:
+    /** Create a function pointer, attaching a static function.
+     *
+     *  \param function The void static function to attach (default is none).
+     */
+    FP2(R (*function)(A1, A2) = 0) {
+        memset(_member,0,sizeof(_member));
+        attach(function);
+    }
+
+    /** Create a function pointer, attaching a member function.
+     *
+     *  \param object The object pointer to invoke the member function on (the "this" pointer).
+     *  \param function The address of the void member function to attach.
+     */
+    template<typename T>
+    FP2(T *object, R (T::*member)(A1, A2)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function.
+     *
+     *  \param function The void static function to attach (default is none).
+     */
+    void attach(R (*function)(A1, A2)) {
+        _p.function = function;
+        _membercaller = 0;
+    }
+
+    /** Attach a member function
+     *
+     *  \param object The object pointer to invoke the member function on (the "this" pointer).
+     *  \param function The address of the void member function to attach.
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(A1, A2)) {
+        _p.object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(A1, A2)>(_member) = member;
+        _membercaller = &FP2::membercaller<T>;
+    }
+
+    /** Call the attached static or member function.
+     */
+    R call(A1 a1, A2 a2){
+        if (_membercaller == 0 && _p.function) {
+           return _p.function(a1, a2);
+        } else if (_membercaller && _p.object) {
+           return _membercaller(_p.object, _member, a1, a2);
+        }
+        return (R)0;
+    }
+
+    typedef R (*static_fp)();
+    static_fp get_function() const {
+        return (R(*)())_p.function;
+    }
+
+    R operator ()(A1 a1, A2 a2) {
+        return call(a1, a2);
+    }
+    operator bool(void)
+    {
+        void *q = &_p.function;
+        return (_membercaller != NULL) && _p.object != NULL && (*static_cast<void **>(q) != NULL);
+    }
+private:
+    template<typename T>
+    static void membercaller(void *object, uintptr_t *member, A1 a1, A2 a2) {
+        T* o = static_cast<T*>(object);
+        R (T::**m)(A1, A2) = reinterpret_cast<R (T::**)(A1, A2)>(member);
+        (o->**m)(a1, a2);
+    }
+
+    union {
+        R (*function)(A1, A2);               // static function pointer - 0 if none attached
+        void *object;                         // object this pointer - 0 if none attached
+    } _p;
+    uintptr_t _member[2];                     // aligned raw member function pointer storage - converted back by registered _membercaller
+    R (*_membercaller)(void*, uintptr_t*, A1, A2); // registered membercaller function to convert back and call _m.member on _object
+};
+
+/** A class for storing and calling a pointer to a static or member void function.
+ */
+template <typename R, typename A1, typename A2, typename A3>
+class FP3{
+public:
+    /** Create a function pointer, attaching a static function.
+     *
+     *  \param function The void static function to attach (default is none).
+     */
+    FP3(R (*function)(A1, A2, A3) = 0) {
+        memset(_member,0,sizeof(_member));
+        attach(function);
+    }
+
+    /** Create a function pointer, attaching a member function.
+     *
+     *  \param object The object pointer to invoke the member function on (the "this" pointer).
+     *  \param function The address of the void member function to attach.
+     */
+    template<typename T>
+    FP3(T *object, R (T::*member)(A1, A2, A3)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function.
+     *
+     *  \param function The void static function to attach (default is none).
+     */
+    void attach(R (*function)(A1, A2, A3)) {
+        _p.function = function;
+        _membercaller = 0;
+    }
+
+    /** Attach a member function.
+     *
+     *  \param object The object pointer to invoke the member function on (the "this" pointer).
+     *  \param function The address of the void member function to attach.
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(A1, A2, A3)) {
+        _p.object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(A1, A2, A3)>(_member) = member;
+        _membercaller = &FP3::membercaller<T>;
+    }
+
+    /** Call the attached static or member function.
+     */
+    R call(A1 a1, A2 a2, A3 a3){
+        if (_membercaller == 0 && _p.function) {
+           return _p.function(a1, a2, a3);
+        } else if (_membercaller && _p.object) {
+           return _membercaller(_p.object, _member, a1, a2, a3);
+        }
+        return (R)0;
+    }
+
+    typedef R (*static_fp)();
+    static_fp get_function() const {
+        return (R(*)())_p.function;
+    }
+
+    R operator ()(A1 a1, A2 a2, A3 a3) {
+        return call(a1, a2, a3);
+    }
+    operator bool(void)
+    {
+        void *q = &_p.function;
+        return (_membercaller != NULL) && _p.object != NULL && (*static_cast<void **>(q) != NULL);
+    }
+private:
+    template<typename T>
+    static void membercaller(void *object, uintptr_t *member, A1 a1, A2 a2, A3 a3) {
+        T* o = static_cast<T*>(object);
+        R (T::**m)(A1, A2, A3) = reinterpret_cast<R (T::**)(A1, A2, A3)>(member);
+        (o->**m)(a1, a2, a3);
+    }
+
+    union {
+        R (*function)(A1, A2, A3);               // static function pointer - 0 if none attached
+        void *object;                         // object this pointer - 0 if none attached
+    } _p;
+    uintptr_t _member[2];                     // aligned raw member function pointer storage - converted back by registered _membercaller
+    R (*_membercaller)(void*, uintptr_t*, A1, A2, A3); // registered membercaller function to convert back and call _m.member on _object
+};
+
+typedef FP0<void> FP;
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mbase.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,578 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_BASE_H
+#define M2M_BASE_H
+
+// Support for std args
+#include <stdint.h>
+#include "mbed-client/m2mconfig.h"
+#include "mbed-client/m2mreportobserver.h"
+#include "mbed-client/functionpointer.h"
+#include "mbed-client/m2mstringbuffer.h"
+#include "nsdl-c/sn_nsdl.h"
+#include "nsdl-c/sn_coap_header.h"
+#include "nsdl-c/sn_nsdl_lib.h"
+
+//FORWARD DECLARATION
+struct sn_coap_hdr_;
+typedef sn_coap_hdr_ sn_coap_hdr_s;
+struct nsdl_s;
+struct sn_nsdl_addr_;
+typedef sn_nsdl_addr_ sn_nsdl_addr_s;
+
+typedef FP1<void, const char*> value_updated_callback;
+typedef void(*value_updated_callback2) (const char* object_name);
+class M2MObservationHandler;
+class M2MReportHandler;
+
+class M2MObjectInstance;
+class M2MObject;
+class M2MResource;
+
+
+/*! \file m2mbase.h
+ *  \brief M2MBase.
+ *  This class is the base class based on which all LWM2M object models
+ *  can be created. This serves base class for Object, ObjectInstances and Resources.
+ */
+class M2MBase : public M2MReportObserver {
+
+public:
+
+    /**
+      * Enum to define the type of object.
+      */
+    typedef enum {
+        Object = 0x0,
+        Resource = 0x1,
+        ObjectInstance = 0x2,
+        ResourceInstance = 0x3
+    } BaseType;
+
+    /**
+      * Enum to define observation level.
+      */
+    typedef enum {
+        None                 = 0x0,
+        R_Attribute          = 0x01,
+        OI_Attribute         = 0x02,
+        OIR_Attribute        = 0x03,
+        O_Attribute          = 0x04,
+        OR_Attribute         = 0x05,
+        OOI_Attribute        = 0x06,
+        OOIR_Attribute       = 0x07
+    } Observation;
+
+
+    /**
+     * \brief Enum defining a resource type.
+    */
+    typedef enum {
+        Static,
+        Dynamic,
+        Directory
+    }Mode;
+
+    /**
+     * Enum defining an operation that can be
+     * supported by a given resource.
+    */
+    typedef enum {
+        NOT_ALLOWED                 = 0x00,
+        GET_ALLOWED                 = 0x01,
+        PUT_ALLOWED                 = 0x02,
+        GET_PUT_ALLOWED             = 0x03,
+        POST_ALLOWED                = 0x04,
+        GET_POST_ALLOWED            = 0x05,
+        PUT_POST_ALLOWED            = 0x06,
+        GET_PUT_POST_ALLOWED        = 0x07,
+        DELETE_ALLOWED              = 0x08,
+        GET_DELETE_ALLOWED          = 0x09,
+        PUT_DELETE_ALLOWED          = 0x0A,
+        GET_PUT_DELETE_ALLOWED      = 0x0B,
+        POST_DELETE_ALLOWED         = 0x0C,
+        GET_POST_DELETE_ALLOWED     = 0x0D,
+        PUT_POST_DELETE_ALLOWED     = 0x0E,
+        GET_PUT_POST_DELETE_ALLOWED = 0x0F,
+    }Operation;
+
+    enum MaxPathSize {
+        MAX_NAME_SIZE = 64,
+        MAX_INSTANCE_SIZE = 5,
+
+        MAX_PATH_SIZE = ((MAX_NAME_SIZE * 2) + (MAX_INSTANCE_SIZE * 2) + 3 + 1),
+        MAX_PATH_SIZE_2 = ((MAX_NAME_SIZE * 2) + MAX_INSTANCE_SIZE + 2 + 1),
+        MAX_PATH_SIZE_3 = (MAX_NAME_SIZE + (MAX_INSTANCE_SIZE * 2) + 2 + 1),
+        MAX_PATH_SIZE_4 = (MAX_NAME_SIZE + MAX_INSTANCE_SIZE + 1 + 1),
+    };
+
+    typedef struct lwm2m_parameters {
+        //add multiple_instances
+        uint32_t            max_age;
+        uint32_t            instance_id;
+        int32_t             name_id;
+        char*               name; //for backwards compability
+        sn_nsdl_dynamic_resource_parameters_s *dynamic_resource_params;
+        BaseType            base_type;
+        bool                free_on_delete;   /**< true if struct is dynamically allocted and it
+                                                 and its members (name) are to be freed on destructor.
+                                                 Note: the sn_nsdl_dynamic_resource_parameters_s has
+                                                 its own similar, independent flag.
+                                                 Note: this also serves as a read-only flag. */
+    } lwm2m_parameters_s;
+
+protected:
+
+    // Prevents the use of default constructor.
+    M2MBase();
+
+    // Prevents the use of assignment operator.
+    M2MBase& operator=( const M2MBase& /*other*/ );
+
+    // Prevents the use of copy constructor
+    M2MBase( const M2MBase& /*other*/ );
+
+    /**
+     * \brief Constructor
+     * \param name Name of the object created.
+     * \param mode Type of the resource.
+     * \param resource_type Textual information of resource.
+     * \param path Path of the object like 3/0/1
+     * \param external_blockwise_store If true CoAP blocks are passed to application through callbacks
+     *        otherwise handled in mbed-client-c.
+     */
+    M2MBase(const String &name,
+            M2MBase::Mode mode,
+            const String &resource_type,
+            char *path,
+            bool external_blockwise_store);
+
+    M2MBase(const lwm2m_parameters_s* s);
+
+public:
+
+    /**
+     * Destructor
+     */
+    virtual ~M2MBase();
+
+    /**
+     * \brief Sets the operation type for an object.
+     * \param operation The operation to be set.
+     */
+    virtual void set_operation(M2MBase::Operation operation);
+
+#ifndef MEMORY_OPTIMIZED_API
+    /**
+     * \brief Sets the interface description of the object.
+     * \param description The description to be set.
+     */
+    virtual void set_interface_description(const String &description);
+
+    /**
+     * \brief Sets the interface description of the object.
+     * \param description The description to be set.
+     */
+    virtual void set_interface_description(const char *description);
+
+    /**
+     * \brief Sets the resource type of the object.
+     * \param resource_type The resource type to be set.
+     */
+    virtual void set_resource_type(const String &resource_type);
+
+    /**
+     * \brief Sets the resource type of the object.
+     * \param resource_type The resource type to be set.
+     */
+    virtual void set_resource_type(const char *resource_type);
+#endif
+
+    /**
+     * \brief Sets the CoAP content type of the object.
+     * \param content_type The content type to be set based on
+     * CoAP specifications.
+     */
+    virtual void set_coap_content_type(const uint8_t content_type);
+
+    /**
+     * \brief Sets the observable mode for the object.
+     * \param observable A value for the observation.
+     */
+    virtual void set_observable(bool observable);
+
+    /**
+     * \brief Adds the observation level for the object.
+     * \param observation_level The level of observation.
+     */
+    virtual void add_observation_level(M2MBase::Observation observation_level);
+
+    /**
+     * \brief Removes the observation level for the object.
+     * \param observation_level The level of observation.
+     */
+    virtual void remove_observation_level(M2MBase::Observation observation_level);
+
+    /**
+     * \brief Sets the object under observation.
+     * \param observed The value for observation. When true, starts observing. When false, the ongoing observation is cancelled.
+     * \param handler A handler object for sending
+     * observation callbacks.
+     */
+    virtual void set_under_observation(bool observed,
+                                       M2MObservationHandler *handler);
+    /**
+     * \brief Returns the Observation Handler object.
+     * \return M2MObservationHandler object.
+    */
+    M2MObservationHandler* observation_handler();
+
+    /**
+     * \brief Sets the observation handler
+     * \param handler Observation handler
+    */
+    void set_observation_handler(M2MObservationHandler *handler);
+
+    /**
+     * \brief Sets the observation token value.
+     * \param token A pointer to the token of the resource.
+     * \param length The length of the token pointer.
+     */
+    virtual void set_observation_token(const uint8_t *token,
+                                       const uint8_t length);
+
+    /**
+     * \brief Sets the instance ID of the object.
+     * \param instance_id The instance ID of the object.
+     */
+    virtual void set_instance_id(const uint16_t instance_id);
+
+    /**
+     * This function is deprecated. An increment of the observation number is done internally.
+     * \brief Sets the observation number of the object.
+     * \param observation_number The observation number of the object.
+     */
+    virtual void set_observation_number(const uint16_t observation_number)
+        m2m_deprecated;
+
+    /**
+     * \brief Sets the max age for the resource value to be cached.
+     * \param max_age The max age in seconds.
+     */
+    virtual void set_max_age(const uint32_t max_age);
+
+    /**
+     * \brief Returns the object type.
+     * \return The base type of the object.
+     */
+    virtual M2MBase::BaseType base_type() const;
+
+    /**
+     * \brief Returns the operation type of the object.
+     * \return The supported operation on the object.
+     */
+    virtual M2MBase::Operation operation() const;
+
+    /**
+     * \brief Returns the object name.
+     * \return The name of the object.
+     */
+    virtual const char* name() const;
+
+    /**
+     * \brief Returns the object name in integer.
+     * \return The name of the object in integer.
+     */
+    virtual int32_t name_id() const;
+
+    /**
+     * \brief Returns the object's instance ID.
+     * \returns The instance ID of the object.
+     */
+    virtual uint16_t instance_id() const;
+
+    /**
+     * \brief Returns the interface description of the object.
+     * \return The interface description of the object.
+     */
+    virtual const char* interface_description() const;
+
+    /**
+     * \brief Returns the resource type of the object.
+     * \return The resource type of the object.
+     */
+    virtual const char* resource_type() const;
+
+    /**
+     * \brief Returns the path of the object.
+     * \return The path of the object (eg. 3/0/1).
+     */
+    virtual const char* uri_path() const;
+
+    /**
+     * \brief Returns the CoAP content type of the object.
+     * \return The CoAP content type of the object.
+     */
+    virtual uint8_t coap_content_type() const;
+
+    /**
+     * \brief Returns the observation status of the object.
+     * \return True if observable, else false.
+     */
+    virtual bool is_observable() const;
+
+    /**
+     * \brief Returns the observation level of the object.
+     * \return The observation level of the object.
+     */
+    virtual M2MBase::Observation observation_level() const;
+
+    /**
+     * \brief Provides the observation token of the object.
+     * \param value[OUT] A pointer to the value of the token.
+     * \param value_length[OUT] The length of the token pointer.
+     */
+    virtual void get_observation_token(uint8_t *&token, uint32_t &token_length);
+
+    /**
+     * \brief Returns the mode of the resource.
+     * \return The mode of the resource.
+     */
+     virtual Mode mode() const;
+
+    /**
+     * \brief Returns the observation number.
+     * \return The observation number of the object.
+     */
+    virtual uint16_t observation_number() const;
+
+    /**
+     * \brief Returns the max age for the resource value to be cached.
+     * \return The maax age in seconds.
+     */
+    virtual uint32_t max_age() const;
+
+    /**
+     * \brief Parses the received query for the notification
+     * attribute.
+     * \param query The query that needs to be parsed.
+     * \return True if required attributes are present, else false.
+     */
+    virtual bool handle_observation_attribute(const char *query);
+
+    /**
+     * \brief Handles GET request for the registered objects.
+     * \param nsdl An NSDL handler for the CoAP library.
+     * \param received_coap_header The received CoAP message from the server.
+     * \param observation_handler A handler object for sending
+     * observation callbacks.
+     * \return sn_coap_hdr_s The message that needs to be sent to server.
+     */
+    virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl,
+                                              sn_coap_hdr_s *received_coap_header,
+                                              M2MObservationHandler *observation_handler = NULL);
+    /**
+     * \brief Handles PUT request for the registered objects.
+     * \param nsdl An NSDL handler for the CoAP library.
+     * \param received_coap_header The received CoAP message from the server.
+     * \param observation_handler A handler object for sending
+     * observation callbacks.
+     * \param execute_value_updated True executes the "value_updated" callback.
+     * \return sn_coap_hdr_s The message that needs to be sent to server.
+     */
+    virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl,
+                                              sn_coap_hdr_s *received_coap_header,
+                                              M2MObservationHandler *observation_handler,
+                                              bool &execute_value_updated);
+
+    /**
+     * \brief Handles GET request for the registered objects.
+     * \param nsdl An NSDL handler for the CoAP library.
+     * \param received_coap_header The received CoAP message from the server.
+     * \param observation_handler A handler object for sending
+     * observation callbacks.
+     * \param execute_value_updated True executes the "value_updated" callback.
+     * \return sn_coap_hdr_s  The message that needs to be sent to server.
+     */
+    virtual sn_coap_hdr_s* handle_post_request(nsdl_s *nsdl,
+                                               sn_coap_hdr_s *received_coap_header,
+                                               M2MObservationHandler *observation_handler,
+                                               bool &execute_value_updated,
+                                               sn_nsdl_addr_s *address = NULL);
+
+    /**
+     * \brief Sets whether this resource is published to server or not.
+     * \param register_uri True sets the resource as part of registration message.
+     */
+    virtual void set_register_uri(bool register_uri);
+
+    /**
+     * \brief Returns whether this resource is published to server or not.
+     * \return True if the resource is a part of the registration message, else false.
+     */
+    virtual bool register_uri();
+
+    /**
+     * @brief Returns whether this resource is under observation or not.
+     * @return True if the resource is under observation, else false,
+     */
+    virtual bool is_under_observation() const;
+
+    /**
+     * @brief Sets the function that is executed when this
+     * object receives a PUT or POST command.
+     * @param callback The function pointer that is called.
+     */
+    virtual void set_value_updated_function(value_updated_callback callback);
+
+    /**
+     * @brief Sets the function that is executed when this
+     * object receives a PUT or POST command.
+     * @param callback The function pointer that is called.
+     */
+    virtual void set_value_updated_function(value_updated_callback2 callback);
+
+    /**
+     * @brief Returns whether a callback function is set or not.
+     * @return True if the callback function is set, else false.
+     */
+    virtual bool is_value_updated_function_set();
+
+    /**
+     * @brief Calls the function that is set in the "set_value_updated_function".
+     * @param name The name of the object.
+     */
+    virtual void execute_value_updated(const String& name);
+
+    /**
+     * @brief Returns length of the object name.
+     * @return Length of the object name.
+     */
+    size_t resource_name_length() const;
+
+    /**
+     * @brief Returns the resource information.
+     * @return Resource information.
+     */
+    sn_nsdl_dynamic_resource_parameters_s* get_nsdl_resource();
+
+    static char* create_path(const M2MObject &parent, const char *name);
+    static char* create_path(const M2MObject &parent, uint16_t object_instance);
+    static char* create_path(const M2MResource &parent, uint16_t resource_instance);
+    static char* create_path(const M2MResource &parent, const char *name);
+    static char* create_path(const M2MObjectInstance &parent, const char *name);
+
+protected : // from M2MReportObserver
+
+    virtual void observation_to_be_sent(m2m::Vector<uint16_t> changed_instance_ids,
+                                        bool send_object = false);
+
+protected:
+
+    /**
+     * \brief Sets the base type for an object.
+     * \param type The base type of the object.
+     */
+    virtual void set_base_type(M2MBase::BaseType type);
+
+    /**
+     * \brief Memory allocation required for libCoap.
+     * \param size The size of memory to be reserved.
+    */
+    static void* memory_alloc(uint32_t size);
+
+    /**
+     * \brief Memory free functions required for libCoap.
+     * \param ptr The object whose memory needs to be freed.
+    */
+    static void memory_free(void *ptr);
+
+    /**
+     * \brief Allocate and make a copy of given zero terminated string. This
+     * is functionally equivalent with strdup().
+     * \param source The source string to copy, may not be NULL.
+    */
+    static char* alloc_string_copy(const char* source);
+
+    /**
+     * \brief Allocate (size + 1) amount of memory, copy size bytes into
+     * it and add zero termination.
+     * \param source The source string to copy, may not be NULL.
+     * \param size The size of memory to be reserved.
+    */
+    static uint8_t* alloc_string_copy(const uint8_t* source, uint32_t size);
+
+    /**
+     * \brief Allocate (size) amount of memory, copy size bytes into it.
+     * \param source The source buffer to copy, may not be NULL.
+     * \param size The size of memory to be reserved.
+    */
+    static uint8_t* alloc_copy(const uint8_t* source, uint32_t size);
+
+    // validate string length to be [min_length..max_length]
+    static bool validate_string_length(const String &string, size_t min_length, size_t max_length);
+    static bool validate_string_length(const char* string, size_t min_length, size_t max_length);
+
+    /**
+     * \brief Create Report Handler object.
+     * \return M2MReportHandler object.
+    */
+    M2MReportHandler* create_report_handler();
+
+    /**
+     * \brief Returns the Report Handler object.
+     * \return M2MReportHandler object.
+    */
+    M2MReportHandler* report_handler();
+
+
+    static bool build_path(StringBuffer<MAX_PATH_SIZE> &buffer, const char *s1, uint16_t i1, const char *s2, uint16_t i2);
+
+    static bool build_path(StringBuffer<MAX_PATH_SIZE_2> &buffer, const char *s1, uint16_t i1, const char *s2);
+
+    static bool build_path(StringBuffer<MAX_PATH_SIZE_3> &buffer, const char *s1, uint16_t i1, uint16_t i2);
+
+    static bool build_path(StringBuffer<MAX_PATH_SIZE_4> &buffer, const char *s1, uint16_t i1);
+
+    static char* stringdup(const char* s);
+
+private:
+
+    static bool is_integer(const String &value);
+
+    static bool is_integer(const char *value);
+
+    void free_resources();
+
+private:
+    lwm2m_parameters_s          *_sn_resource;
+    M2MReportHandler            *_report_handler;
+    M2MObservationHandler       *_observation_handler; // Not owned
+    uint8_t                     *_token;
+    FP1<void, const char*>      *_function_pointer;
+    value_updated_callback      *_value_updated_callback;
+    unsigned                    _observation_number : 16;
+    unsigned                    _token_length : 8;
+    M2MBase::Observation        _observation_level : 4;
+    bool                        _is_under_observation : 1;
+
+friend class Test_M2MBase;
+friend class Test_M2MObject;
+
+};
+
+#endif // M2M_BASE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mblockmessage.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2MBLOCKMESSAGE_H
+#define M2MBLOCKMESSAGE_H
+
+#include "ns_types.h"
+#include "nsdl-c/sn_coap_header.h"
+
+/*! \file m2mblockmessage.h
+ *  \brief M2MBlockMessage.
+ *  This class contains the data of an incoming block message.
+ */
+class M2MBlockMessage {
+
+public:
+
+    /**
+     * \brief An enum defining different kinds of errors
+     * that can occur during the block-wise operation.
+     */
+    typedef enum {
+        ErrorNone = 0,
+        EntityTooLarge
+    }Error;
+
+    /**
+    * Constructor.
+    */
+    M2MBlockMessage();
+
+    /**
+    * Destructor.
+    */
+    virtual ~M2MBlockMessage();
+
+    /**
+     * \brief Store the data from a CoAP message.
+     * \param coap_header The message to parse.
+     */
+    void set_message_info(sn_coap_hdr_s *coap_header);
+
+    /**
+     * \brief Clear values.
+     */
+    void clear_values();
+
+    /**
+     * \brief Check if the message is a block message.
+     * \param coap_header The message to check.
+     * \return True if block message, else false.
+     */
+    bool is_block_message() const;
+
+    /**
+     * \brief Returns the number of an incoming block.
+     * \return Block number, starting from 0.
+     */
+    uint16_t block_number() const;
+
+    /**
+     * \brief Returns the total size of the message.
+     * \return The total size in bytes.
+     */
+    uint32_t total_message_size() const;
+
+    /**
+     * \brief Check if last block.
+     * \return True if last block, else false.
+     */
+    bool is_last_block() const;
+
+    /**
+     * \brief Returns the payload of the message.
+     * \return The message payload.
+     */
+    uint8_t* block_data() const;
+
+    /**
+     * \brief Returns the length of the payload.
+     * \return The payload length.
+     */
+    uint32_t block_data_len() const;
+
+    /**
+     * \brief Returns an error code.
+     * \return Error code.
+     */
+    Error error_code() const;
+
+private:
+    uint8_t     *_block_data_ptr;
+    uint32_t    _total_message_size;
+    uint16_t    _block_data_len;
+    uint16_t    _block_number;
+    Error       _error_code;
+    bool        _is_last_block;
+    bool        _is_block_message;
+};
+
+#endif // M2MBLOCKMESSAGE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mconfig.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2MCONFIG_H
+#define M2MCONFIG_H
+
+/*! \file m2mconfig.h
+* \brief File defining all system build time configuration used by mbed-client.
+*/
+
+#include "mbed-client/m2mstring.h"
+
+#include <stddef.h>
+
+using namespace m2m;
+
+/**
+ * \def MBED_CLIENT_RECONNECTION_COUNT
+ *
+ * \brief Sets Reconnection count for mbed Client
+ * to attempt a reconnection re-tries until
+ * reaches the defined value either by the application
+ * or the default value set in Client.
+ * By default, the value is 3.
+ */
+#undef MBED_CLIENT_RECONNECTION_COUNT  /* 3 */
+
+/**
+ * \def MBED_CLIENT_RECONNECTION_INTERVAL
+ *
+ * \brief Sets Reconnection interval (in seconds) for
+ * mbed Client to attempt a reconnection re-tries.
+ * By default, the value is 5 seconds.
+ */
+#undef MBED_CLIENT_RECONNECTION_INTERVAL  /* 5 */
+
+/**
+ * \def MBED_CLIENT_TCP_KEEPALIVE_TIME
+ *
+ * \brief Keep alive time (in seconds) to send pings
+ * in case mbed Client is connected through TCP.
+ * By default, the value is 300 seconds.
+ */
+#undef MBED_CLIENT_TCP_KEEPALIVE_TIME   /* 300 */
+
+/**
+ * \def MBED_CLIENT_RECONNECTION_LOOP
+ *
+ * \brief Option whether to continue reconnection
+ * loop until connection is re-established or stop
+ * once the maximum re-try count is reached
+ * By default, the value is 1 to continue reconnection
+ * in loop, to stop the reconnection loop set value to 0.
+ */
+#undef MBED_CLIENT_RECONNECTION_LOOP    /* 1 */
+
+/**
+ * \def MBED_CLIENT_EVENT_LOOP_SIZE
+ *
+ * \brief Defines the size of memory allocated for
+ * event loop (in bytes) for timer and network event
+ * handling of mbed Client.
+ * By default, this value is 1024 bytes.This memory is
+ * allocated from heap
+ */
+#undef MBED_CLIENT_EVENT_LOOP_SIZE      /* 1024 */
+
+#ifdef YOTTA_CFG_RECONNECTION_COUNT
+#define MBED_CLIENT_RECONNECTION_COUNT YOTTA_CFG_RECONNECTION_COUNT
+#elif defined MBED_CONF_MBED_CLIENT_RECONNECTION_COUNT
+#define MBED_CLIENT_RECONNECTION_COUNT MBED_CONF_MBED_CLIENT_RECONNECTION_COUNT
+#endif
+
+#ifdef YOTTA_CFG_RECONNECTION_INTERVAL
+#define MBED_CLIENT_RECONNECTION_INTERVAL YOTTA_CFG_RECONNECTION_INTERVAL
+#elif defined MBED_CONF_MBED_CLIENT_RECONNECTION_INTERVAL
+#define MBED_CLIENT_RECONNECTION_INTERVAL MBED_CONF_MBED_CLIENT_RECONNECTION_INTERVAL
+#endif
+
+#ifdef YOTTA_CFG_TCP_KEEPALIVE_TIME
+#define MBED_CLIENT_TCP_KEEPALIVE_TIME YOTTA_CFG_TCP_KEEPALIVE_TIME
+#elif defined MBED_CONF_MBED_CLIENT_TCP_KEEPALIVE_TIME
+#define MBED_CLIENT_TCP_KEEPALIVE_TIME MBED_CONF_MBED_CLIENT_TCP_KEEPALIVE_TIME
+#endif
+
+#ifdef YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
+#define MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE YOTTA_CFG_DISABLE_BOOTSTRAP_FEATURE
+#elif defined MBED_CONF_MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+#define MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE MBED_CONF_MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+#endif
+
+#ifdef YOTTA_CFG_RECONNECTION_LOOP
+#define MBED_CLIENT_RECONNECTION_LOOP YOTTA_CFG_RECONNECTION_LOOP
+#elif defined MBED_CONF_MBED_CLIENT_RECONNECTION_LOOP
+#define MBED_CLIENT_RECONNECTION_LOOP MBED_CONF_MBED_CLIENT_RECONNECTION_LOOP
+#endif
+
+#ifdef YOTTA_CFG_COAP_MAX_INCOMING_BLOCK_MESSAGE_SIZE
+#define SN_COAP_MAX_INCOMING_MESSAGE_SIZE YOTTA_CFG_COAP_MAX_INCOMING_BLOCK_MESSAGE_SIZE
+#elif defined MBED_CONF_MBED_CLIENT_SN_COAP_MAX_INCOMING_MESSAGE_SIZE
+#define SN_COAP_MAX_INCOMING_MESSAGE_SIZE MBED_CONF_MBED_CLIENT_SN_COAP_MAX_INCOMING_MESSAGE_SIZE
+#endif
+
+#ifdef MBED_CONF_MBED_CLIENT_EVENT_LOOP_SIZE
+#define MBED_CLIENT_EVENT_LOOP_SIZE MBED_CONF_MBED_CLIENT_EVENT_LOOP_SIZE
+#endif
+
+#if defined (__ICCARM__)
+#define m2m_deprecated
+#else
+#define m2m_deprecated __attribute__ ((deprecated))
+#endif
+
+// This is valid for mbed-client-mbedtls
+// For other SSL implementation there
+// can be other
+
+/*
+*\brief A callback function for a random number
+* required by the mbed-client-mbedtls module.
+*/
+typedef uint32_t (*random_number_cb)(void) ;
+
+/*
+*\brief An entropy structure for an mbedtls entropy source.
+* \param entropy_source_ptr The entropy function.
+* \param p_source  The function data.
+* \param threshold A minimum required from the source before entropy is released
+*                  (with mbedtls_entropy_func()) (in bytes).
+* \param strong    MBEDTLS_ENTROPY_SOURCE_STRONG = 1 or
+*                  MBEDTSL_ENTROPY_SOURCE_WEAK = 0.
+*                  At least one strong source needs to be added.
+*                  Weaker sources (such as the cycle counter) can be used as
+*                  a complement.
+*/
+typedef struct mbedtls_entropy {
+    int     (*entropy_source_ptr)(void *, unsigned char *,size_t , size_t *);
+    void    *p_source;
+    size_t  threshold;
+    int     strong;
+}entropy_cb;
+
+#ifdef MBED_CLIENT_USER_CONFIG_FILE
+#include MBED_CLIENT_USER_CONFIG_FILE
+#endif
+
+#ifndef MBED_CLIENT_RECONNECTION_COUNT
+#define MBED_CLIENT_RECONNECTION_COUNT 3
+#endif
+
+#ifndef MBED_CLIENT_RECONNECTION_INTERVAL
+#define MBED_CLIENT_RECONNECTION_INTERVAL 5
+#endif
+
+#ifndef MBED_CLIENT_TCP_KEEPALIVE_TIME
+#define MBED_CLIENT_TCP_KEEPALIVE_TIME 300
+#endif
+
+#ifndef MBED_CLIENT_RECONNECTION_LOOP
+#define MBED_CLIENT_RECONNECTION_LOOP 1
+#endif
+
+#ifndef MBED_CLIENT_EVENT_LOOP_SIZE
+#define MBED_CLIENT_EVENT_LOOP_SIZE 1024
+#endif
+
+#ifndef SN_COAP_MAX_INCOMING_MESSAGE_SIZE
+#define SN_COAP_MAX_INCOMING_MESSAGE_SIZE UINT16_MAX
+#endif
+
+#endif // M2MCONFIG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mconnectionhandler.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_CONNECTION_HANDLER_H__
+#define M2M_CONNECTION_HANDLER_H__
+
+#include "mbed-client/m2mconnectionobserver.h"
+#include "mbed-client/m2mconfig.h"
+#include "mbed-client/m2minterface.h"
+#include "nsdl-c/sn_nsdl.h"
+
+class M2MConnectionSecurity;
+class M2MConnectionHandlerPimpl;
+
+/*! \file m2mconnectionhandler.h
+ * \brief M2MConnectionHandler.
+ * This class handles the socket connection for the LWM2M Client.
+ */
+
+class M2MConnectionHandler {
+public:
+
+    /**
+     * @enum ConnectionError
+     * This enum defines an error that can come from the
+     * socket read and write operation.
+     */
+    typedef enum {
+        CONNECTION_ERROR_WANTS_READ = -1000,
+        CONNECTION_ERROR_WANTS_WRITE = -1001,
+        ERROR_NONE = 0,
+        SSL_CONNECTION_ERROR,
+        SOCKET_READ_ERROR,
+        SOCKET_SEND_ERROR,
+        SOCKET_ABORT,
+        DNS_RESOLVING_ERROR,
+        SSL_HANDSHAKE_ERROR
+    }ConnectionError;
+
+
+public:
+
+    /**
+    * \brief Constructor
+    */
+    M2MConnectionHandler(M2MConnectionObserver &observer,
+                         M2MConnectionSecurity* sec,
+                         M2MInterface::BindingMode mode,
+                         M2MInterface::NetworkStack stack);
+
+    /**
+    * \brief Destructor
+    */
+    ~M2MConnectionHandler();
+
+    /**
+    * \brief This binds the socket connection.
+    * \param listen_port The port to be listened to for an incoming connection.
+    * \return True if successful, else false.
+    */
+    bool bind_connection(const uint16_t listen_port);
+
+    /**
+    * \brief This resolves the server address. The output is
+    * returned through a callback.
+    * \param String The server address.
+    * \param uint16_t The server port.
+    * \param ServerType The server type to be resolved.
+    * \param security The M2MSecurity object that determines which
+    * type of secure connection is used by the socket.
+    * \return True if the address is valid, else false.
+    */
+    bool resolve_server_address(const String& server_address,
+                                const uint16_t server_port,
+                                M2MConnectionObserver::ServerType server_type,
+                                const M2MSecurity* security);
+
+    /**
+    * \brief Sends data to the connected server.
+    * \param data_ptr The data to be sent.
+    * \param data_len The length of data to be sent.
+    * \param address_ptr The address structure to which the data needs to be sent.
+    * \return True if data is sent successfully, else false.
+    */
+    bool send_data(uint8_t *data_ptr,
+                           uint16_t data_len,
+                           sn_nsdl_addr_s *address_ptr);
+
+    /**
+    * \brief Listens to the incoming data from a remote server.
+    * \return True if successful, else false.
+    */
+    bool start_listening_for_data();
+
+    /**
+    * \brief Stops listening to the incoming data.
+    */
+    void stop_listening();
+
+    /**
+     * \brief Sends directly to the socket. This is used by the
+     * security classes to send the data after it has been encrypted.
+     * \param buf The buffer to send to.
+     * \param len The length of the buffer.
+     * \return The number of bytes sent, or -1 if failed.
+     */
+    int send_to_socket(const unsigned char *buf, size_t len);
+
+    /**
+     * \brief Receives directly from the socket. This
+     * is used by the security classes to receive raw data to be decrypted.
+     * \param buf The buffer to send to.
+     * \param len The length of the buffer.
+     * \return The number of bytes read, or -1 if failed.
+     */
+    int receive_from_socket(unsigned char *buf, size_t len);
+
+    /**
+    * \brief Closes the open connection.
+    */
+    void close_connection();
+
+    /**
+    * \brief Error handling for DTLS connectivity.
+    * \param error An error code from the TLS library.
+    */
+    void handle_connection_error(int error);
+
+    /**
+     * \brief Sets the network interface handler that is used by the client to connect
+     * to a network over IP.
+     * \param handler A network interface handler that is used by the client to connect.
+     *  This API is optional but it provides a mechanism for different platforms to
+     * manage the usage of underlying network interface by client.
+     */
+    void set_platform_network_handler(void *handler = NULL);
+
+    /**
+    * \brief Claims mutex to prevent thread clashes
+    * in multithreaded environment.
+    */
+    void claim_mutex();
+
+    /**
+    * \brief Releases mutex to prevent thread clashes
+    * in multithreaded environment.
+    */
+    void release_mutex();
+
+private:
+
+    M2MConnectionObserver                       &_observer;
+    M2MConnectionHandlerPimpl                   *_private_impl;
+
+friend class Test_M2MConnectionHandler;
+friend class Test_M2MConnectionHandler_mbed;
+friend class Test_M2MConnectionHandler_linux;
+friend class M2MConnection_TestObserver;
+};
+
+#endif //M2M_CONNECTION_HANDLER_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mconnectionobserver.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_CONNECTION_OBSERVER_H__
+#define M2M_CONNECTION_OBSERVER_H__
+
+#include "mbed-client/m2minterface.h"
+
+/*! \file m2mconnectionobserver.h
+ * \brief M2MConnectionObserver.
+ * The observer class for passing the socket activity to the state machine.
+ */
+
+class M2MConnectionObserver
+{
+
+public :
+
+    /**
+      * \enum ServerType, Defines the type of the
+      * server that the client wants to use.
+      */
+    typedef enum {
+        Bootstrap,
+        LWM2MServer
+    }ServerType;
+
+    /**
+     * \brief The M2MSocketAddress struct.
+     * A unified container for holding socket address data
+     * across different platforms.
+     */
+    struct SocketAddress{
+        M2MInterface::NetworkStack  _stack;
+        void                        *_address;
+        uint8_t                     _length;
+        uint16_t                    _port;
+    };
+
+    /**
+    * \brief Indicates that data is available from socket.
+    * \param data The data read from the socket.
+    * \param data_size The length of the data read from the socket.
+    * \param address The address of the server where the data is coming from.
+    */
+    virtual void data_available(uint8_t* data,
+                                uint16_t data_size,
+                                const M2MConnectionObserver::SocketAddress &address) = 0;
+
+    /**
+    * \brief Indicates an error occured in socket.
+    * \param error_code The error code from socket, it cannot be used any further.
+    * \param retry Indicates whether to re-establish the connection.
+    */
+    virtual void socket_error(uint8_t error_code, bool retry = true) = 0;
+
+    /**
+    * \brief Indicates that the server address resolving is ready.
+    * \param address The resolved socket address.
+    * \param server_type The type of the server.
+    * \param server_port The port of the resolved server address.
+    */
+    virtual void address_ready(const M2MConnectionObserver::SocketAddress &address,
+                               M2MConnectionObserver::ServerType server_type,
+                               const uint16_t server_port) = 0;
+
+    /**
+    * \brief Indicates that data has been sent successfully.
+    */
+    virtual void data_sent() = 0;
+};
+
+#endif // M2M_CONNECTION_OBSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mconnectionsecurity.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __M2M_CONNECTION_SECURITY_H__
+#define __M2M_CONNECTION_SECURITY_H__
+
+#include "mbed-client/m2mconfig.h"
+
+#include <stdint.h>
+
+class M2MConnectionHandler;
+class M2MSecurity;
+class M2MConnectionSecurityPimpl;
+class M2MConnectionHandler;
+
+/*! \file m2mconnectionsecurity.h
+ * \brief M2MConnectionSecurity.
+ * This class provides a method to create a secure socket connection
+ * to handle connectivity for the mbed Client. It handles sending, receiving
+ * and establishing a secure connection for mbed Client on top of the
+ * normal socket connection.
+ */
+
+class M2MConnectionSecurity {
+public:
+    typedef enum {
+        NO_SECURITY = 0,
+        TLS,
+        DTLS
+    } SecurityMode;
+
+private:
+    // Prevents the use of assignment operator by accident.
+    M2MConnectionSecurity& operator=( const M2MConnectionSecurity& /*other*/ );
+    // Prevents the use of copy constructor by accident.
+    M2MConnectionSecurity( const M2MConnectionSecurity& /*other*/ );
+
+public:
+    /**
+     * \brief Default Constructor.
+     */
+    M2MConnectionSecurity(SecurityMode mode);
+
+    /**
+     * \brief Default Destructor.
+     */
+    ~M2MConnectionSecurity();
+
+    /**
+     * \brief Resets the socket connection states.
+     */
+    void reset();
+
+    /**
+     * \brief Initiatlizes the socket connection states.
+     */
+    int init(const M2MSecurity *security);
+
+    /**
+     * \brief Starts the connection in non-blocking mode.
+     * \param connHandler The ConnectionHandler object that maintains the socket.
+     * \return Returns the state of the connection. Successful or not.
+     */
+    int start_connecting_non_blocking(M2MConnectionHandler* connHandler);
+
+    /**
+     * \brief Continues connectivity logic for a secure connection.
+     * \return Returns an error code if any while continuing the connection sequence.
+     */
+    int continue_connecting();
+
+    /**
+     * \brief Connects the client to the server.
+     * \param connHandler The ConnectionHandler object that maintains the socket.
+     * \return Returns the state of the connection. Successful or not.
+     */
+    int connect(M2MConnectionHandler* connHandler);
+
+    /**
+     * \brief Sends data to the server.
+     * \param message The data to be sent.
+     * \param len The length of the data.
+     * \return Indicates whether the data is sent successfully or not.
+     */
+    int send_message(unsigned char *message, int len);
+
+    /**
+     * \brief Reads the data received from the server.
+     * \param message The data to be read.
+     * \param len The length of the data.
+     * \return Indicates whether the data is read successfully or not.
+     */
+    int read(unsigned char* buffer, uint16_t len);
+
+    /**
+     * \brief Sets the function callback that is called by mbed Client to
+     * fetch a random number from an application to ensure strong entropy.
+     * \param random_callback A function pointer that is called by mbed Client
+     * while performing a secure handshake.
+     * The function signature should be uint32_t (*random_number_callback)(void);
+     */
+    void set_random_number_callback(random_number_cb callback);
+
+    /**
+     * \brief Sets the function callback that is called by mbed Client to
+     * provide an entropy source from an application to ensure strong entropy.
+     * \param entropy_callback A function pointer that is called by mbed-client
+     * while performing a secure handshake.
+     * Function signature, if using mbed-client-mbedtls, should be
+     * int (*mbedtls_entropy_f_source_ptr)(void *data, unsigned char *output,
+     *                                     size_t len, size_t *olen);
+     */
+    void set_entropy_callback(entropy_cb callback);
+
+private:
+
+    M2MConnectionSecurityPimpl* _private_impl;
+
+    friend class Test_M2MConnectionSecurity;
+    //friend class Test_M2MConnectionSecurityImpl;
+};
+
+#endif //__M2M_CONNECTION_SECURITY_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mconstants.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2MCONSTANTS_H
+#define M2MCONSTANTS_H
+
+/*! \file m2mconstants.h
+* \brief File defining all the constants used across mbed-client.
+*/
+
+#include <stdint.h>
+#include "m2mconfig.h"
+
+const int MAX_VALUE_LENGTH = 256;
+const int BUFFER_LENGTH = 1152;
+
+const int32_t MINIMUM_REGISTRATION_TIME = 60; //in seconds
+const uint64_t ONE_SECOND_TIMER = 1;
+const uint16_t MAX_ALLOWED_STRING_LENGTH = 64;
+const uint16_t OPTIMUM_LIFETIME = 3600;
+const uint16_t REDUCE_LIFETIME = 900;
+const float REDUCTION_FACTOR = 0.75f;
+
+// XXX:
+//                               <name></><inst-id></><res-name>
+//#define MAX_OBJECT_INSTANCE_NAME (255 + 1 + 5 + 1 + 255 + 1 + 5)
+//                           <name></><inst-id></><inst-id><zero-terminator>
+#define MAX_OBJECT_PATH_NAME (255 + 1 + 5 + 1 + 5 + 1)
+
+// values per: draft-ietf-core-observe-16
+// OMA LWM2M CR ref.
+#define START_OBSERVATION 0
+#define STOP_OBSERVATION 1
+
+#define COAP "coap://"
+#define COAPS  "coaps://"
+#define BOOTSTRAP_URI "bs"
+// PUT attributes to be checked from server
+#define EQUAL  "="
+#define AMP  "&"
+#define PMIN  "pmin"
+#define PMAX  "pmax"
+#define GT  "gt"
+#define LT  "lt"
+#define ST_SIZE  "st"
+#define STP  "stp"
+#define CANCEL  "cancel"
+
+// just a helper for "String default_value = "";" pattern
+extern const String EMPTY;
+
+//LWM2MOBJECT NAME/ID
+#define M2M_SECURITY_ID  "0"
+#define M2M_SERVER_ID  "1"
+#define M2M_ACCESS_CONTROL_ID  "2"
+#define M2M_DEVICE_ID  "3"
+#define M2M_CONNECTIVITY_MONITOR_ID  "4"
+#define M2M_FIRMWARE_ID  "5"
+#define M2M_LOCATION_ID  "6"
+#define M2M_CONNECTIVITY_STATISTICS_ID  "7"
+#define RESERVED_ID  "8"
+
+//OMA RESOURCE TYPE
+#define OMA_RESOURCE_TYPE  "" //oma.lwm2m
+
+//DEVICE RESOURCES
+#define DEVICE_MANUFACTURER  "0"
+#define DEVICE_DEVICE_TYPE  "17"
+#define DEVICE_MODEL_NUMBER  "1"
+#define DEVICE_SERIAL_NUMBER  "2"
+#define DEVICE_HARDWARE_VERSION  "18"
+#define DEVICE_FIRMWARE_VERSION  "3"
+#define DEVICE_SOFTWARE_VERSION  "19"
+#define DEVICE_REBOOT  "4"
+#define DEVICE_FACTORY_RESET  "5"
+#define DEVICE_AVAILABLE_POWER_SOURCES  "6"
+#define DEVICE_POWER_SOURCE_VOLTAGE  "7"
+#define DEVICE_POWER_SOURCE_CURRENT  "8"
+#define DEVICE_BATTERY_LEVEL  "9"
+#define DEVICE_BATTERY_STATUS  "20"
+#define DEVICE_MEMORY_FREE  "10"
+#define DEVICE_MEMORY_TOTAL  "21"
+#define DEVICE_ERROR_CODE  "11"
+#define DEVICE_RESET_ERROR_CODE  "12"
+#define DEVICE_CURRENT_TIME  "13"
+#define DEVICE_UTC_OFFSET  "14"
+#define DEVICE_TIMEZONE  "15"
+#define DEVICE_SUPPORTED_BINDING_MODE  "16"
+#define BINDING_MODE_UDP  "U"
+#define BINDING_MODE_UDP_QUEUE  "UQ"
+#define BINDING_MODE_SMS  "S"
+#define BINDING_MODE_SMS_QUEUE  "SQ"
+#define ERROR_CODE_VALUE  "0"
+
+//SECURITY RESOURCES
+#define SECURITY_M2M_SERVER_URI  "0"
+#define SECURITY_BOOTSTRAP_SERVER  "1"
+#define SECURITY_SECURITY_MODE  "2"
+#define SECURITY_PUBLIC_KEY  "3"
+#define SECURITY_SERVER_PUBLIC_KEY  "4"
+#define SECURITY_SECRET_KEY  "5"
+#define SECURITY_SMS_SECURITY_MODE  "6"
+#define SECURITY_SMS_BINDING_KEY  "7"
+#define SECURITY_SMS_BINDING_SECRET_KEY  "8"
+#define SECURITY_M2M_SERVER_SMS_NUMBER  "9"
+#define SECURITY_SHORT_SERVER_ID  "10"
+#define SECURITY_CLIENT_HOLD_OFF_TIME  "11"
+
+//SERVER RESOURCES
+#define SERVER_SHORT_SERVER_ID  "0"
+#define SERVER_LIFETIME  "1"
+#define SERVER_DEFAULT_MIN_PERIOD  "2"
+#define SERVER_DEFAULT_MAX_PERIOD  "3"
+#define SERVER_DISABLE  "4"
+#define SERVER_DISABLE_TIMEOUT  "5"
+#define SERVER_NOTIFICATION_STORAGE  "6"
+#define SERVER_BINDING  "7"
+#define SERVER_REGISTRATION_UPDATE  "8"
+
+//FIRMWARE RESOURCES
+#define FIRMWARE_PATH_PREFIX "5/0/"
+#define FIRMWARE_PACKAGE  "0"
+#define FIRMWARE_PACKAGE_URI  "1"
+#define FIRMWARE_UPDATE  "2"
+#define FIRMWARE_STATE  "3"
+#define FIRMWARE_UPDATE_SUPPORTED_OBJECTS  "4"
+#define FIRMWARE_UPDATE_RESULT  "5"
+#define FIRMWARE_PACKAGE_NAME  "6"
+#define FIRMWARE_PACKAGE_VERSION  "7"
+
+// TLV serializer / deserializer
+const uint8_t TYPE_RESOURCE = 0xC0;
+const uint8_t TYPE_MULTIPLE_RESOURCE = 0x80;
+const uint8_t TYPE_RESOURCE_INSTANCE = 0x40;
+const uint8_t TYPE_OBJECT_INSTANCE = 0x0;
+
+const uint8_t ID8 = 0x0;
+const uint8_t ID16 = 0x20;
+
+const uint8_t LENGTH8 = 0x08;
+const uint8_t LENGTH16 = 0x10;
+const uint8_t LENGTH24 = 0x18;
+
+const uint8_t COAP_CONTENT_OMA_PLAIN_TEXT_TYPE = 0;
+const uint8_t COAP_CONTENT_OMA_TLV_TYPE = 99;
+const uint8_t COAP_CONTENT_OMA_JSON_TYPE = 100;
+const uint8_t COAP_CONTENT_OMA_OPAQUE_TYPE = 42;
+
+const uint16_t MAX_UNINT_16_COUNT = 65535;
+
+#endif // M2MCONSTANTS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mdevice.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,250 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_DEVICE_H
+#define M2M_DEVICE_H
+
+#include "mbed-client/m2mobject.h"
+
+// FORWARD DECLARATION
+class M2MResource;
+class M2MResourceInstance;
+
+/*! \file m2mdevice.h
+ *  \brief M2MDevice.
+ *  This class represents the Device Object model of the LWM2M framework.
+ *  It provides an interface for handling the device object
+ *  and all its corresponding resources. There can be only one instance
+ *  of a Device Object.
+ */
+class  M2MDevice : public M2MObject {
+
+friend class M2MInterfaceFactory;
+
+public:
+
+     /**
+      * \brief An enum defining all the resources associated with the
+      * Device Object in the LWM2M framework.
+      */
+    typedef enum {
+        Manufacturer,
+        DeviceType,
+        ModelNumber,
+        SerialNumber,
+        HardwareVersion,
+        FirmwareVersion,
+        SoftwareVersion,
+        Reboot,
+        FactoryReset,
+        AvailablePowerSources,
+        PowerSourceVoltage,
+        PowerSourceCurrent,
+        BatteryLevel,
+        BatteryStatus,
+        MemoryFree,
+        MemoryTotal,
+        ErrorCode,
+        ResetErrorCode,
+        CurrentTime,
+        UTCOffset,
+        Timezone,
+        SupportedBindingMode
+    }DeviceResource;
+
+private:
+
+    /**
+     * Constructor
+     */
+    M2MDevice(char *path);
+
+    // Prevents the use of assignment operator.
+    M2MDevice& operator=( const M2MDevice& /*other*/ );
+
+    // Prevents the use of copy constructor
+    M2MDevice( const M2MDevice& /*other*/ );
+
+    /**
+     * Destructor
+     */
+    virtual ~M2MDevice();
+
+    static M2MDevice* get_instance();
+
+public:
+
+    /**
+     * \brief Deletes an M2MDevice instance.
+     */
+    static void delete_instance();
+
+    /**
+     * \brief Creates a new resource for the given resource enum.
+     * \param resource With this function, the following resources can be created:
+     * 'Manufacturer', 'DeviceType','ModelNumber','SerialNumber',
+     * 'HardwareVersion', 'FirmwareVersion', 'SoftwareVersion',
+     *  'UTCOffset', 'Timezone', 'SupportedBindingMode'.
+     * \param value The value to be set on the resource, in string format.
+     * \return M2MResource if created successfully, else NULL.
+     */
+    M2MResource* create_resource(DeviceResource resource, const String &value);
+
+    /**
+     * \brief Creates a new resource for given resource enum.
+     * \param resource With this function, the following resources can be created:
+     * 'AvailablePowerSources','PowerSourceVoltage','PowerSourceCurrent',
+     * 'BatteryLevel', 'BatteryStatus', 'MemoryFree', 'MemoryTotal',
+     * 'ErrorCode', 'CurrentTime'. For 'CurrentTime', pass the time value in EPOCH format, for example
+     * 1438944683.
+     * \param value The value to be set on the resource, in integer format.
+     * \return M2MResource if created successfully, else NULL.
+     */
+    M2MResource* create_resource(DeviceResource resource, int64_t value);
+
+    /**
+     * \brief Creates a new resource instance for given resource enum.
+     * \param resource With this function, the following resources can be created:
+     * 'AvailablePowerSources','PowerSourceVoltage','PowerSourceCurrent',
+     * 'ErrorCode'.
+     * \param value The value to be set on the resource, in integer format.
+     * \return M2MResourceInstance if created successfully, else NULL.
+     */
+    M2MResourceInstance* create_resource_instance(DeviceResource resource, int64_t value,
+                                                  uint16_t instance_id);
+
+    /**
+     * \brief Creates a new resource for given resource name.
+     * \param resource With this function, the following resources can be created:
+     * 'ResetErrorCode','FactoryReset'.
+     * \return M2MResource if created successfully, else NULL.
+     */
+    M2MResource* create_resource(DeviceResource resource);
+
+    /**
+     * \brief Deletes the resource with the given resource enum.
+     * Mandatory resources cannot be deleted.
+     * \param resource The name of the resource to be deleted.
+     * \return True if deleted, else false.
+     */
+    bool delete_resource(DeviceResource resource);
+
+    /**
+     * \brief Deletes the resource with the given resource enum.
+     * Mandatory resources cannot be deleted.
+     * \param resource The name of the resource to be deleted.
+     * \param instance_id The instance ID of the resource.
+     * \return True if deleted, else false.
+     */
+    bool delete_resource_instance(DeviceResource resource,
+                                  uint16_t instance_id);
+
+    /**
+     * \brief Sets the value of the given resource enum.
+     * \param resource With this function, a value can be set for the following resources:
+     * 'Manufacturer', 'DeviceType','ModelNumber','SerialNumber',
+     * 'HardwareVersion', 'FirmwareVersion', 'SoftwareVersion',
+     *  'UTCOffset', 'Timezone', 'SupportedBindingMode'.
+     * \param value The value to be set on the resource, in string format.
+     * \param instance_id The instance ID of the resource, default is 0.
+     * \return True if successfully set, else false.
+     */
+    bool set_resource_value(DeviceResource resource,
+                            const String &value,
+                            uint16_t instance_id = 0);
+
+    /**
+     * \brief Sets the value of the given resource enum.
+     * \param resource With this function, a value can be set for the following resources:
+     * 'AvailablePowerSources','PowerSourceVoltage','PowerSourceCurrent',
+     * 'BatteryLevel', 'BatteryStatus', 'MemoryFree', 'MemoryTotal',
+     * 'ErrorCode', 'CurrentTime'.
+     * \param value The value to be set on the resource, in integer format.
+     * \param instance_id The instance ID of the resource, default is 0.
+     * \return True if successfully set, else false.
+     */
+    bool set_resource_value(DeviceResource resource,
+                            int64_t value,
+                            uint16_t instance_id = 0);
+
+    /**
+     * \brief Returns the value of the given resource enum, in string format.
+     * \param resource With this function, the following resources can return a value:
+     * 'Manufacturer', 'DeviceType','ModelNumber','SerialNumber',
+     * 'HardwareVersion', 'FirmwareVersion', 'SoftwareVersion',
+     *  'UTCOffset', 'Timezone', 'SupportedBindingMode'.
+     * \param instance_id The instance ID of the resource, default is 0.
+     * \return The value associated with that resource. If the resource is not valid NULL is returned.
+     */
+    String resource_value_string(DeviceResource resource,
+                                 uint16_t instance_id = 0) const;
+
+    /**
+     * \brief Returns the value of the given resource key name, in integer format.
+     * \param resource With this function, the following resources can return a value:
+     * 'AvailablePowerSources','PowerSourceVoltage','PowerSourceCurrent',
+     * 'BatteryLevel', 'BatteryStatus', 'MemoryFree', 'MemoryTotal',
+     * 'ErrorCode', 'CurrentTime'.
+     * \param instance_id The instance ID of the resource, default is 0
+     * \return The value associated with that resource. If the resource is not valid -1 is returned.
+     */
+    int64_t resource_value_int(DeviceResource resource,
+                               uint16_t instance_id = 0) const;
+
+    /**
+     * \brief Indicates whether the resource instance with the given resource enum exists or not.
+     * \param resource The resource enum.
+     * \return True if at least one instance exists, else false.
+     */
+    bool is_resource_present(DeviceResource resource)const;
+
+    /**
+     * \brief Returns the number of resources for the whole device object.
+     * \return Total number of resources belonging to the device object.
+     */
+    uint16_t total_resource_count()const;
+
+    /**
+     * \brief Returns the number of resources for a given resource enum.
+     * \param resource The resource enum.
+     * \return The number of resources for a given resource enum. Returns 1 for the
+     * mandatory resources. Can be 0 as well if no instances exist for an
+     * optional resource.
+     */
+    uint16_t per_resource_count(DeviceResource resource)const;
+
+private:
+
+    M2MResourceInstance* get_resource_instance(DeviceResource dev_res,
+                                               uint16_t instance_id) const;
+
+    static const char* resource_name(DeviceResource resource);
+
+    bool check_value_range(DeviceResource resource, const int64_t value) const;
+
+private :
+
+    M2MObjectInstance*    _device_instance;     //Not owned
+
+protected:
+
+    static M2MDevice*     _instance;
+
+    friend class Test_M2MDevice;
+    friend class Test_M2MInterfaceFactory;
+};
+
+#endif // M2M_DEVICE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mfirmware.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,237 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2MFIRMWARE_H
+#define M2MFIRMWARE_H
+
+#include "mbed-client/m2mobject.h"
+
+// FORWARD DECLARATION
+class M2MResource;
+class M2MResourceInstance;
+
+/*! \file m2mfirmware.h
+ *  \brief M2MFirmware.
+ *  This class represents the Firmware Object model of the LWM2M framework.
+ *  It provides an interface for handling the Firmware Object
+ *  and all its corresponding resources. There can be only one instance
+ *  of a Firmware Object.
+ */
+class  M2MFirmware : public M2MObject {
+
+friend class M2MInterfaceFactory;
+
+public:
+
+     /**
+      * \brief An enum defining all the resources associated with a
+      * Firmware Object in the LWM2M framework.
+      */
+    typedef enum {
+        Package,
+        PackageUri,
+        Update,
+        State,
+        UpdateSupportedObjects,
+        UpdateResult,
+        PackageName,
+        PackageVersion
+    } FirmwareResource;
+
+    /**
+     * \brief An enum defining the state of the firmware update.
+     */
+    typedef enum {
+       Idle = 0,
+       Downloading,
+       Downloaded,
+       Updating
+    } UpdateState;
+
+    /**
+     * \brief An enum defining the result of the firmware update.
+     */
+    typedef enum {
+       Default = 0,
+       SuccessfullyUpdated,
+       NotEnoughSpace,
+       OutOfMemory,
+       ConnectionLost,
+       CRCCheckFailure,
+       UnsupportedPackageType,
+       InvalidURI
+    } ResultOfUpdate;
+
+private:
+
+    /**
+     * Constructor
+     */
+    M2MFirmware();
+
+    // Prevents the use of assignment operator.
+    M2MFirmware& operator=( const M2MFirmware& /*other*/ );
+
+    // Prevents the use of copy constructor.
+    M2MFirmware( const M2MFirmware& /*other*/ );
+
+    /**
+     * Destructor
+     */
+    virtual ~M2MFirmware();
+
+    static M2MFirmware* get_instance();
+
+public:
+
+    /**
+     * \brief Deletes a M2MFirmware instance.
+     */
+    static void delete_instance();
+
+    /**
+     * \brief Creates a new resource for a given resource enum.
+     * \param resource With this function, the following resources can be created:
+     * 'PackageUri', 'PackageName','PackageVersion'.
+     * \param value The value to be set on the resource, in string format.
+     * \return M2MResource if created successfully, else NULL.
+     */
+    M2MResource* create_resource(FirmwareResource resource, const String &value);
+
+    /**
+     * \brief Creates a new resource for a given resource enum.
+     * \param resource With this function, the following resources can be created:
+     * 'State','UpdateSupportedObjects','UpdateResult'.
+     * \param value The value to be set on the resource, in integer format.
+     * \return M2MResource if created successfully, else NULL.
+     */
+    M2MResource* create_resource(FirmwareResource resource, int64_t value);
+
+    /**
+     * \brief Deletes a resource with a given resource enum.
+     * Mandatory resources cannot be deleted.
+     * \param resource The name of the resource to be deleted.
+     * \return True if deleted, else false.
+     */
+    bool delete_resource(FirmwareResource resource);
+
+    /**
+     * \brief Sets a value of a given resource enum.
+     * \param resource With this function, a value can be set on the following resources:
+     * 'Package', 'PackageUri', 'PackageName','PackageVersion'.
+     * \param value The value to be set on the resource, in string format.
+     * \return True if successfully set, else false.
+     */
+    bool set_resource_value(FirmwareResource resource,
+                            const String &value);
+
+    /**
+     * \brief Sets a value of a given resource enum.
+     * \param resource With this function, a value can be set for the following resources:
+     * 'State','UpdateSupportedObjects','UpdateResult'.
+     * \param value The value to be set on the resource, in integer format.
+     * \return True if successfully set, else false.
+     */
+    bool set_resource_value(FirmwareResource resource,
+                            int64_t value);
+
+    /**
+     * \brief Sets a value of a given resource enum.
+     * \param resource With this function, a value can be set for the following resources:
+     * 'Package'.
+     * \param value The value to be set on the resource, in uint8_t format.
+     * \param size The size of the buffer value to be set on the resource.
+     * \return True if successfully set, else false.
+     */
+    bool set_resource_value(FirmwareResource resource,
+                            const uint8_t *value,
+                            const uint32_t length);
+
+    /**
+     * \brief Returns a value of a given resource enum, in string format.
+     * \param resource With this function, the following resources can return a value:
+     * 'PackageUri', 'PackageName','PackageVersion'.
+     * \return The value associated with that resource, if the key is not valid it returns NULL.
+     */
+    String resource_value_string(FirmwareResource resource) const;
+
+    /**
+     * \brief Returns a value of a given resource key name, in integer format.
+     * \param resource With this function, the following resources can return a value:
+     * 'State','UpdateSupportedObjects','UpdateResult'.
+     * \return The value associated with that resource. If the resource is not valid -1 is returned.
+     */
+    int64_t resource_value_int(FirmwareResource resource) const;
+
+    /**
+     * \brief Populates the data buffer and returns the size of the buffer.
+     * \param resource With this function, the following resources can return a value:
+     * 'Package'.
+     * \param [OUT]data The data buffer containing the value.
+     * Tha value of the pointer MUST be set as NULL before calling this function unless it has been
+     * allocated using malloc. In that case the data is freed when calling this function.
+     * The buffer is allocated using malloc when this function is called and MUST be passed to function free after use.
+     * \return The size of the buffer populated.
+     */
+    uint32_t resource_value_buffer(FirmwareResource resource,
+                                   uint8_t *&data) const;
+
+    /**
+     * \brief Returns whether a resource instance with a given resource enum exists or not.
+     * \param resource The resource enum.
+     * \return True if at least one instance exists, else false.
+     */
+    bool is_resource_present(FirmwareResource resource) const;
+
+    /**
+     * \brief Returns the number of resources for a whole firmware object.
+     * \return Total number of resources belonging to the firmware object.
+     */
+    uint16_t total_resource_count() const;
+
+    /**
+     * \brief Returns the number of resources for a given resource enum.
+     * \param resource The resource enum.
+     * \return The number of resources for a given resource enum. Returns 1 for the
+     * mandatory resources. Can be 0 as well if no instances exist for an
+     * optional resource.
+     */
+    uint16_t per_resource_count(FirmwareResource resource) const;
+
+
+private:
+
+    M2MResource* get_resource(FirmwareResource resource) const;
+
+    static const char* resource_name(FirmwareResource resource);
+
+    void create_mandatory_resources();
+
+    bool check_value_range(FirmwareResource resource, const int64_t value) const;
+
+private :
+
+    M2MObjectInstance*    _firmware_instance;     //Not owned
+
+protected:
+
+    static M2MFirmware*     _instance;
+
+    friend class Test_M2MFirmware;
+    friend class Test_M2MInterfaceFactory;
+};
+
+
+#endif // M2MFIRMWARE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2minterface.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,199 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_INTERFACE_H
+#define M2M_INTERFACE_H
+
+#include <stdint.h>
+#include "mbed-client/m2mvector.h"
+#include "mbed-client/m2mconfig.h"
+#include "mbed-client/functionpointer.h"
+
+//FORWARD DECLARATION
+class M2MSecurity;
+class M2MObject;
+class M2MInterfaceObserver;
+
+typedef Vector<M2MObject *> M2MObjectList;
+typedef FP callback_handler;
+
+/*! \file m2minterface.h
+ *  \brief M2MInterface.
+ *  This class provides an interface for handling all mbed Client interface operations
+ *  defined in the OMA LWM2M specifications.
+ *  This includes Bootstrapping, Client Registration, Device Management &
+ *  Service Enablement and Information Reporting.
+ */
+
+class M2MInterface {
+
+public:
+
+    /**
+     * \brief An enum defining different kinds of errors
+     * that can occur during various client operations.
+     */
+    typedef enum {
+        ErrorNone = 0,
+        AlreadyExists,
+        BootstrapFailed,
+        InvalidParameters,
+        NotRegistered,
+        Timeout,
+        NetworkError,
+        ResponseParseFailed,
+        UnknownError,
+        MemoryFail,
+        NotAllowed,
+        SecureConnectionFailed,
+        DnsResolvingFailed
+    }Error;
+
+    /**
+     * \brief An enum defining different kinds of binding
+     * modes handled for client operations.
+     */
+    typedef enum {
+        NOT_SET = 0,
+        UDP = 0x01,
+        UDP_QUEUE = 0x03,
+        SMS = 0x04,
+        SMS_QUEUE =0x06,
+        UDP_SMS_QUEUE = 0x07,
+        TCP = 0x09, //not real value, spec does not have one!
+                    //this has nsdl binding mode bit UDP set
+        TCP_QUEUE = 0x0b //not real value, spec does not have one!
+                         //this has nsdl binding mode bits, UDP and UDP_QUEUE set
+    }BindingMode;
+
+    /**
+     * \brief An enum defining different kinds of network
+     * stacks that can be used by mbed Client.
+     */
+    typedef enum {
+        Uninitialized = 0,
+        LwIP_IPv4,
+        LwIP_IPv6,
+        Reserved,
+        Nanostack_IPv6,
+        ATWINC_IPv4,
+        Unknown
+    }NetworkStack;
+
+public:
+
+    virtual ~M2MInterface(){}
+
+    /**
+     * \brief Initiates bootstrapping of the client with the provided Bootstrap
+     * Server information.
+     * NOTE: This API is not supported for developers!!
+     * \param security_object A security object that contains information
+     * required for successful bootstrapping of the client.
+     */
+    virtual void bootstrap(M2MSecurity *security_object) = 0;
+
+    /**
+     * \brief Cancels an ongoing bootstrapping operation of the client. If the client has
+     * already successfully bootstrapped, this function deletes the existing
+     * bootstrap information from the client.
+     * NOTE: This API is not supported for developers!!
+     */
+    virtual void cancel_bootstrap() = 0;
+
+    /**
+     * \brief Initiates the registration of a provided security object to the
+     * corresponding LWM2M server.
+     * \param security_object The security object that contains information
+     * required for registering to the LWM2M server.
+     * If the client wants to register to multiple LWM2M servers, it must call
+     * this function once for each of the LWM2M server objects separately.
+     * \param object_list Objects that contain information about the
+     * client attempting to register to the LWM2M server.
+     */
+    virtual void register_object(M2MSecurity *security_object, const M2MObjectList &object_list) = 0;
+
+    /**
+     * \brief Updates or refreshes the client's registration on the LWM2M
+     * server.
+     * \param security_object A security object from which the device object
+     * needs to update the registration. If there is only one LWM2M server registered,
+     * this parameter can be NULL.
+     * \param lifetime The lifetime of the endpoint client in seconds. If the same value
+     * has to be passed, set the default value to 0.
+     */
+    virtual void update_registration(M2MSecurity *security_object, const uint32_t lifetime = 0) = 0;
+
+    /**
+     * \brief Updates or refreshes the client's registration on the LWM2M
+     * server. Use this function to publish new objects to LWM2M server.
+     * \param security_object The security object from which the device object
+     * needs to update the registration. If there is only one LWM2M server registered,
+     * this parameter can be NULL.
+     * \param object_list Objects that contain information about the
+     * client attempting to register to the LWM2M server.
+     * \param lifetime The lifetime of the endpoint client in seconds. If the same value
+     * has to be passed, set the default value to 0.
+     */
+    virtual void update_registration(M2MSecurity *security_object, const M2MObjectList &object_list,
+                                     const uint32_t lifetime = 0) = 0;
+
+    /**
+     * \brief Unregisters the registered object from the LWM2M server.
+     * \param security_object The security object from which the device object
+     * needs to be unregistered. If there is only one LWM2M server registered,
+     * this parameter can be NULL.
+     */
+    virtual void unregister_object(M2MSecurity* security_object = NULL) = 0;
+
+    /**
+     * \brief Sets the function that is called for indicating that the client
+     * is going to sleep when the binding mode is selected with queue mode.
+     * \param callback A function pointer that is called when the client
+     * goes to sleep.
+     */
+    virtual void set_queue_sleep_handler(callback_handler handler) = 0;
+
+    /**
+     * \brief Sets the function callback that is called by mbed Client to
+     * fetch a random number from an application to ensure strong entropy.
+     * \param random_callback A function pointer that is called by mbed Client
+     * while performing a secure handshake.
+     * The function signature should be uint32_t (*random_number_callback)(void);
+     */
+    virtual void set_random_number_callback(random_number_cb callback) = 0;
+
+    /**
+     * \brief Sets the function callback that is called by mbed Client to
+     * provide an entropy source from an application to ensure strong entropy.
+     * \param entropy_callback A function pointer that is called by mbed Client
+     * while performing a secure handshake.
+     * Function signature, if using mbed-client-mbedtls, should be
+     * int (*mbedtls_entropy_f_source_ptr)(void *data, unsigned char *output,
+     *                                     size_t len, size_t *olen);
+     */
+    virtual void set_entropy_callback(entropy_cb callback) = 0;
+
+    /**
+     * \brief Sets the network interface handler that is used by mbed Client to connect
+     * to a network over IP.
+     * \param handler A network interface handler that is used by mbed Client to connect.
+     *  This API is optional but it provides a mechanism for different platforms to
+     * manage the usage of underlying network interface by the client.
+     */
+    virtual void set_platform_network_handler(void *handler = NULL) = 0;
+};
+
+#endif // M2M_INTERFACE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2minterfacefactory.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_INTERFACE_FACTORY_H
+#define M2M_INTERFACE_FACTORY_H
+
+#include <stdlib.h>
+#include "mbed-client/m2msecurity.h"
+#include "mbed-client/m2mresource.h"
+#include "mbed-client/m2minterfaceobserver.h"
+
+//FORWARD DECLARATION
+class M2MDevice;
+class M2MServer;
+class M2MInterfaceImpl;
+class M2MFirmware;
+
+/*! \file m2minterfacefactory.h
+ *  \brief M2MInterfaceFactory.
+ *  This is a factory class that provides an interface for creating an mbed Client Interface
+ *  object for an application to utilize the LWM2M features provided by the client.
+ */
+
+class  M2MInterfaceFactory {
+private:
+    // Prevents the use of an assignment operator by accident.
+    M2MInterfaceFactory& operator=( const M2MInterfaceFactory& /*other*/ );
+
+    // Prevents the use of a copy constructor by accident.
+    M2MInterfaceFactory( const M2MInterfaceFactory& /*other*/ );
+
+public:
+
+    /**
+     * \brief Creates an interface object for the mbed Client Inteface. With this, the
+     * client can handle client operations like Bootstrapping, Client
+     * Registration, Device Management and Information Reporting.
+     * \param endpoint_name The endpoint name of mbed Client.
+     * \param endpoint_type The endpoint type of mbed Client, default is empty.
+     * \param life_time The lifetime of the endpoint in seconds,
+     *        if -1 it is optional.
+     * \param listen_port The listening port for the endpoint, default is 5683.
+     * \param domain The domain of the endpoint, default is empty.
+     * \param mode The binding mode of the endpoint, default is NOT_SET.
+     * \param stack The underlying network stack to be used for the connection,
+     * default is LwIP_IPv4.
+     * \param context_address The context address for M2M-HTTP, not used currently.
+     * \return M2MInterfaceImpl An object for managing other client operations.
+     */
+    static M2MInterface *create_interface(M2MInterfaceObserver &observer,
+                                              const String &endpoint_name,
+                                              const String &endpoint_type = "",
+                                              const int32_t life_time = -1,
+                                              const uint16_t listen_port = 5683,
+                                              const String &domain = "",
+                                              M2MInterface::BindingMode mode = M2MInterface::NOT_SET,
+                                              M2MInterface::NetworkStack stack = M2MInterface::LwIP_IPv4,
+                                              const String &context_address = "");
+
+    /**
+     * \brief Creates a security object for the mbed Client Inteface. With this, the
+     * client can manage Bootstrapping and Client Registration.
+     * \param ServerType The type of the Security Object, bootstrap or LWM2M server.
+     * \return M2MSecurity An object for managing other client operations.
+     */
+    static M2MSecurity *create_security(M2MSecurity::ServerType server_type);
+
+    /**
+     * \brief Creates a server object for the mbed Client Inteface. With this, the 
+     * client can manage the server resources used for client operations
+     * such as Client Registration, server lifetime.
+     * \return M2MServer An object for managing server client operations.
+     */
+    static M2MServer *create_server();
+
+    /**
+     * \brief Creates a device object for the mbed Client Inteface. With this, the
+     * client can manage the device resources used for client operations
+     * such as Client Registration, Device Management and Information Reporting.
+     * \param name The name of the device object.
+     * \return M2MDevice An object for managing other client operations.
+     */
+    static M2MDevice *create_device();
+
+    /**
+     * \brief Creates a firmware object for the mbed Client Inteface. With this, the
+     * client can manage the firmware resources used for the client operations
+     * such as Client Registration, Device Management and Information Reporting.
+     * \return M2MFirmware An object for managing other client operations.
+     */
+    static M2MFirmware *create_firmware();
+
+    /**
+     * \brief Creates a generic object for the mbed Client Inteface. With this, the
+     * client can manage its own customized resources used for registering
+     * Device Management and Information Reporting for those resources.
+     * \param name The name of the object.
+     * \param id A unique ID for the object. It should be other than the reserved
+     * LWM2M object IDs.
+     * \return M2MObject An object for managing other mbed Client operations.
+     */
+    static M2MObject *create_object(const String &name);
+
+
+    friend class Test_M2MInterfaceFactory;
+};
+
+#endif // M2M_INTERFACE_FACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2minterfaceobserver.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_INTERFACE_OBSERVER_H
+#define M2M_INTERFACE_OBSERVER_H
+
+#include "mbed-client/m2mbase.h"
+#include "mbed-client/m2minterface.h"
+
+//FORWARD DECLARATION
+class M2MServer;
+
+/*! \file m2minterfaceobserver.h
+ * \brief M2MInterfaceObserver
+ * This is an observer class that updates the calling application about
+ * various events associated with various Interface operations.
+ * Also, it informs about various errors that can occur during any of the above
+ * operations.
+ */
+class M2MInterfaceObserver {
+
+public:
+
+    /**
+     * \brief A callback indicating that the bootstap has been performed successfully.
+     * \param server_object The server object that contains information fetched
+     * about the LWM2M server from the bootstrap server. This object can be used
+     * to register to the LWM2M server. The object ownership is passed.
+     */
+    virtual void bootstrap_done(M2MSecurity *server_object) = 0;
+
+    /**
+     * \brief A callback indicating that the device object has been registered
+     * successfully to the LWM2M server.
+     * \param security_object The server object on which the device object is
+     * registered. The object ownership is passed.
+     * \param server_object An object containing information about the LWM2M server.
+     * The client maintains the object.
+     */
+    virtual void object_registered(M2MSecurity *security_object, const M2MServer &server_object) = 0;
+
+    /**
+     * \brief A callback indicating that the device object has been successfully unregistered
+     * from the LWM2M server.
+     * \param server_object The server object from which the device object is
+     * unregistered. The object ownership is passed.
+     */
+    virtual void object_unregistered(M2MSecurity *server_object) = 0;
+
+    /**
+     * \brief A callback indicating that the device object registration has been successfully
+     * updated on the LWM2M server.
+     * \param security_object The server object on which the device object registration
+     * updated. The object ownership is passed.
+     * \param server_object An object containing information about the LWM2M server.
+     * The client maintains the object.
+     */
+    virtual void registration_updated(M2MSecurity *security_object, const M2MServer & server_object) = 0;
+
+    /**
+     * \brief A callback indicating that there was an error during the operation.
+     * \param error An error code for the occurred error.
+     */
+    virtual void error(M2MInterface::Error error) = 0;
+
+    /**
+     * \brief A callback indicating that the value of the resource object is updated by the server.
+     * \param base The object whose value is updated.
+     * \param type The type of the object.
+     */
+    virtual void value_updated(M2MBase *base, M2MBase::BaseType type) = 0;
+};
+
+#endif // M2M_INTERFACE_OBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mobject.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,195 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_OBJECT_H
+#define M2M_OBJECT_H
+
+#include "mbed-client/m2mvector.h"
+#include "mbed-client/m2mbase.h"
+#include "mbed-client/m2mobjectinstance.h"
+
+//FORWARD DECLARATION
+typedef Vector<M2MObjectInstance *> M2MObjectInstanceList;
+
+/*! \file m2mobject.h
+ *  \brief M2MObject.
+ *  This class is the base class for the mbed Client Objects. All defined
+ *  LWM2M object models can be created based on it. This class also holds all object
+ *  instances associated with the given object.
+ */
+
+class M2MObject : public M2MBase
+{
+
+friend class M2MInterfaceFactory;
+
+protected :
+
+    /**
+     * \brief Constructor
+     * \param name The name of the object.
+     * \param path Path of the object like 3/0/1
+     * \param external_blockwise_store If true CoAP blocks are passed to application through callbacks
+     *        otherwise handled in mbed-client-c.
+     */
+    M2MObject(const String &object_name,
+              char *path,
+              bool external_blockwise_store = false);
+
+    // Prevents the use of default constructor.
+    M2MObject();
+
+    // Prevents the use of assignment operator.
+    M2MObject& operator=( const M2MObject& /*other*/ );
+
+    // Prevents the use of copy constructor.
+    M2MObject( const M2MObject& /*other*/ );
+
+    /**
+     * \brief Constructor
+     * \param name The name of the object.
+     */
+    M2MObject(const M2MBase::lwm2m_parameters_s* static_res);
+
+public:
+
+    /**
+     * \brief Destructor
+     */
+    virtual ~M2MObject();
+
+    /**
+     * \brief Creates a new object instance for a given mbed Client Interface object. With this,
+     * the client can respond to server's GET methods with the provided value.
+     * \return M2MObjectInstance. An object instance for managing other client operations.
+     */
+    M2MObjectInstance* create_object_instance(uint16_t instance_id = 0);
+
+    /**
+     * TODO!!
+     */
+    M2MObjectInstance* create_object_instance(const lwm2m_parameters_s* s);
+
+    /**
+     * \brief Removes the object instance resource with the given instance id.
+     * \param instance_id The instance ID of the object instance to be removed, default is 0.
+     * \return True if removed, else false.
+     */
+    virtual bool remove_object_instance(uint16_t instance_id = 0);
+
+    /**
+     * \brief Returns the object instance with the the given instance ID.
+     * \param instance_id The instance ID of the requested object instance ID, default is 0.
+     * \return Object instance reference if found, else NULL.
+     */
+    virtual M2MObjectInstance* object_instance(uint16_t instance_id = 0) const;
+
+    /**
+     * \brief Returns a list of object instances.
+     * \return A list of object instances.
+     */
+    virtual const M2MObjectInstanceList& instances() const;
+
+    /**
+     * \brief Returns the total number of object instances-
+     * \return The total number of the object instances.
+     */
+    virtual uint16_t instance_count() const;
+
+    /**
+     * \brief Returns the object type.
+     * \return BaseType.
+     */
+    virtual M2MBase::BaseType base_type() const;
+
+    /**
+     * \brief Adds the observation level for the object.
+     * \param observation_level The level of observation.
+     */
+    virtual void add_observation_level(M2MBase::Observation observation_level);
+
+    /**
+     * \brief Removes the observation level from the object.
+     * \param observation_level The level of observation.
+     */
+    virtual void remove_observation_level(M2MBase::Observation observation_level);
+
+    /**
+     * \brief Handles GET request for the registered objects.
+     * \param nsdl The NSDL handler for the CoAP library.
+     * \param received_coap_header The CoAP message received from the server.
+     * \param observation_handler The handler object for sending
+     * observation callbacks.
+     * \return sn_coap_hdr_s  The message that needs to be sent to server.
+     */
+    virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl,
+                                              sn_coap_hdr_s *received_coap_header,
+                                              M2MObservationHandler *observation_handler = NULL);
+
+    /**
+     * \brief Handles PUT request for the registered objects.
+     * \param nsdl The NSDL handler for the CoAP library.
+     * \param received_coap_header The received CoAP message from the server.
+     * \param observation_handler The handler object for sending
+     * observation callbacks.
+     * \param execute_value_updated True will execute the "value_updated" callback.
+     * \return sn_coap_hdr_s The message that needs to be sent to server.
+     */
+    virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl,
+                                              sn_coap_hdr_s *received_coap_header,
+                                              M2MObservationHandler *observation_handler,
+                                              bool &execute_value_updated);
+
+    /**
+     * \brief Handles GET request for the registered objects.
+     * \param nsdl The NSDL handler for the CoAP library.
+     * \param received_coap_header The received CoAP message from the server.
+     * \param observation_handler The handler object for sending
+     * observation callbacks.
+     * \param execute_value_updated True will execute the "value_updated" callback.
+     * \return sn_coap_hdr_s The message that needs to be sent to server.
+     */
+    virtual sn_coap_hdr_s* handle_post_request(nsdl_s *nsdl,
+                                               sn_coap_hdr_s *received_coap_header,
+                                               M2MObservationHandler *observation_handler,
+                                               bool &execute_value_updated,
+                                               sn_nsdl_addr_s *address = NULL);
+
+    virtual void notification_update(uint16_t obj_instance_id);
+
+protected :
+
+
+private:
+
+    M2MObjectInstanceList     _instance_list; // owned
+    uint16_t                  _max_instance_count;
+
+friend class Test_M2MObject;
+friend class Test_M2MInterfaceImpl;
+friend class Test_M2MNsdlInterface;
+friend class Test_M2MTLVSerializer;
+friend class Test_M2MTLVDeserializer;
+friend class Test_M2MDevice;
+friend class Test_M2MFirmware;
+friend class Test_M2MBase;
+friend class Test_M2MObjectInstance;
+friend class Test_M2MResource;
+friend class Test_M2MSecurity;
+friend class Test_M2MServer;
+friend class Test_M2MResourceInstance;
+};
+
+#endif // M2M_OBJECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mobjectinstance.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,317 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_OBJECT_INSTANCE_H
+#define M2M_OBJECT_INSTANCE_H
+
+#include "mbed-client/m2mvector.h"
+#include "mbed-client/m2mresource.h"
+
+//FORWARD DECLARATION
+typedef Vector<M2MResource *> M2MResourceList;
+typedef Vector<M2MResourceInstance *> M2MResourceInstanceList;
+
+
+class M2MObject;
+
+/*! \file m2mobjectinstance.h
+ *  \brief M2MObjectInstance.
+ *  This class is the instance class for mbed Client Objects. All defined
+ *  LWM2M object models can be created based on it. This class also holds all resource
+ *  instances associated with the given object.
+ */
+
+class M2MObjectInstance : public M2MBase
+{
+
+friend class M2MObject;
+
+private: // Constructor and destructor are private which means
+         // that these objects can be created or
+         // deleted only through function provided by M2MObject.
+
+    /**
+     * \brief Constructor
+     * \param name Name of the object
+     */
+    M2MObjectInstance(M2MObject& parent, const String &object_name,
+                      const String &resource_type,
+                      char *path,
+                      bool external_blockwise_store = false);
+
+    M2MObjectInstance(M2MObject& parent, const lwm2m_parameters_s* static_res);
+
+    // Prevents the use of default constructor.
+    M2MObjectInstance();
+
+    // Prevents the use of assignment operator.
+    M2MObjectInstance& operator=( const M2MObjectInstance& /*other*/ );
+
+    // Prevents the use of copy constructor.
+    M2MObjectInstance( const M2MObjectInstance& /*other*/ );
+
+    /**
+     * Destructor
+     */
+    virtual ~M2MObjectInstance();
+
+public:
+
+    /**
+     * \brief TODO!
+     * \return M2MResource The resource for managing other client operations.
+     */
+    M2MResource* create_static_resource(const lwm2m_parameters_s* static_res,
+                                        M2MResourceInstance::ResourceType type);
+
+    /**
+     * \brief Creates a static resource for a given mbed Client Inteface object. With this, the
+     * client can respond to server's GET methods with the provided value.
+     * \param resource_name The name of the resource.
+     * \param resource_type The type of the resource.
+     * \param value A pointer to the value of the resource.
+     * \param value_length The length of the value in the pointer.
+     * \param multiple_instance A resource can have
+     *        multiple instances, default is false.
+     * \param external_blockwise_store If true CoAP blocks are passed to application through callbacks
+     *        otherwise handled in mbed-client-c.
+     * \return M2MResource The resource for managing other client operations.
+     */
+    M2MResource* create_static_resource(const String &resource_name,
+                                        const String &resource_type,
+                                        M2MResourceInstance::ResourceType type,
+                                        const uint8_t *value,
+                                        const uint8_t value_length,
+                                        bool multiple_instance = false,
+                                        bool external_blockwise_store = false);
+
+    /**
+     * \brief Creates a dynamic resource for a given mbed Client Inteface object. With this,
+     * the client can respond to different queries from the server (GET,PUT etc).
+     * This type of resource is also observable and carries callbacks.
+     * \param resource_name The name of the resource.
+     * \param resource_type The type of the resource.
+     * \param observable Indicates whether the resource is observable or not.
+     * \param multiple_instance The resource can have
+     *        multiple instances, default is false.
+     * \param external_blockwise_store If true CoAP blocks are passed to application through callbacks
+     *        otherwise handled in mbed-client-c.
+     * \return M2MResource The resource for managing other client operations.
+     */
+    M2MResource* create_dynamic_resource(const String &resource_name,
+                                         const String &resource_type,
+                                         M2MResourceInstance::ResourceType type,
+                                         bool observable,
+                                         bool multiple_instance = false,
+                                         bool external_blockwise_store = false);
+
+    /**
+     * \brief TODO!
+     * \return M2MResource The resource for managing other client operations.
+     */
+    M2MResource* create_dynamic_resource(const lwm2m_parameters_s* static_res,
+                                        M2MResourceInstance::ResourceType type,
+                                        bool observable);
+
+    /**
+     * \brief Creates a static resource instance for a given mbed Client Inteface object. With this,
+     * the client can respond to server's GET methods with the provided value.
+     * \param resource_name The name of the resource.
+     * \param resource_type The type of the resource.
+     * \param value A pointer to the value of the resource.
+     * \param value_length The length of the value in pointer.
+     * \param instance_id The instance ID of the resource.
+     * \param external_blockwise_store If true CoAP blocks are passed to application through callbacks
+     *        otherwise handled in mbed-client-c.
+     * \return M2MResourceInstance The resource instance for managing other client operations.
+     */
+    M2MResourceInstance* create_static_resource_instance(const String &resource_name,
+                                                         const String &resource_type,
+                                                         M2MResourceInstance::ResourceType type,
+                                                         const uint8_t *value,
+                                                         const uint8_t value_length,
+                                                         uint16_t instance_id,
+                                                         bool external_blockwise_store = false);
+
+    /**
+     * \brief Creates a dynamic resource instance for a given mbed Client Inteface object. With this,
+     * the client can respond to different queries from the server (GET,PUT etc).
+     * This type of resource is also observable and carries callbacks.
+     * \param resource_name The name of the resource.
+     * \param resource_type The type of the resource.
+     * \param observable Indicates whether the resource is observable or not.
+     * \param instance_id The instance ID of the resource.
+     * \param external_blockwise_store If true CoAP blocks are passed to application through callbacks
+     *        otherwise handled in mbed-client-c.
+     * \return M2MResourceInstance The resource instance for managing other client operations.
+     */
+    M2MResourceInstance* create_dynamic_resource_instance(const String &resource_name,
+                                                          const String &resource_type,
+                                                          M2MResourceInstance::ResourceType type,
+                                                          bool observable,
+                                                          uint16_t instance_id,
+                                                          bool external_blockwise_store = false);
+
+    /**
+     * \brief Removes the resource with the given name.
+     * \param name The name of the resource to be removed.
+     * Note: this will be removed in next version, please use the
+     * remove_resource(const char*) version instead.
+     * \return True if removed, else false.
+     */
+    virtual bool remove_resource(const String &name);
+
+    /**
+     * \brief Removes the resource with the given name.
+     * \param name The name of the resource to be removed.
+     * \return True if removed, else false.
+     */
+    virtual bool remove_resource(const char *name);
+
+    /**
+     * \brief Removes the resource instance with the given name.
+     * \param resource_name The name of the resource instance to be removed.
+     * \param instance_id The instance ID of the instance.
+     * \return True if removed, else false.
+     */
+    virtual bool remove_resource_instance(const String &resource_name,
+                                          uint16_t instance_id);
+
+    /**
+     * \brief Returns the resource with the given name.
+     * \param name The name of the requested resource.
+     * \return Resource reference if found, else NULL.
+     */
+    virtual M2MResource* resource(const String &name) const;
+
+    virtual M2MResource* resource(const char *resource) const;
+
+    /**
+     * \brief Returns a list of M2MResourceBase objects.
+     * \return A list of M2MResourceBase objects.
+     */
+    virtual const M2MResourceList& resources() const;
+
+    /**
+     * \brief Returns the total number of resources with the object.
+     * \return Total number of the resources.
+     */
+    virtual uint16_t resource_count() const;
+
+    /**
+     * \brief Returns the total number of single resource instances.
+     * Note: this will be removed in next version, please use the
+     * resource_count(const char*) version instead.
+     * \param resource The name of the resource.
+     * \return Total number of the resources.
+     */
+    virtual uint16_t resource_count(const String& resource) const;
+
+    /**
+     * \brief Returns the total number of single resource instances.
+     * \param resource The name of the resource.
+     * \return Total number of the resources.
+     */
+    virtual uint16_t resource_count(const char *resource) const;
+
+    /**
+     * \brief Returns the object type.
+     * \return BaseType.
+     */
+    virtual M2MBase::BaseType base_type() const;
+
+    /**
+     * \brief Adds the observation level for the object.
+     * \param observation_level The level of observation.
+     */
+    virtual void add_observation_level(M2MBase::Observation observation_level);
+
+    /**
+     * \brief Removes the observation level from the object.
+     * \param observation_level The level of observation.
+     */
+    virtual void remove_observation_level(M2MBase::Observation observation_level);
+
+    /**
+     * \brief Handles GET request for the registered objects.
+     * \param nsdl The NSDL handler for the CoAP library.
+     * \param received_coap_header The CoAP message received from the server.
+     * \param observation_handler The handler object for sending
+     * observation callbacks.
+     * return sn_coap_hdr_s The message that needs to be sent to the server.
+     */
+    virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl,
+                                              sn_coap_hdr_s *received_coap_header,
+                                              M2MObservationHandler *observation_handler = NULL);
+    /**
+     * \brief Handles PUT request for the registered objects.
+     * \param nsdl The NSDL handler for the CoAP library.
+     * \param received_coap_header The CoAP message received from the server.
+     * \param observation_handler The handler object for sending
+     * observation callbacks.
+     * \param execute_value_updated True will execute the "value_updated" callback.
+     * \return sn_coap_hdr_s The message that needs to be sent to server.
+     */
+    virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl,
+                                              sn_coap_hdr_s *received_coap_header,
+                                              M2MObservationHandler *observation_handler,
+                                              bool &execute_value_updated);
+
+    /**
+     * \brief Handles POST request for the registered objects.
+     * \param nsdl The NSDL handler for the CoAP library.
+     * \param received_coap_header The CoAP message received from the server.
+     * \param observation_handler The handler object for sending
+     * observation callbacks.
+     * \param execute_value_updated True will execute the "value_updated" callback.
+     * \return sn_coap_hdr_s The message that needs to be sent to server.
+     */
+    virtual sn_coap_hdr_s* handle_post_request(nsdl_s *nsdl,
+                                               sn_coap_hdr_s *received_coap_header,
+                                               M2MObservationHandler *observation_handler,
+                                               bool &execute_value_updated,
+                                               sn_nsdl_addr_s *address = NULL);
+
+    inline M2MObject& get_parent_object() const;
+
+    // callback used from M2MResource/M2MResourceInstance
+    virtual void notification_update(M2MBase::Observation observation_level);
+
+private:
+
+    M2MObject      &_parent;
+
+    M2MResourceList     _resource_list; // owned
+
+    friend class Test_M2MObjectInstance;
+    friend class Test_M2MObject;
+    friend class Test_M2MDevice;
+    friend class Test_M2MSecurity;
+    friend class Test_M2MServer;
+    friend class Test_M2MNsdlInterface;
+    friend class Test_M2MFirmware;
+    friend class Test_M2MTLVSerializer;
+    friend class Test_M2MTLVDeserializer;
+    friend class Test_M2MBase;
+    friend class Test_M2MResource;
+    friend class Test_M2MResourceInstance;
+};
+
+inline M2MObject& M2MObjectInstance::get_parent_object() const
+{
+    return _parent;
+}
+
+#endif // M2M_OBJECT_INSTANCE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mobservationhandler.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_OBSERVATION_HANDLER_H
+#define M2M_OBSERVATION_HANDLER_H
+
+//FORWARD DECLARATION
+class M2MBase;
+class M2MResourceInstance;
+
+/*! \file m2mobservationhandler.h
+ * \brief M2MObservationHandler.
+ * An interface for handling observation
+ * callbacks from different objects.
+ *
+ */
+class M2MObservationHandler
+{
+  public:
+
+    /**
+     * \brief The observation callback to be sent to the
+     * server due to a change in a parameter under observation.
+     * \param object The observed object whose information needs to be sent.
+     * \param obs_number The observation number.
+     * \param changed_instance_ids A list of changed object instance IDs.
+     * \param send_object Indicates whether the whole object will be sent or not.
+     */
+    virtual void observation_to_be_sent(M2MBase *object,
+                                        uint16_t obs_number,
+                                        m2m::Vector<uint16_t> changed_instance_ids,
+                                        bool send_object = false) = 0;
+
+    /**
+     * \brief A callback for removing an NSDL resource from the data structures.
+     * \param The M2MBase derived observed object whose information
+     * needs to be removed.
+     */
+    virtual void resource_to_be_deleted(M2MBase *base) = 0;
+
+    /**
+     * \brief A callback indicating that the value of the resource object is updated by server.
+     * \param base The object whose value is updated.
+     * \param object_name The name of the updated resource, default is empty.
+     */
+    virtual void value_updated(M2MBase *base, const String &object_name = "") = 0;
+
+    /**
+     * \brief A callback for removing an object from the list.
+     * \param object The M2MObject to be removed.
+     */
+    virtual void remove_object(M2MBase *object) = 0;
+
+    /**
+     * \brief A delayed response callback to be sent to the
+     * server due to a changed response.
+     * \param base The resource sending the response.
+     */
+    virtual void send_delayed_response(M2MBase *base) = 0;
+
+};
+
+
+#endif // M2M_OBSERVATION_HANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mreportobserver.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2MREPORTOBSERVER_H
+#define M2MREPORTOBSERVER_H
+
+#include <inttypes.h>
+#include <mbed-client/m2mvector.h>
+
+/*! \file m2mreportobserver.h
+ * \brief M2MReportObserver.
+ * An interface for inviting the base class
+ * to send a report to the server.
+ *
+ */
+class M2MReportObserver
+{
+  public:
+
+    /**
+     * \brief An observation callback to be sent to the
+     * server due to a change in the observed parameter.
+     * \param changed_instance_ids A list of changed object instance IDs.
+     * \param send_object Indicates whether the whole object will be sent or not.
+     */
+    virtual void observation_to_be_sent(m2m::Vector<uint16_t> changed_instance_ids,
+                                        bool send_object = false) = 0;
+
+};
+
+#endif // M2MREPORTOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mresource.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,341 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_RESOURCE_H
+#define M2M_RESOURCE_H
+
+#include "mbed-client/m2mvector.h"
+#include "mbed-client/m2mresourceinstance.h"
+
+//FORWARD DECLARATION
+class M2MObjectInstance;
+typedef Vector<M2MResourceInstance *> M2MResourceInstanceList;
+
+class M2MResourceCallback {
+public:
+    virtual void notification_update() = 0;
+};
+
+/*! \file m2mresource.h
+ *  \brief M2MResource.
+ *  This class is the base class for mbed Client Resources. All defined
+ *  LWM2M object models can be created using it. This class will also hold all resources
+ *  instances associated with the given object.
+ */
+
+class M2MResource : public M2MResourceInstance, M2MResourceCallback {
+
+    friend class M2MObjectInstance;
+
+public:
+    class M2MExecuteParameter;
+
+private: // Constructor and destructor are private,
+         // which means that these objects can be created or
+         // deleted only through a function provided by the M2MObjectInstance.
+
+    M2MResource(M2MObjectInstance &_parent,
+                 const lwm2m_parameters_s* s,
+                 M2MResourceInstance::ResourceType type,
+                 const uint16_t object_instance_id);
+    /**
+     * \brief Constructor
+     * \param resource_name The resource name of the object.
+     * \param resource_type The resource type of the object.
+     * \param type The resource data type of the object.
+     * \param value The value pointer of the object.
+     * \param value_length The length of the value pointer.
+     * \param path Full path of the resource, eg. 1/2/3. Ownership of the memory is transferred.
+     * \param object_instance_id The instance ID of the object where the resource exists.
+     * \param object_name The name of the object where the resource exists.
+     * \param multiple_instance True if the resource supports instances.
+     * \param external_blockwise_store If true CoAP blocks are passed to application through callbacks
+     *        otherwise handled in mbed-client-c.
+     */
+    M2MResource(M2MObjectInstance &_parent,
+                const String &resource_name,
+                const String &resource_type,
+                M2MResourceInstance::ResourceType type,
+                const uint8_t *value,
+                const uint8_t value_length,
+                char *path,
+                const uint16_t object_instance_id = 0,
+                bool multiple_instance = false,
+                bool external_blockwise_store = false);
+
+    /**
+     * \brief Constructor
+     * \param resource_name The resource name of the object.
+     * \param resource_type The resource type of the object.
+     * \param type The resource data type of the object.
+     * \param observable Indicates whether the resource is observable or not.
+     * \param path Full path of the resource, eg. 1/2/3. Ownership of the memory is transferred.
+     * \param object_instance_id The ID of the object instance where the resource exists.
+     * \param object_name The name of the object where the resource exists.
+     * \param multiple_instance True if the resource supports instances.
+     * \param external_blockwise_store If true CoAP blocks are passed to application through callbacks
+     *        otherwise handled in mbed-client-c.
+     */
+    M2MResource(M2MObjectInstance &_parent,
+                const String &resource_name,
+                const String &resource_type,
+                M2MResourceInstance::ResourceType type,
+                bool observable,
+                char *path,
+                const uint16_t object_instance_id = 0,
+                bool multiple_instance = false,
+                bool external_blockwise_store = false);
+
+    // Prevents the use of a default constructor.
+    M2MResource();
+
+    // Prevents the use of an assignment operator.
+    M2MResource& operator=( const M2MResource& /*other*/ );
+
+    // Prevents the use of a copy constructor
+    M2MResource( const M2MResource& /*other*/ );
+
+    /**
+     * Destructor
+     */
+    virtual ~M2MResource();
+
+public:
+
+    /**
+     * \brief Adds resource instances to a M2MResource.
+     * \param resource_instance The resource instance to be added.
+     */
+    void add_resource_instance(M2MResourceInstance *resource_instance);
+
+    /**
+     * \brief Returns whether the resource has multiple
+     * resource instances or not.
+     * \return True if the resource base has multiple instances,
+     * else false.
+     */
+    bool supports_multiple_instances() const;
+
+    /**
+     * \brief Sets whether the resource should send a delayed response for a POST request.
+     * \param delayed_response A boolean value to set the delayed response.
+     */
+    void set_delayed_response(bool delayed_response);
+
+    /**
+     * \brief A trigger to send the delayed response for the POST request.
+     * The delayed_response flag must be set before receiving the POST request
+     * and the value of the resource must be updated before calling this function.
+     * \return True if a response is sent, else false.
+     */
+    bool send_delayed_post_response();
+
+    /**
+     * \brief Provides the value of the given token.
+     * \param value[OUT] A pointer to the token value.
+     * \param value_length[OUT] The length of the token pointer.
+     */
+    void get_delayed_token(uint8_t *&token, uint8_t &token_length);
+
+    /**
+     * \brief Removes a resource with a given name.
+     * \param name The name of the resource to be removed.
+     * \param instance_id The instance ID of the resource to be removed, default is 0.
+     * \return True if removed, else false.
+     */
+    virtual bool remove_resource_instance(uint16_t instance_id = 0);
+
+    /**
+     * \brief Returns a resource instance with a given name.
+     * \param instance_id The instance ID of the requested resource, default is 0
+     * \return M2MResourceInstance object if found, else NULL.
+     */
+    virtual M2MResourceInstance* resource_instance(uint16_t instance_id = 0) const;
+
+    /**
+     * \brief Returns a list of resources.
+     * \return A list of resources.
+     */
+    virtual const M2MResourceInstanceList& resource_instances() const;
+
+    /**
+     * \brief Returns the total number of resources.
+     * \return The total number of resources.
+     */
+    virtual uint16_t resource_instance_count() const;
+
+    /**
+     * \brief Returns the value set for delayed response.
+     * \return The value for delayed response.
+     */
+    bool delayed_response() const;
+
+    /**
+     * \brief Parses the received query for a notification
+     * attribute.
+     * \return True if required attributes are present, else false.
+     */
+    virtual bool handle_observation_attribute(const char *query);
+
+    /**
+     * \brief Adds the observation level for the object.
+     * \param observation_level The level of observation.
+     */
+    virtual void add_observation_level(M2MBase::Observation observation_level);
+
+    /**
+     * \brief Removes the observation level from an object.
+     * \param observation_level The level of observation.
+     */
+    virtual void remove_observation_level(M2MBase::Observation observation_level);
+
+    /**
+     * \brief Handles the GET request for registered objects.
+     * \param nsdl An NSDL handler for the CoAP library.
+     * \param received_coap_header The CoAP message received from the server.
+     * \param observation_handler A handler object for sending
+     * observation callbacks.
+     * \return sn_coap_hdr_s The message that needs to be sent to the server.
+     */
+    virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl,
+                                              sn_coap_hdr_s *received_coap_header,
+                                              M2MObservationHandler *observation_handler = NULL);
+    /**
+     * \brief Handles the PUT request for registered objects.
+     * \param nsdl An NSDL handler for the CoAP library.
+     * \param received_coap_header The CoAP message received from the server.
+     * \param observation_handler A handler object for sending
+     * observation callbacks.
+     * \param execute_value_updated True executes the "value_updated" callback.
+     * \return sn_coap_hdr_s The message that needs to be sent to the server.
+     */
+    virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl,
+                                              sn_coap_hdr_s *received_coap_header,
+                                              M2MObservationHandler *observation_handler,
+                                              bool &execute_value_updated);
+    /**
+     * \brief Handles the POST request for registered objects.
+     * \param nsdl An NSDL handler for the CoAP library.
+     * \param received_coap_header The CoAP message received from the server.
+     * \param observation_handler A handler object for sending
+     * observation callbacks.
+     * \param execute_value_updated True executes the "value_updated" callback.
+     * \return sn_coap_hdr_s The message that needs to be sent to the server.
+     */
+    virtual sn_coap_hdr_s* handle_post_request(nsdl_s *nsdl,
+                                               sn_coap_hdr_s *received_coap_header,
+                                               M2MObservationHandler *observation_handler,
+                                               bool &execute_value_updated,
+                                               sn_nsdl_addr_s *address = NULL);
+
+    M2MObjectInstance& get_parent_object_instance() const;
+
+    /**
+     * \brief Returns the name of the object where the resource exists.
+     * \return Object name.
+    */
+    virtual const char* object_name() const;
+
+protected:
+    virtual void notification_update();
+
+
+private:
+    M2MObjectInstance &_parent;
+
+    M2MResourceInstanceList     _resource_instance_list; // owned
+    uint8_t                     *_delayed_token;
+    uint8_t                     _delayed_token_len;
+    bool                        _has_multiple_instances;
+    bool                        _delayed_response;
+
+friend class Test_M2MResource;
+friend class Test_M2MObjectInstance;
+friend class Test_M2MObject;
+friend class Test_M2MDevice;
+friend class Test_M2MSecurity;
+friend class Test_M2MServer;
+friend class Test_M2MNsdlInterface;
+friend class Test_M2MFirmware;
+friend class Test_M2MTLVSerializer;
+friend class Test_M2MTLVDeserializer;
+friend class Test_M2MBase;
+friend class Test_M2MResourceInstance;
+};
+
+/**
+ *  \brief M2MResource::M2MExecuteParameter.
+ *  This class handles the "Execute" operation arguments.
+ */
+class M2MResource::M2MExecuteParameter {
+
+private:
+
+    /**
+     * \brief Constructor
+     */
+    M2MExecuteParameter();
+
+    /**
+     * Destructor
+     */
+   ~M2MExecuteParameter();
+
+public:
+
+    /**
+     * \brief Returns the value of an argument.
+     * \return uint8_t * The argument value.
+     */
+    uint8_t *get_argument_value() const;
+
+    /**
+     * \brief Returns the length of the value argument.
+     * \return uint8_t The argument value length.
+     */
+    uint16_t get_argument_value_length() const;
+
+    /**
+     * \brief Returns the name of the object where the resource exists.
+     * \return Object name.
+    */
+    const String& get_argument_object_name() const;
+
+    /**
+     * \brief Returns the resource name.
+     * \return Resource name.
+    */
+    const String& get_argument_resource_name() const;
+
+    /**
+     * \brief Returns the instance ID of the object where the resource exists.
+     * \return Object instance ID.
+    */
+    uint16_t get_argument_object_instance_id() const;
+
+private:
+
+    String      _object_name;
+    String      _resource_name;
+    uint8_t *   _value;
+    uint16_t    _value_length;
+    uint16_t    _object_instance_id;
+
+
+friend class Test_M2MResource;
+friend class M2MResource;
+};
+
+#endif // M2M_RESOURCE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mresourceinstance.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,351 @@
+    /*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_RESOURCE_INSTANCE_H
+#define M2M_RESOURCE_INSTANCE_H
+
+#include "mbed-client/m2mbase.h"
+#include "mbed-client/functionpointer.h"
+
+
+/*! \file m2mresourceinstance.h
+ *  \brief M2MResourceInstance.
+ *  This class is the base class for mbed Client Resources. All defined
+ *  LWM2M resource models can be created based on it.
+ */
+class M2MBlockMessage;
+
+typedef FP1<void,void*> execute_callback;
+typedef void(*execute_callback_2) (void *arguments);
+
+typedef FP0<void> notification_sent_callback;
+typedef void(*notification_sent_callback_2) (void);
+
+typedef FP1<void, M2MBlockMessage *> incoming_block_message_callback;
+typedef FP3<void, const String &, uint8_t *&, uint32_t &> outgoing_block_message_callback;
+
+class M2MResource;
+class M2MResourceCallback;
+
+class M2MResourceInstance : public M2MBase {
+
+friend class M2MObjectInstance;
+friend class M2MResource;
+
+public:
+
+    /**
+     * An enum defining a resource type that can be
+     * supported by a given resource.
+    */
+    typedef enum {
+        STRING,
+        INTEGER,
+        FLOAT,
+        BOOLEAN,
+        OPAQUE,
+        TIME,
+        OBJLINK
+    }ResourceType;
+
+
+private: // Constructor and destructor are private
+         // which means that these objects can be created or
+         // deleted only through a function provided by the M2MObjectInstance.
+
+    M2MResourceInstance(M2MResource &parent,
+                        const lwm2m_parameters_s* s,
+                        M2MResourceInstance::ResourceType type,
+                        const uint16_t object_instance_id);
+    /**
+     * \brief A constructor for creating a resource.
+     * \param resource_name The name of the resource.
+     * \param resource_type The type of the resource.
+     * \param type The resource data type of the object.
+     * \param object_instance_id Object instance id where resource exists.
+     * \param object_name Object name where resource exists.
+     * \param path Path of the object like 3/0/1
+     * \param external_blockwise_store If true CoAP blocks are passed to application through callbacks
+     *        otherwise handled in mbed-client-c.
+     */
+    M2MResourceInstance(M2MResource &parent,
+                        const String &resource_name,
+                        const String &resource_type,
+                        M2MResourceInstance::ResourceType type,
+                        const uint16_t object_instance_id,
+                        char* path,
+                        bool external_blockwise_store);
+
+    /**
+     * \brief A Constructor for creating a resource.
+     * \param resource_name The name of the resource.
+     * \param resource_type The type of the resource.
+     * \param type The resource data type of the object.
+     * \param value The value pointer of the object.
+     * \param value_length The length of the value pointer.
+     * \param value_length The length of the value pointer.
+     * \param object_instance_id Object instance id where resource exists.
+     * \param object_name Object name where resource exists.
+     * \param path Path of the object like 3/0/1
+     * \param external_blockwise_store If true CoAP blocks are passed to application through callbacks
+     *        otherwise handled in mbed-client-c.
+     */
+    M2MResourceInstance(M2MResource &parent,
+                        const String &resource_name,
+                        const String &resource_type,
+                        M2MResourceInstance::ResourceType type,
+                        const uint8_t *value,
+                        const uint8_t value_length,
+                        const uint16_t object_instance_id,
+                        char* path,
+                        bool external_blockwise_store);
+
+    // Prevents the use of default constructor.
+    M2MResourceInstance();
+
+    // Prevents the use of assignment operator.
+    M2MResourceInstance& operator=( const M2MResourceInstance& /*other*/ );
+
+    // Prevents the use of copy constructor
+    M2MResourceInstance( const M2MResourceInstance& /*other*/ );
+
+    /**
+     * Destructor
+     */
+    virtual ~M2MResourceInstance();
+
+public:
+
+    /**
+     * \brief Returns the object type.
+     * \return BaseType.
+     */
+    virtual M2MBase::BaseType base_type() const;
+
+    /**
+     * \brief Returns the resource data type.
+     * \return ResourceType.
+     */
+    virtual M2MResourceInstance::ResourceType resource_instance_type() const;
+
+    /**
+     * \brief Parses the received query for a notification
+     * attribute.
+     * \return True if required attributes are present, else false.
+     */
+    virtual bool handle_observation_attribute(const char *query);
+
+    /**
+     * \brief Sets the function that should be executed when this
+     * resource receives a POST command.
+     * \param callback The function pointer that needs to be executed.
+     */
+    virtual void set_execute_function(execute_callback callback);
+
+    /**
+     * \brief Sets the function that should be executed when this
+     * resource receives a POST command.
+     * \param callback The function pointer that needs to be executed.
+     */
+    virtual void set_execute_function(execute_callback_2 callback);
+
+    /**
+     * \brief Sets a value of a given resource.
+     * \param value A pointer to the value to be set on the resource.
+     * \param value_length The length of the value pointer.
+     * \return True if successfully set, else false.
+     */
+    virtual bool set_value(const uint8_t *value, const uint32_t value_length);
+
+    /**
+     * \brief Sets a value of a given resource.
+     * \param value, A new value formatted as a string
+     * and set on the resource.
+     * \return True if successfully set, else false.
+     */
+    virtual bool set_value(int64_t value);
+
+    /**
+     * \brief Clears the value of a given resource.
+     */
+    virtual void clear_value();
+
+    /**
+     * \brief Executes the function that is set in "set_execute_function".
+     * \param arguments The arguments that are passed to be executed.
+     */
+    void execute(void *arguments);
+
+    /**
+     * \brief Provides the value of the given resource.
+     * \param value[OUT] A pointer to the resource value.
+     * \param value_length[OUT] The length of the value pointer.
+     */
+    virtual void get_value(uint8_t *&value, uint32_t &value_length);
+
+    /**
+     * \brief Converts a value to integer and returns it. Note: Conversion
+     * errors are not detected.
+     */
+    int get_value_int();
+
+    /**
+     * Get the value as a string object. No encoding/charset conversions
+     * are done for the value, just a raw copy.
+     */
+    String get_value_string() const;
+
+    /**
+     * \brief Returns the value pointer of the object.
+     * \return The value pointer of the object.
+    */
+    uint8_t* value() const;
+
+    /**
+     * \brief Returns the length of the value pointer.
+     * \return The length of the value pointer.
+    */
+    uint32_t value_length() const;
+
+    /**
+     * \brief Handles the GET request for the registered objects.
+     * \param nsdl An NSDL handler for the CoAP library.
+     * \param received_coap_header The CoAP message received from the server.
+     * \param observation_handler A handler object for sending
+     * observation callbacks.
+     * \return sn_coap_hdr_s The message that needs to be sent to the server.
+     */
+    virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl,
+                                              sn_coap_hdr_s *received_coap_header,
+                                              M2MObservationHandler *observation_handler = NULL);
+    /**
+     * \brief Handles the PUT request for the registered objects.
+     * \param nsdl An NSDL handler for the CoAP library.
+     * \param received_coap_header The CoAP message received from the server.
+     * \param observation_handler A handler object for sending
+     * observation callbacks.
+     * \param execute_value_updated True will execute the "value_updated" callback.
+     * \return sn_coap_hdr_s The message that needs to be sent to the server.
+     */
+    virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl,
+                                              sn_coap_hdr_s *received_coap_header,
+                                              M2MObservationHandler *observation_handler,
+                                              bool &execute_value_updated);
+
+    /**
+     * \brief Returns the instance ID of the object where the resource exists.
+     * \return Object instance ID.
+    */
+    uint16_t object_instance_id() const;
+
+    /**
+     * \brief Returns the name of the object where the resource exists.
+     * \return Object name.
+    */
+    virtual const char* object_name() const;
+
+    /**
+     * @brief Sets the function that is executed when this
+     * object receives a block-wise message.
+     * @param callback The function pointer that is called.
+     */
+    virtual void set_incoming_block_message_callback(incoming_block_message_callback callback);
+
+    /**
+     * @brief Sets the function that is executed when this
+     * object receives a GET request.
+     * This is called if resource values are stored on the application side.
+     * NOTE! Due to a limitation in the mbed-client-c library, a GET request can only contain data size up to 65KB.
+     * @param callback The function pointer that is called.
+     */
+    virtual void set_outgoing_block_message_callback(outgoing_block_message_callback callback);
+
+    /**
+     * \brief Returns the block message object.
+     * \return Block message.
+    */
+    virtual M2MBlockMessage* block_message() const;
+
+    /**
+     * @brief Sets the function that is executed when this object receives
+     * response(Empty ACK) for notification message.
+     * @param callback The function pointer that is called.
+     */
+    void set_notification_sent_callback(notification_sent_callback callback);
+
+    /**
+     * @brief Sets the function that is executed when this object receives
+     * response(Empty ACK) for notification message.
+     * @param callback The function pointer that is called.
+     */
+    void set_notification_sent_callback(notification_sent_callback_2 callback);
+
+    /**
+     * \brief Executes the function that is set in "set_notification_sent_callback".
+     */
+    void notification_sent();
+
+    M2MResource& get_parent_resource() const;
+
+protected:
+
+    /**
+     * \brief Set an observer for sending the notification update.
+     * \param resource The callback handle.
+     */
+    void set_resource_observer(M2MResourceCallback *resource);
+
+private:
+
+    void report();
+
+    bool is_value_changed(const uint8_t* value, const uint32_t value_len);
+
+private:
+
+    // XXX: since the M2MResource is inherited from this class, the resource actually has back
+    // pointer to itself. If this inheritance was broken, we could save some memory.
+    M2MResource &_parent_resource;
+
+    uint8_t                                 *_value;
+    uint32_t                                _value_length;
+    M2MBlockMessage                         *_block_message_data;
+    execute_callback                        *_execute_callback;
+    M2MResourceCallback                     *_resource_callback; // Not owned
+    FP1<void, void*>                        *_execute_function_pointer;
+    FP0<void>                               *_notification_sent_function_pointer;
+
+    // Note: these two callbacks should be moved behind ifdef, as they are not needed by all/most apps.
+    incoming_block_message_callback         *_incoming_block_message_cb;
+    outgoing_block_message_callback         *_outgoing_block_message_cb;
+
+    notification_sent_callback              *_notification_sent_callback;
+    uint16_t                                _object_instance_id;
+    ResourceType                            _resource_type;
+
+    friend class Test_M2MResourceInstance;
+    friend class Test_M2MResource;
+    friend class Test_M2MObjectInstance;
+    friend class Test_M2MObject;
+    friend class Test_M2MDevice;
+    friend class Test_M2MSecurity;
+    friend class Test_M2MServer;
+    friend class Test_M2MNsdlInterface;
+    friend class Test_M2MFirmware;
+    friend class Test_M2MTLVSerializer;
+    friend class Test_M2MTLVDeserializer;
+};
+
+#endif // M2M_RESOURCE_INSTANCE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2msecurity.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,233 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_SECURITY_H
+#define M2M_SECURITY_H
+
+#include "mbed-client/m2mobject.h"
+
+// FORWARD DECLARATION
+class M2MResource;
+
+/*! \file m2msecurity.h
+ *  \brief M2MSecurity.
+ *  This class represents an interface for the Security Object model of the LWM2M framework.
+ *  It handles the security object instances and all corresponding
+ *  resources.
+ */
+
+class  M2MSecurity : public M2MObject {
+
+friend class M2MInterfaceFactory;
+friend class M2MNsdlInterface;
+
+public:
+
+    /**
+     * \brief An enum defining all resources associated with a
+     * Security Object in the LWM2M framework.
+     */
+    typedef enum {
+        M2MServerUri,
+        BootstrapServer,
+        SecurityMode,
+        PublicKey,
+        ServerPublicKey,
+        Secretkey,
+        SMSSecurityMode,
+        SMSBindingKey,
+        SMSBindingSecretKey,
+        M2MServerSMSNumber,
+        ShortServerID,
+        ClientHoldOffTime
+    }SecurityResource;
+
+    /**
+     * \brief An enum defining the type of the security attribute
+     * used by the Security Object.
+     */
+    typedef enum {
+        SecurityNotSet = -1,
+        Psk = 0,
+        Certificate = 2,
+        NoSecurity = 3
+    } SecurityModeType;
+
+    /**
+     * \brief An enum defining an interface operation that can be
+     * handled by the Security Object.
+     */
+    typedef enum {
+        Bootstrap = 0x0,
+        M2MServer = 0x1
+    } ServerType;
+
+private:
+
+    /**
+     * \brief Constructor
+     * \param server_type The type of the security object created. Either bootstrap or LWM2M server.
+     */
+    M2MSecurity(ServerType server_type);
+
+    // Prevents the use of default constructor.
+    M2MSecurity();
+
+    // Prevents the use of assignment operator.
+    M2MSecurity& operator=( const M2MSecurity& /*other*/ );
+
+    // Prevents the use of copy constructor
+    M2MSecurity( const M2MSecurity& /*other*/ );
+
+public:
+
+    /**
+     * \brief Destructor
+     */
+    virtual ~M2MSecurity();
+
+    /**
+     * \brief Creates a new resource for a given resource enum.
+     * \param rescource With this function, the following resources can be created:
+     * ' BootstrapServer', 'SecurityMode', 'SMSSecurityMode',
+     * 'M2MServerSMSNumber', 'ShortServerID', 'ClientHoldOffTime'.
+     * \param value The value to be set on the resource, in integer format.
+     * \return M2MResource if created successfully, else NULL.
+     */
+    M2MResource* create_resource(SecurityResource rescource, uint32_t value);
+
+    /**
+     * \brief Deletes a resource with a given resource enum.
+     * Mandatory resources cannot be deleted.
+     * \param resource The resource to be deleted.
+     * \return True if deleted, else false.
+     */
+    bool delete_resource(SecurityResource rescource);
+
+    /**
+     * \brief Sets the value of a given resource enum.
+     * \param resource With this function, a value can be set for the following resources:
+     * 'M2MServerUri', 'SMSBindingKey', 'SMSBindingSecretKey'.
+     * \param value The value to be set on the resource, in string format.
+     * \return True if successfully set, else false.
+     */
+    bool set_resource_value(SecurityResource resource,
+                            const String &value);
+
+    /**
+     * \brief Sets the value of a given resource enum.
+     * \param resource With this function, a value can be set for the following resourecs:
+     * 'BootstrapServer', 'SecurityMode', 'SMSSecurityMode',
+     * 'M2MServerSMSNumber', 'ShortServerID', 'ClientHoldOffTime'.
+     * \param value The value to be set on the resource, in integer format.
+     * \return True if successfully set, else false.
+     */
+    bool set_resource_value(SecurityResource resource,
+                            uint32_t value);
+
+    /**
+     * \brief Sets the value of a given resource enum.
+     * \param resource With this function, a value can be set for the follwing resources:
+     * 'PublicKey', 'ServerPublicKey', 'Secretkey'.
+     * \param value The value to be set on the resource, in uint8_t format.
+     * \param size The size of the buffer value to be set on the resource.
+     * \return True if successfully set, else false.
+     */
+    bool set_resource_value(SecurityResource resource,
+                            const uint8_t *value,
+                            const uint16_t length);
+
+    /**
+     * \brief Returns the value of a given resource enum, in string format.
+     * \param resource With this function, the following resources can return a value:
+     * 'M2MServerUri','SMSBindingKey', 'SMSBindingSecretKey'.
+     * \return The value associated with the resource. If the resource is not valid an empty string is returned.
+     */
+    String resource_value_string(SecurityResource resource) const;
+
+    /**
+     * \brief Populates the data buffer and returns the size of the buffer.
+     * \param resource With this function, the following resources can return a value:
+     * 'PublicKey', 'ServerPublicKey', 'Secretkey'.
+     * \param [OUT]data A copy of the data buffer that contains the value. The caller
+     * is responsible for freeing this buffer.
+     * \return The size of the populated buffer.
+     */
+    uint32_t resource_value_buffer(SecurityResource resource,
+                                   uint8_t *&data) const;
+
+    /**
+     * \brief Returns a pointer to the value and size of the buffer.
+     * \param resource With this function, the following resources can return a value:
+     * 'PublicKey', 'ServerPublicKey', 'Secretkey'.
+     * \param [OUT]data A pointer to the data buffer that contains the value.
+     * \return The size of the populated buffer.
+     */
+    uint32_t resource_value_buffer(SecurityResource resource,
+                                   const uint8_t *&data) const;
+
+    /**
+     * \brief Returns the value of a given resource name, in integer format.
+     * \param resource With this function, the following resources can return a value:
+     * 'BootstrapServer', 'SecurityMode', 'SMSSecurityMode',
+     * 'M2MServerSMSNumber', 'ShortServerID', 'ClientHoldOffTime'.
+     * \return The value associated with the resource. If the resource is not valid 0 is returned.
+     */
+    uint32_t resource_value_int(SecurityResource resource) const;
+
+
+    /**
+     * \brief Returns whether a resource instance with a given resource enum exists or not
+     * \param resource Resource enum.
+     * \return True if at least one instance exists, else false.
+     */
+    bool is_resource_present(SecurityResource resource)const;
+
+    /**
+     * \brief Returns the total number of resources for a security object.
+     * \return The total number of resources.
+     */
+    uint16_t total_resource_count()const;
+
+    /**
+     * \brief Returns the type of the Security Object. It can be either
+     * Bootstrap or M2MServer.
+     * \return ServerType The type of the Security Object.
+     */
+    ServerType server_type() const;
+
+private:
+
+    M2MResource* get_resource(SecurityResource resource) const;
+    void clear_resources();
+
+private:
+
+    M2MObjectInstance*    _server_instance;
+    ServerType            _server_type;
+
+    friend class Test_M2MSecurity;
+    friend class Test_M2MInterfaceImpl;
+    friend class Test_M2MConnectionSecurityImpl;
+    friend class Test_M2MConnectionHandlerPimpl_linux;
+    friend class Test_M2MConnectionHandlerPimpl_mbed;
+    friend class Test_M2MConnectionSecurityPimpl;
+    friend class Test_M2MNsdlInterface;
+    friend class Test_M2MConnectionHandlerPimpl_classic;
+};
+
+#endif // M2M_SECURITY_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mserver.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_SERVER_H
+#define M2M_SERVER_H
+
+#include "mbed-client/m2mobject.h"
+
+// FORWARD DECLARATION
+class M2MResource;
+
+/*! \file m2mserver.h
+ *  \brief M2MServer.
+ *  This class represents an interface for the Server Object model of the LWM2M framework.
+ *  It handles the server object and all its corresponding
+ *  resources.
+ */
+
+class M2MServer : public M2MObject
+{
+
+friend class M2MInterfaceFactory;
+friend class M2MNsdlInterface;
+
+public:
+
+    /**
+     * \brief Am enum defining all resources associated with
+     * a Server Object in the LWM2M framework.
+     */
+    typedef enum {
+        ShortServerID,
+        Lifetime,
+        DefaultMinPeriod,
+        DefaultMaxPeriod,
+        Disable,
+        DisableTimeout,
+        NotificationStorage,
+        Binding,
+        RegistrationUpdate
+    }ServerResource;
+
+private:
+
+    /**
+     * \brief Constructor
+     */
+    M2MServer();
+
+
+    // Prevents the use of assignment operator.
+    M2MServer& operator=( const M2MServer& /*other*/ );
+
+    // Prevents the use of copy constructor
+    M2MServer( const M2MServer& /*other*/ );
+
+public:
+
+    /**
+     * \brief Destructor
+     */
+    virtual ~M2MServer();
+
+    /**
+     * \brief Creates a new resource for a given resource enum.
+     * \param resource With this function, a value can be set to the following resources:
+     *  'ShortServerID','Lifetime','DefaultMinPeriod','DefaultMaxPeriod','DisableTimeout',
+     *  'NotificationStorage'.
+     * \param value The value to be set on the resource, in integer format.
+     * \return M2MResource if created successfully, else NULL.
+     */
+    M2MResource* create_resource(ServerResource resource, uint32_t value);
+
+    /**
+     * \brief Creates a new resource for a given resource enum.
+     * \param resource With this function, the following resources can be created:
+     * 'Disable', 'RegistrationUpdate'
+     * \return M2MResource if created successfully, else NULL.
+     */
+    M2MResource* create_resource(ServerResource resource);
+
+    /**
+     * \brief Deletes the resource with the given resource enum.
+     * Mandatory resources cannot be deleted.
+     * \param resource The name of the resource to be deleted.
+     * \return True if deleted, else false.
+     */
+    bool delete_resource(ServerResource rescource);
+
+    /**
+     * \brief Sets the value of a given resource enum.
+     * \param resource With this function, a value can be set on the following resources: 
+     * 'Binding'.
+     * \param value The value to be set on the resource, in string format.
+     * \return True if successfully set, else false.
+     */
+    bool set_resource_value(ServerResource resource,
+                            const String &value);
+
+    /**
+     * \brief Sets the value of a given resource enum.
+     * \param resource With this function, a value can be set to the following resources:
+     *  'ShortServerID','Lifetime','DefaultMinPeriod','DefaultMaxPeriod','DisableTimeout',
+     *  'NotificationStorage'.
+     * \param value The value to be set on the resource, in integer format.
+     * \return True if successfully set, else false.
+     */
+    bool set_resource_value(ServerResource resource,
+                            uint32_t value);
+    /**
+     * \brief Returns the value of the given resource enum, in string format.
+     * \param resource With this function, the following resources can return a value:
+     * 'Binding'.
+     * \return The value associated with the resource. If the resource is not valid an empty string is returned.
+     */
+    String resource_value_string(ServerResource resource) const;
+
+    /**
+     * \brief Returns the value of a given resource name, in integer format.
+     * \param resource With this function, the following resources can return a value:
+     *  'ShortServerID','Lifetime','DefaultMinPeriod','DefaultMaxPeriod','DisableTimeout',
+     *  'NotificationStorage'
+     * \return The value associated with the resource. If the resource is not valid -1 is returned.
+     */
+    uint32_t resource_value_int(ServerResource resource) const;
+
+    /**
+     * \brief Returns whether the resource instance with the given resource enum exists or not.
+     * \param resource Resource enum.
+     * \return True if at least one instance exists, else false.
+     */
+    bool is_resource_present(ServerResource resource)const;
+
+    /**
+     * \brief Returns the total number of resources for the server object.
+     * \return The total number of resources.
+     */
+    uint16_t total_resource_count()const;
+
+private:
+
+    M2MResource* get_resource(ServerResource res) const;
+
+
+private:
+
+    M2MObjectInstance*    _server_instance;
+
+    friend class Test_M2MServer;
+    friend class Test_M2MNsdlInterface;
+};
+
+#endif // M2M_SERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mstring.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_STRING_H
+#define M2M_STRING_H
+
+#include <stddef.h> // size_t
+#include <stdint.h>
+
+class Test_M2MString;
+
+namespace m2m
+{
+
+/*! \file m2mstring.h 
+* \brief A simple C++ string class, used as replacement for std::string.
+   */
+  class String
+  {
+    char* p;           ///< The data.
+    size_t allocated_;  ///< The allocated memory size (including trailing NULL).
+    size_t size_;       ///< The currently used memory size (excluding trailing NULL).
+
+  public:
+    typedef size_t size_type;
+    static const size_type npos;
+
+    String();
+    ~String();
+    String(const String&);
+    String(const char*);
+    String(const char*, size_t);
+
+    String& operator=(const char*);
+    String& operator=(const String&);
+
+    String& operator+=(const String&);
+    String& operator+=(const char*);
+    String& operator+=(char);
+    void push_back(char);
+
+    bool operator==(const char*) const;
+    bool operator==(const String&) const;
+
+    void clear();       // Set the string to empty (memory remains reserved).
+
+    size_type size()   const   { return size_; }   ///< size without terminating NULL
+    size_type length() const   { return size_; }   ///< as size()
+
+    size_type capacity() const { return allocated_-1; }
+
+    bool empty() const    { return size_ == 0; }
+
+    const char* c_str() const { return p; } ///< raw data
+
+    /** Reserve internal string memory so that n characters can be put into the
+        string (plus 1 for the NULL char). If there is already enough memory,
+        nothing happens, if not, the memory is realloated to exactly this
+        amount.
+        */
+    void reserve( size_type n);
+
+    /** Resize string. If n is less than the current size, the string is truncated.
+        If n is larger, the memory is reallocated to exactly this amount, and
+        the additional characters are NULL characters.
+        */
+    void resize( size_type n);
+
+    /** Resize string. If n is less than the current size, the string is truncated.
+        If n is larger, the memory is reallocated to exactly this amount, and
+        the additional characters are c characters.
+        */
+    void resize( size_type n, char c);
+
+    /// swap contents
+    void swap( String& );
+
+    String substr(const size_type pos, size_type length) const;
+
+    // unchecked access:
+    char& operator[](const size_type i)       { return p[i]; }
+    char operator[](const size_type i) const { return p[i]; }
+    // checked access:
+    char at(const size_type i) const;
+
+    /// erase len characters at position pos
+    String& erase(size_type pos, size_type len);
+    /// Append n characters of a string
+    String& append(const char* str, size_type n);
+
+    // Append n characters of a non-zero-terminated string
+    // (in contrast with other append(), which performs strlen() for the given string).
+    String& append_raw(const char*, size_type);
+
+    // convert int to ascii and append it to end of string
+    void append_int(int);
+
+    int compare( size_type pos, size_type len, const String& str ) const;
+    int compare( size_type pos, size_type len, const char*   str ) const;
+
+    int find_last_of(char c) const;
+
+    static uint8_t* convert_integer_to_array(int64_t value, uint8_t &size, uint8_t *array = NULL, uint32_t array_size = 0);
+    static int64_t convert_array_to_integer(uint8_t *value, uint32_t size);
+
+  private:
+    // reallocate the internal memory
+    void new_realloc( size_type n);
+    char* strdup(const char* other);
+
+    friend class ::Test_M2MString;
+
+  };
+  // class
+
+  bool operator<(const String&, const String&);
+
+  void reverse(char s[], uint32_t length);
+
+  uint32_t itoa_c (int64_t n, char s[]);
+} // namespace
+
+
+#endif // M2M_STRING_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mstringbuffer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __STRING_BUFFER_H__
+#define __STRING_BUFFER_H__
+
+#include "mbed-client/m2mstringbufferbase.h"
+
+#include <assert.h>
+#include <stddef.h>
+
+template <int SIZE>
+class StringBuffer : private StringBufferBase
+{
+public:
+    /**
+     * Initialize a empty buffer with zero length and zero content.
+     */
+    inline StringBuffer();
+
+    //
+    // This is not implemented on purpose, as the given string may conflict with
+    // templated size. Otoh, if we used compile time assert, the overflow
+    // could be prevented at compile time.
+    //
+    // inline StringBuffer(const char *initial_string);
+
+    /**
+     * Verify, if the buffer has still room for given amount of bytes.
+     * Note: the given size value must include the zero terminator as it is not
+     * implicitly taken into account for.
+     */
+    bool ensure_space(size_t required_size) const;
+
+    /**
+     * Append given char to end of string.
+     * Return false if the buffer would overflow, true otherwise.
+     */
+    bool append(char data);
+
+    /**
+     * Append given zero terminated string to end of buffer.
+     *
+     * Return false if the buffer would overflow, true otherwise.
+     *
+     * Note: the whole string, including the zero terminator must fit
+     * to buffer or the append operation is not done and false is returned.
+     */
+    bool append(const char *data);
+
+    /**
+     * Append given block of chars to end of buffer.
+     *
+     * Return false if the buffer would overflow, true otherwise.
+     *
+     * Note: the whole string, including the zero terminator must fit
+     * to buffer or the append operation is not done and false is returned.
+     */
+    bool append(const char *data, size_t data_len);
+
+    /**
+     * Convert given uint16_t into string representation and add it to the
+     * end of buffer.
+     *
+     * Note: the whole string, including the zero terminator must fit
+     * to buffer or the append operation is not done and false is returned.
+     */
+    bool append_int(uint16_t data);
+
+    /**
+     * Get the amount of bytes added to the buffer.
+     *
+     * Note: the size does not include the terminating zero, so this is
+     * functionally equal to strlen().
+     */
+    inline size_t get_size() const;
+
+    // API functionality copied from m2mstring:
+
+    // find the index of last occurance of given char in string, or negative if not found
+    int find_last_of(char search_char) const;
+
+    /**
+     * Get a read only pointer to the data.
+     */
+    inline const char* c_str() const;
+
+    // Add this only if needed
+    //inline char* c_str();
+private:
+    char _buff[SIZE];
+};
+
+template <int SIZE>
+inline StringBuffer<SIZE>::StringBuffer()
+{
+    // actually a assert_compile() would be better as this is completely a code problem
+    assert(SIZE > 0);
+
+    _buff[0] = '\0';
+}
+
+template <int SIZE>
+bool StringBuffer<SIZE>::ensure_space(size_t required_size) const
+{
+    return StringBufferBase::ensure_space(SIZE, required_size);
+}
+
+template <int SIZE>
+bool StringBuffer<SIZE>::append(const char *data)
+{
+    return StringBufferBase::append(_buff, SIZE, data);
+}
+
+template <int SIZE>
+bool StringBuffer<SIZE>::append(const char *data, size_t data_len)
+{
+    return StringBufferBase::append(_buff, SIZE, data, data_len);
+}
+
+template <int SIZE>
+inline bool StringBuffer<SIZE>::append(char data)
+{
+    return StringBufferBase::append(_buff, SIZE, data);
+}
+
+template <int SIZE>
+bool StringBuffer<SIZE>::append_int(uint16_t data)
+{
+    return StringBufferBase::append_int(_buff, SIZE, data);
+}
+
+template <int SIZE>
+int StringBuffer<SIZE>::find_last_of(char search_char) const
+{
+    return StringBufferBase::find_last_of(_buff, search_char);
+}
+
+template <int SIZE>
+inline const char* StringBuffer<SIZE>::c_str() const
+{
+    return _buff;
+}
+
+template <int SIZE>
+inline size_t StringBuffer<SIZE>::get_size() const
+{
+    return _curr_size;
+}
+
+#endif // !__STRING_BUFFER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mstringbufferbase.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __STRING_BUFFER_BASE_H__
+#define __STRING_BUFFER_BASE_H__
+
+#include <stdint.h>
+#include <stddef.h>
+
+class StringBufferBase
+{
+protected:
+
+    // inline version of this produces smaller code
+    inline StringBufferBase();
+
+    // all the docs are at template level, as it is the only public API
+
+    bool ensure_space(size_t max_size, size_t required_size) const;
+
+    bool append(char *buff, size_t max_size, char data);
+
+    bool append(char *buff, size_t max_size, const char *data);
+
+    bool append(char *buff, size_t max_size, const char *data, size_t data_len);
+
+    bool append_int(char *buff, size_t max_size, uint16_t data);
+
+    int find_last_of(const char *buff, char search_char) const;
+
+protected:
+    //const size_t _max_size;
+    size_t _curr_size;
+};
+
+inline StringBufferBase::StringBufferBase() : _curr_size(0)
+{
+}
+
+#endif // !__STRING_BUFFER_BASE_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mtimer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_TIMER_H
+#define M2M_TIMER_H
+
+#include <stdint.h>
+#include "mbed-client/m2mtimerobserver.h"
+
+class M2MTimerPimpl;
+
+/*! \file m2mtimer.h
+* \brief M2MTimer.
+* Timer class for mbed client.
+*/
+class M2MTimer
+{
+private:
+    // Prevents the use of assignment operator
+    M2MTimer& operator=(const M2MTimer& other);
+
+    // Prevents the use of copy constructor
+    M2MTimer(const M2MTimer& other);
+
+public:
+
+    /**
+    * Constructor.
+    */
+    M2MTimer(M2MTimerObserver& observer);
+
+    /**
+    * Destructor.
+    */
+    ~M2MTimer();
+
+    /**
+    * \brief Starts the timer.
+    * \param interval The timer interval in milliseconds.
+    * \param single_shot Defines whether the timer is ticked once or restarted every time at expiry.
+    */
+    void start_timer(uint64_t interval, M2MTimerObserver::Type type, bool single_shot = true);
+
+    /**
+     * \brief Starts the timer in DTLS manner.
+     * \param intermediate_interval The intermediate interval to use, must be smaller than total (usually 1/4 of total).
+     * \param total_interval The total interval to use; This is the timeout value of a DTLS packet.
+     * \param type The type of the timer.
+     */
+    void start_dtls_timer(uint64_t intermediate_interval, uint64_t total_interval, M2MTimerObserver::Type type = M2MTimerObserver::Dtls);
+
+    /**
+    * \brief Stops the timer.
+    * This cancels the ongoing timer.
+    */
+    void stop_timer();
+
+    /**
+     * \brief Checks if the intermediate interval has passed.
+     * \return True if the interval has passed, else false.
+     */
+    bool is_intermediate_interval_passed();
+
+    /**
+     * \brief Checks if the total interval has passed.
+     * \return True if the interval has passed, else false.
+     */
+    bool is_total_interval_passed();
+
+private:
+
+    M2MTimerObserver&   _observer;
+    M2MTimerPimpl       *_private_impl;
+    friend class Test_M2MTimerImpl_linux;
+};
+
+#endif // M2M_TIMER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mtimerobserver.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_TIMER_OBSERVER_H
+#define M2M_TIMER_OBSERVER_H
+
+/*! \file m2mtimerobserver.h
+ *  \brief M2MTimerObserver.
+ *  Observer class for indicating the timer expiry to the parent class.
+ */
+class M2MTimerObserver
+{
+public:
+    /**
+      * \enum Defines the types of timer
+      * that can be created for mbed Client.
+      */
+    typedef enum {
+        Notdefined,
+        Registration,
+        NsdlExecution,
+        PMinTimer,
+        PMaxTimer,
+        Dtls,
+        QueueSleep,
+        RetryTimer,
+        BootstrapTimer
+    }Type;
+
+    /**
+    * \brief Indicates that the timer has expired.
+    * \param type The type of the timer that has expired.
+    */
+    virtual void timer_expired(M2MTimerObserver::Type type =
+                               M2MTimerObserver::Notdefined) = 0;
+};
+
+#endif // M2M_TIMER_OBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed-client/m2mvector.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2015-2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef M2M_VECTOR_H
+#define M2M_VECTOR_H
+
+/*! \file m2mvector.h
+* \brief A simple C++ Vector class, used as replacement for std::vector.
+*/
+
+
+namespace m2m
+{
+
+template <typename ObjectTemplate>
+
+class Vector
+{
+  public:
+    explicit Vector( int init_size = MIN_CAPACITY)
+            : _size(0),
+              _capacity((init_size >= MIN_CAPACITY) ? init_size : MIN_CAPACITY) {
+        _object_template = new ObjectTemplate[ _capacity ];
+    }
+
+    Vector(const Vector & rhs ): _object_template(0) {
+        operator=(rhs);
+    }
+ 
+    ~Vector() {
+        delete [] _object_template;
+    }
+
+    const Vector & operator=(const Vector & rhs) {
+        if(this != &rhs) {
+            delete[] _object_template;
+            _size = rhs.size();
+            _capacity = rhs._capacity;
+
+            _object_template = new ObjectTemplate[capacity()];
+            for(int k = 0; k < size(); k++) {
+                _object_template[k] = rhs._object_template[k];
+            }
+        }
+        return *this;
+    }
+
+    void resize(int new_size) {
+        if(new_size > _capacity) {
+            reserve(new_size * 2 + 1);
+        }
+        _size = new_size;
+    }
+
+    void reserve(int new_capacity) {
+        if(new_capacity < _size) {
+            return;
+        }
+        ObjectTemplate *old_array = _object_template;
+
+        _object_template = new ObjectTemplate[new_capacity];
+        for(int k = 0; k < _size; k++) {
+            _object_template[k] = old_array[k];
+        }
+        _capacity = new_capacity;
+        delete [] old_array;
+    }
+
+    ObjectTemplate & operator[](int idx) {
+        return _object_template[idx];
+    }
+
+    const ObjectTemplate& operator[](int idx) const {
+        return _object_template[idx];
+    }
+
+    bool empty() const{
+        return size() == 0;
+    }
+
+    int size() const {
+        return _size;
+    }
+
+    int capacity() const {
+        return _capacity;
+    }
+
+    void push_back(const ObjectTemplate& x) {
+        if(_size == _capacity) {
+            reserve(2 * _capacity + 1);
+        }
+        _object_template[_size] = x;
+        _size++;
+    }
+
+    void pop_back() {
+        _size--;
+    }
+
+    void clear() {
+        _size = 0;
+    }
+
+    const ObjectTemplate& back() const {
+        return _object_template[_size - 1];
+    }
+
+    typedef ObjectTemplate* iterator;
+    typedef const ObjectTemplate* const_iterator;
+
+    iterator begin() {
+        return &_object_template[0];
+    }
+
+    const_iterator begin() const {
+        return &_object_template[0];
+    }
+
+    iterator end() {
+        return &_object_template[_size];
+    }
+
+    const_iterator end() const {
+        return &_object_template[_size];
+    }
+
+    void erase(int position) {
+        if(position < _size) {
+            _object_template[position] = 0;
+            for(int k = position; k + 1 < _size; k++) {
+                _object_template[k] = _object_template[k + 1];
+            }
+            _size--;
+        }
+    }
+
+    enum {
+        MIN_CAPACITY = 1
+    };
+
+  private:
+    int                 _size;
+    int                 _capacity;
+    ObjectTemplate*     _object_template;
+};
+
+} // namespace
+
+#endif // M2M_VECTOR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mbed_lib.json	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,20 @@
+{
+    "name": "mbed-client",
+    "config": {
+        "event-loop-size": 1024,
+        "reconnection-count": 3,
+        "reconnection-interval": 5,
+        "tcp-keepalive-time": 300,
+        "disable-bootstrap-feature": null,
+        "coap-disable-obs-feature":null,
+        "reconnection-loop": 1,
+        "sn-coap-max-blockwise-payload-size" : 0,
+        "sn-coap-duplication-max-msgs-count": null,
+        "sn-coap-max-incoming-message-size": null,
+        "sn-coap-resending-queue-size-msgs": null,
+        "sn-coap-resending-queue-size-bytes": null
+    },
+    "macros" : [
+        "MBED_CLIENT_C_NEW_API"
+    ]
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/mkdocs.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,17 @@
+site_name: ARM mbed Client Guide
+theme: readthedocs
+use directory_urls: false
+pages:
+- ['index.md','ARM mbed Client Guide']
+- ['Introduction.md','Introduction to mbed Client']
+- ['client_reg_dereg.md','Features','Client Registration']
+- ['dev_man_serv_enable.md','Features','Device Management and Service Enablement']
+- ['info_reporting.md','Features','Information Reporting']
+- ['data_types.md','Data types']
+- ['Howto.md','Quick start guide for using mbed Client API']
+- ['porting-guide.md','Porting mbed Client']
+- ['further-reading.md','mbed Device Connector service']
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/module.json	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,23 @@
+{
+  "name": "mbed-client",
+  "version": "2.0.2",
+  "description": "mbed Client C++ API",
+  "keywords": [],
+  "author": "Yogesh Pande <yogesh.pande@arm.com>",
+  "homepage": "https://github.com/ARMmbed/mbed-client",
+  "license": "Apache-2.0",
+  "dependencies": {
+    "mbed-client-c": "^4.0.0",
+    "mbed-trace": ">=0.2.0,<2.0.0"
+  },
+  "targetDependencies": {
+    "arm": {
+      "mbed-client-mbed-os": "^3.0.0",
+      "mbed-client-mbedtls": "^3.0.0"
+    },
+    "linux": {
+      "mbed-client-linux": "^3.0.0",
+      "mbed-client-mbedtls": "^3.0.0"
+    }
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/run_unit_tests.sh	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,66 @@
+#!/bin/bash
+# Copyright (c) 2015 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# * http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+echo
+echo "Build mbed Client API unit tests"
+echo
+yt target x86-linux-native-coverage
+yt clean
+yt build
+yt test --no-build -- -ojunit
+echo
+echo Create results
+echo
+rm -rf results
+rm -rf coverage
+mkdir results
+mkdir coverage
+
+find ./build -name '*.xml' | xargs cp -t ./results/
+find ./build/x86-linux-native-coverage/test -name '*.gcno' | xargs cp -t ./coverage/
+find ./build/x86-linux-native-coverage/test -name '*.gcda' | xargs cp -t ./coverage/
+touch coverage/*.gcda
+exclude_files="${PWD}/test/"
+gcovr -r ./ --gcov-filter='.*source*.' --exclude-unreachable-branches --exclude $exclude_files --object-directory ./coverage -x -o ./results/gcovr.xml
+echo
+echo "Create coverage document"
+echo
+lcov -b ./ -d ./coverage -c -o ./coverage/app.info
+lcov -q -r ./coverage/app.info "/test/mbedclient/*" -o ./coverage/app.info
+lcov -q -r ./coverage/app.info "/usr*" -o ./coverage/app.info
+genhtml -q --no-branch-coverage --function-coverage --demangle-cpp --title "mbed Client coverage" ./coverage/app.info -o ./coverage
+rm -f ./coverage/*.gcno
+rm -f ./coverage/*.gcda
+echo 
+echo "Creating report"
+echo 
+echo '<?xml version="1.0" encoding="UTF-8" ?>
+<?xml-stylesheet type="text/xsl" href="junit_xsl.xslt"?>
+<list>' >> index.xml
+
+for f in results/*.xml
+do
+name=${f##*/}
+echo '<entry name="results/'"$name"'" />'>> index.xml
+done
+
+echo '</list>' >> index.xml
+
+echo
+echo "Report created to index.xml (outputs html)"
+echo
+xsltproc -o results/testresults.html junit_xsl.xslt index.xml
+rm -f index.xml
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/run_unit_tests_with_valgrind.sh	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,13 @@
+#!/bin/bash
+# Execute script with root path where to find binaries. 
+# For example ./run_unit_tests_with_valgrind.sh ./build/x86-linux-native-coverage/test/mbedclient/
+
+input="binaries.txt"
+valgrind_logs="valgrind_logs"
+rm -rf $valgrind_logs
+mkdir $valgrind_logs
+find $1 -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print > $input
+while file= read -r binary
+do
+    valgrind --track-origins=yes --xml=yes --xml-file="${valgrind_logs}/valgrind_$(basename $binary).xml" "$binary"
+done < "$input"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/eventdata.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef EVENT_DATA_H
+#define EVENT_DATA_H
+
+#include "mbed-client/m2mvector.h"
+
+//FORWARD DECLARATION
+class M2MObject;
+
+
+typedef Vector<M2MObject *> M2MObjectList;
+
+class M2MSecurity;
+
+class EventData
+{
+public:
+    virtual ~EventData() {}
+};
+
+class M2MSecurityData : public EventData
+{
+public:
+    M2MSecurityData()
+    :_object(NULL){}
+    virtual ~M2MSecurityData() {}
+    M2MSecurity  *_object;
+};
+
+class ResolvedAddressData : public EventData
+{
+public:
+    ResolvedAddressData()
+    :_address(NULL),
+    _port(0){}
+    virtual ~ResolvedAddressData() {}
+    const M2MConnectionObserver::SocketAddress    *_address;
+    uint16_t                                       _port;
+};
+
+class ReceivedData : public EventData
+{
+public:
+    ReceivedData()
+    :_data(NULL),
+    _size(0),
+    _port(0),
+    _address(NULL){}
+    virtual ~ReceivedData() {}
+    uint8_t                                         *_data;
+    uint16_t                                        _size;
+    uint16_t                                        _port;
+    const M2MConnectionObserver::SocketAddress      *_address;
+};
+
+class M2MRegisterData : public EventData
+{
+public:
+    M2MRegisterData()
+    :_object(NULL){}
+    virtual ~M2MRegisterData() {}
+    M2MSecurity     *_object;
+    M2MObjectList    _object_list;
+};
+
+class M2MUpdateRegisterData : public EventData
+{
+public:
+    M2MUpdateRegisterData()
+    :_object(NULL),
+    _lifetime(0){}
+    virtual ~M2MUpdateRegisterData() {}
+    M2MSecurity     *_object;
+    uint32_t        _lifetime;
+    M2MObjectList    _object_list;
+};
+
+
+#endif //EVENT_DATA_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/m2minterfaceimpl.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,437 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_INTERFACE_IMPL_H
+#define M2M_INTERFACE_IMPL_H
+
+#include "mbed-client/m2minterface.h"
+#include "mbed-client/m2mserver.h"
+#include "mbed-client/m2mconnectionobserver.h"
+#include "mbed-client/m2mconnectionsecurity.h"
+#include "include/m2mnsdlobserver.h"
+#include "include/m2mnsdlinterface.h"
+#include "mbed-client/m2mtimerobserver.h"
+#include "mbed-client/m2mtimer.h"
+#include "mbed-client/m2mconnectionhandler.h"
+
+//FORWARD DECLARATION
+class M2MConnectionSecurity;
+class EventData;
+class M2MUpdateRegisterData;
+/**
+ *  @brief M2MInterfaceImpl.
+ *  This class implements handling of all mbed Client Interface operations
+ *  defined in OMA LWM2M specifications.
+ *  This includes Bootstrapping, Client Registration, Device Management &
+ *  Service Enablement and Information Reporting.
+ */
+
+class  M2MInterfaceImpl : public M2MInterface,
+                          public M2MNsdlObserver,
+                          public M2MConnectionObserver,
+                          public M2MTimerObserver
+{
+private:
+    // Prevents the use of assignment operator by accident.
+    M2MInterfaceImpl& operator=( const M2MInterfaceImpl& /*other*/ );
+
+    // Prevents the use of copy constructor by accident
+    M2MInterfaceImpl( const M2MInterfaceImpl& /*other*/ );
+
+friend class M2MInterfaceFactory;
+
+private:
+
+    /**
+     * @brief Constructor
+     * @param observer, Observer to pass the event callbacks for various
+     * interface operations.
+     * @param endpoint_name Endpoint name of the client.
+     * @param endpoint_type Endpoint type of the client.
+     * @param life_time Life time of the client in seconds
+     * @param listen_port Listening port for the endpoint, default is 8000.
+     * @param domain Domain of the client.
+     * @param mode Binding mode of the client, default is UDP
+     * @param stack Network stack to be used for connection, default is LwIP_IPv4.
+     * @param context_address Context address, default is empty.
+     */
+    M2MInterfaceImpl(M2MInterfaceObserver& observer,
+                     const String &endpoint_name,
+                     const String &endpoint_type,
+                     const int32_t life_time,
+                     const uint16_t listen_port,
+                     const String &domain = "",
+                     BindingMode mode = M2MInterface::NOT_SET,
+                     M2MInterface::NetworkStack stack = M2MInterface::LwIP_IPv4,
+                     const String &context_address = "");
+
+public:
+
+    /**
+     * @brief Destructor
+     */
+    virtual ~M2MInterfaceImpl();
+
+    /**
+     * @brief Initiates bootstrapping of the client with the provided Bootstrap
+     * server information.
+     * @param security_object Security object which contains information
+     * required for successful bootstrapping of the client.
+     */
+    virtual void bootstrap(M2MSecurity *security);
+
+    /**
+     * @brief Cancels on going bootstrapping operation of the client. If the client has
+     * already successfully bootstrapped then this function deletes existing
+     * bootstrap information from the client.
+     */
+    virtual void cancel_bootstrap();
+
+    /**
+     * @brief Initiates registration of the provided Security object to the
+     * corresponding LWM2M server.
+     * @param security_object Security object which contains information
+     * required for registering to the LWM2M server.
+     * If client wants to register to multiple LWM2M servers then it has call
+     * this function once for each of LWM2M server object separately.
+     * @param object_list Objects which contains information
+     * which the client want to register to the LWM2M server.
+     */
+    virtual void register_object(M2MSecurity *security_object, const M2MObjectList &object_list);
+
+    /**
+     * @brief Updates or refreshes the client's registration on the LWM2M
+     * server.
+     * @param security_object Security object from which the device object
+     * needs to update registration, if there is only one LWM2M server registered
+     * then this parameter can be NULL.
+     * @param lifetime Lifetime for the endpoint client in seconds.
+     */
+    virtual void update_registration(M2MSecurity *security_object, const uint32_t lifetime = 0);
+
+    /**
+     * @brief Updates or refreshes the client's registration on the LWM2M
+     * server. Use this function to publish new objects to LWM2M server.
+     * @param security_object The security object from which the device object
+     * needs to update the registration. If there is only one LWM2M server registered,
+     * this parameter can be NULL.
+     * @param object_list Objects that contain information about the
+     * client attempting to register to the LWM2M server.
+     * @param lifetime The lifetime of the endpoint client in seconds. If the same value
+     * has to be passed, set the default value to 0.
+     */
+    virtual void update_registration(M2MSecurity *security_object, const M2MObjectList &object_list,
+                                     const uint32_t lifetime = 0);
+
+    /**
+     * @brief Unregisters the registered object from the LWM2M server
+     * @param security_object Security object from which the device object
+     * needs to be unregistered. If there is only one LWM2M server registered
+     * this parameter can be NULL.
+     */
+    virtual void unregister_object(M2MSecurity* security = NULL);
+
+    /**
+     * @brief Sets the function which will be called indicating client
+     * is going to sleep when the Binding mode is selected with Queue mode.
+     * @param callback A function pointer that will be called when client
+     * goes to sleep.
+     */
+    virtual void set_queue_sleep_handler(callback_handler handler);
+
+    /**
+     * @brief Sets the network interface handler that is used by client to connect
+     * to a network over IP.
+     * @param handler A network interface handler that is used by client to connect.
+     *  This API is optional but provides a mechanism for different platforms to
+     * manage usage of underlying network interface by client.
+     */
+    virtual void set_platform_network_handler(void *handler = NULL);
+
+    /**
+     * \brief Sets the function callback that will be called by mbed-client for
+     * fetching random number from application for ensuring strong entropy.
+     * \param random_callback A function pointer that will be called by mbed-client
+     * while performing secure handshake.
+     * Function signature should be uint32_t (*random_number_callback)(void);
+     */
+    virtual void set_random_number_callback(random_number_cb callback);
+
+    /**
+     * \brief Sets the function callback that will be called by mbed-client for
+     * providing entropy source from application for ensuring strong entropy.
+     * \param entropy_callback A function pointer that will be called by mbed-client
+     * while performing secure handshake.
+     * Function signature , if using mbed-client-mbedtls should be
+     * int (*mbedtls_entropy_f_source_ptr)(void *data, unsigned char *output,
+     *                                     size_t len, size_t *olen);
+     */
+    virtual void set_entropy_callback(entropy_cb callback);
+
+
+protected: // From M2MNsdlObserver
+
+    virtual void coap_message_ready(uint8_t *data_ptr,
+                                    uint16_t data_len,
+                                    sn_nsdl_addr_s *address_ptr);
+
+    virtual void client_registered(M2MServer *server_object);
+
+    virtual void registration_updated(const M2MServer &server_object);
+
+    virtual void registration_error(uint8_t error_code, bool retry = false);
+
+    virtual void client_unregistered();
+
+    virtual void bootstrap_done(M2MSecurity *security_object);
+
+    virtual void bootstrap_wait(M2MSecurity *security_object);
+
+    virtual void bootstrap_error();
+
+    virtual void coap_data_processed();
+
+    virtual void value_updated(M2MBase *base);
+
+protected: // From M2MConnectionObserver
+
+    virtual void data_available(uint8_t* data,
+                                uint16_t data_size,
+                                const M2MConnectionObserver::SocketAddress &address);
+
+    virtual void socket_error(uint8_t error_code, bool retry = true);
+
+    virtual void address_ready(const M2MConnectionObserver::SocketAddress &address,
+                               M2MConnectionObserver::ServerType server_type,
+                               const uint16_t server_port);
+
+    virtual void data_sent();
+
+protected: // from M2MTimerObserver
+
+    virtual void timer_expired(M2MTimerObserver::Type type);
+
+
+private: // state machine state functions
+
+    /**
+    * When the state is Idle.
+    */
+    void state_idle(EventData* data);
+
+    /**
+    * When the client starts bootstrap.
+    */
+    void state_bootstrap( EventData *data);
+
+    /**
+    * When the bootstrap server address is resolved.
+    */
+    void state_bootstrap_address_resolved( EventData *data);
+
+    /**
+    * When the bootstrap resource is created.
+    */
+    void state_bootstrap_resource_created( EventData *data);
+
+    /**
+    * When the server has sent response and bootstrapping is done.
+    */
+    void state_bootstrapped( EventData *data);
+
+    /**
+    * When the client starts register.
+    */
+    void state_register( EventData *data);
+
+    /**
+    * When the server address for register is resolved.
+    */
+    void state_register_address_resolved( EventData *data);
+
+    /**
+    * When the client is registered.
+    */
+    void state_registered( EventData *data);
+
+    /**
+    * When the client is updating registration.
+    */
+    void state_update_registration( EventData *data);
+
+    /**
+    * When the client starts unregister.
+    */
+    void state_unregister( EventData *data);
+
+    /**
+    * When the client has been unregistered.
+    */
+    void state_unregistered( EventData *data);
+
+    /**
+    * When the coap data is been sent through socket.
+    */
+    void state_sending_coap_data( EventData *data);
+
+    /**
+    * When the coap data is sent successfully.
+    */
+    void state_coap_data_sent( EventData *data);
+
+    /**
+    * When the socket is receiving coap data.
+    */
+    void state_receiving_coap_data( EventData *data);
+
+    /**
+    * When the socket has received coap data.
+    */
+    void state_coap_data_received( EventData *data);
+
+    /**
+    * When the coap message is being processed.
+    */
+    void state_processing_coap_data( EventData *data);
+
+    /**
+    * When the coap message has been processed.
+    */
+    void state_coap_data_processed( EventData *data);
+
+    /**
+    * When the client is waiting to receive or send data.
+    */
+    void state_waiting( EventData *data);
+
+    /**
+     * Start registration update.
+     */
+    void start_register_update(M2MUpdateRegisterData *data);
+
+    /**
+    * State enumeration order must match the order of state
+    * method entries in the state map
+    */
+    enum E_States {
+        STATE_IDLE = 0,
+        STATE_BOOTSTRAP,
+        STATE_BOOTSTRAP_ADDRESS_RESOLVED,
+        STATE_BOOTSTRAP_RESOURCE_CREATED,
+        STATE_BOOTSTRAP_WAIT,
+        STATE_BOOTSTRAPPED, //5
+        STATE_REGISTER,
+        STATE_REGISTER_ADDRESS_RESOLVED,
+        STATE_REGISTERED,
+        STATE_UPDATE_REGISTRATION,
+        STATE_UNREGISTER, //10
+        STATE_UNREGISTERED,
+        STATE_SENDING_COAP_DATA,
+        STATE_COAP_DATA_SENT,
+        STATE_COAP_DATA_RECEIVED,
+        STATE_PROCESSING_COAP_DATA, //15
+        STATE_COAP_DATA_PROCESSED,
+        STATE_WAITING,
+        STATE_MAX_STATES
+    };
+
+    /**
+     * @brief Redirects the state machine to right function.
+     * @param current_state Current state to be set.
+     * @param data Data to be passed to the state function.
+     */
+    void state_function( uint8_t current_state, EventData* data  );
+
+    /**
+     * @brief State Engine maintaining state machine logic.
+     */
+    void state_engine(void);
+
+    /**
+    * External event which can trigger the state machine.
+    * @param New The state to which the state machine should go.
+    * @param data The data to be passed to the state machine.
+    */
+    void external_event(uint8_t, EventData* = NULL);
+
+    /**
+    * Internal event generated by state machine.
+    * @param New State which the state machine should go to.
+    * @param data The data to be passed to the state machine.
+    */
+    void internal_event(uint8_t, EventData* = NULL);
+
+    enum
+    {
+        EVENT_IGNORED = 0xFE,
+        CANNOT_HAPPEN
+    };
+
+    /**
+     * Helper method for extracting the IP address part and port from the
+     * given server address.
+     * @param server_address Source URL (without "coap" or "coaps" prefix).
+     * @param ip_address The extracted IP.
+     * @param port The extracted port.
+     */
+    static void process_address(const String& server_address, String& ip_address, uint16_t& port);
+
+private:
+
+    EventData                   *_event_data;
+    M2MTimer                    *_bootstrap_timer;
+    uint16_t                    _server_port;
+    uint16_t                    _listen_port;
+    String                      _endpoint_type;
+    String                      _domain;
+    int32_t                     _life_time;
+    String                      _context_address;
+    String                      _server_ip_address;
+    M2MSecurity                 *_register_server; //TODO: to be the list not owned
+    M2MTimer                    _queue_sleep_timer;
+    M2MTimer                    _retry_timer;
+    callback_handler            _callback_handler;
+    const uint8_t               _max_states;
+    bool                        _event_ignored;
+    bool                        _event_generated;
+    bool                        _reconnecting;
+    bool                        _retry_timer_expired;
+    bool                        _bootstrapped;
+    uint8_t                     _current_state;
+    uint8_t                     _retry_count;
+    BindingMode                 _binding_mode;
+    M2MInterfaceObserver        &_observer;
+    M2MConnectionSecurity       *_security_connection; // Doesn't own
+    M2MConnectionHandler        _connection_handler;
+    M2MNsdlInterface            _nsdl_interface;
+    M2MSecurity                 *_security;
+
+    friend class Test_M2MInterfaceImpl;
+
+};
+
+#define BEGIN_TRANSITION_MAP \
+    static const uint8_t TRANSITIONS[] = {\
+
+#define TRANSITION_MAP_ENTRY(entry)\
+    entry,
+
+#define END_TRANSITION_MAP(data) \
+    0 };\
+    external_event(TRANSITIONS[_current_state], data);
+
+#endif //M2M_INTERFACE_IMPL_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/m2mnsdlinterface.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,380 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2MNSDLINTERFACE_H
+#define M2MNSDLINTERFACE_H
+
+#include "mbed-client/m2mvector.h"
+#include "mbed-client/m2mconfig.h"
+#include "mbed-client/m2minterface.h"
+#include "mbed-client/m2mtimerobserver.h"
+#include "mbed-client/m2mobservationhandler.h"
+#include "mbed-client/m2mbase.h"
+#include "mbed-client/m2mserver.h"
+#include "include/nsdllinker.h"
+
+//FORWARD DECLARARTION
+class M2MSecurity;
+class M2MObject;
+class M2MObjectInstance;
+class M2MResource;
+class M2MResourceInstance;
+class M2MNsdlObserver;
+class M2MServer;
+class M2MTimer;
+
+typedef Vector<M2MObject *> M2MObjectList;
+
+/**
+ * @brief M2MNsdlInterface
+ * Class which interacts between mbed Client C++ Library and mbed-client-c library.
+ */
+class M2MNsdlInterface : public M2MTimerObserver,
+                         public M2MObservationHandler
+{
+private:
+    // Prevents the use of assignment operator by accident.
+    M2MNsdlInterface& operator=( const M2MNsdlInterface& /*other*/ );
+
+    // Prevents the use of copy constructor by accident
+    M2MNsdlInterface( const M2MNsdlInterface& /*other*/ );
+
+public:
+    /**
+    * @brief Constructor
+    * @param observer, Observer to pass the event callbacks from nsdl library.
+    */
+    M2MNsdlInterface(M2MNsdlObserver &observer);
+
+    /**
+     * @brief Destructor
+     */
+    virtual ~M2MNsdlInterface();
+
+    /**
+     * @brief Creates endpoint object for the nsdl stack.
+     * @param endpoint_name, Endpoint name of the client.
+     * @param endpoint_type, Endpoint type of the client.
+     * @param life_time, Life time of the client in seconds
+     * @param domain, Domain of the client.
+     * @param mode, Binding mode of the client, default is UDP
+     * @param context_address, Context address default is empty.
+    */
+    void create_endpoint(const String &endpoint_name,
+                         const String &endpoint_type,
+                         const int32_t life_time,
+                         const String &domain,
+                         const uint8_t mode,
+                         const String &context_address);
+
+    /**
+     * @brief Deletes the endpoint.
+    */
+    void delete_endpoint();
+
+    /**
+     * @brief Creates the NSDL structure for the registered objectlist.
+     * @param object_list, List of objects to be registered.
+     * @return true if structure created successfully else false.
+    */
+    bool create_nsdl_list_structure(const M2MObjectList &object_list);
+
+    /**
+     * @brief Removed the NSDL resource for the given resource.
+     * @param base, Resource to be removed.
+     * @return true if removed successfully else false.
+    */
+    bool remove_nsdl_resource(M2MBase *base);
+
+    /**
+     * @brief Creates the bootstrap object.
+     * @param address Bootstrap address.
+     * @return true if created and sent successfully else false.
+    */
+    bool create_bootstrap_resource(sn_nsdl_addr_s *address, const String &bootstrap_endpoint_name);
+
+    /**
+     * @brief Sends the register message to the server.
+     * @param address M2MServer address.
+     * @param address_length M2MServer address length.
+     * @param port M2MServer port.
+     * @param address_type IP Address type.
+     * @return  true if register sent successfully else false.
+    */
+    bool send_register_message(uint8_t* address,
+                               uint8_t address_length,
+                               const uint16_t port,
+                               sn_nsdl_addr_type_e address_type);
+
+    /**
+     * @brief Sends the update registration message to the server.
+     * @param lifetime, Updated lifetime value in seconds.
+     * @return  true if sent successfully else false.
+     *
+    */
+    bool send_update_registration(const uint32_t lifetime = 0);
+
+    /**
+     * @brief Sends unregister message to the server.
+     * @return  true if unregister sent successfully else false.
+    */
+    bool send_unregister_message();
+
+    /**
+     * @brief Memory Allocation required for libCoap.
+     * @param size, Size of memory to be reserved.
+    */
+    static void* memory_alloc(uint16_t size);
+
+    /**
+     * @brief Memory free functions required for libCoap
+     * @param ptr, Object whose memory needs to be freed.
+    */
+    static void memory_free(void *ptr);
+
+    /**
+    * @brief Callback from nsdl library to inform the data is ready
+    * to be sent to server.
+    * @param nsdl_handle, Handler for the nsdl structure for this endpoint
+    * @param protocol, Protocol format of the data
+    * @param data, Data to be sent.
+    * @param data_len, Size of the data to be sent
+    * @param address, server address where data has to be sent.
+    * @return 1 if successful else 0.
+    */
+    uint8_t send_to_server_callback(struct nsdl_s * nsdl_handle,
+                                    sn_nsdl_capab_e protocol,
+                                    uint8_t *data,
+                                    uint16_t data_len,
+                                    sn_nsdl_addr_s *address);
+
+    /**
+    * @brief Callback from nsdl library to inform the data which is
+    * received from server for the client has been converted to coap message.
+    * @param nsdl_handle, Handler for the nsdl structure for this endpoint
+    * @param coap_header, Coap message formed from data.
+    * @param address, Server address from where the data is received.
+    * @return 1 if successful else 0.
+    */
+    uint8_t received_from_server_callback(struct nsdl_s * nsdl_handle,
+                                          sn_coap_hdr_s *coap_header,
+                                          sn_nsdl_addr_s *address);
+
+    /**
+    * @brief Callback from nsdl library to inform the data which is
+    * received from server for the resources has been converted to coap message.
+    * @param nsdl_handle, Handler for the nsdl resource structure for this endpoint..
+    * @param coap_header, Coap message formed from data.
+    * @param address, Server address from where the data is received.
+    * @param nsdl_capab, Protocol for the message, currently only coap is supported.
+    * @return 1 if successful else 0.
+    */
+    uint8_t resource_callback(struct nsdl_s *nsdl_handle, sn_coap_hdr_s *coap,
+                               sn_nsdl_addr_s *address,
+                               sn_nsdl_capab_e nsdl_capab);
+
+    /**
+     * @brief Callback when there is data received from server and needs to be processed.
+     * @param data, data received from server.
+     * @param data_size, data size received from server.
+     * @param addres, address structure of the server.
+     * @return true if successfully processed else false.
+     */
+    bool process_received_data(uint8_t *data,
+                               uint16_t data_size,
+                               sn_nsdl_addr_s *address);
+
+    /**
+     * @brief Stops all the timers in case there is any errors.
+     */
+    void stop_timers();
+
+    /**
+     * @brief Returns nsdl handle.
+     * @return ndsl handle
+     */
+    nsdl_s* get_nsdl_handle();
+
+    /**
+     * @brief Get endpoint name
+     * @return endpoint name
+     */
+    const String& endpoint_name() const;
+
+protected: // from M2MTimerObserver
+
+    virtual void timer_expired(M2MTimerObserver::Type type);
+
+protected: // from M2MObservationHandler
+
+    virtual void observation_to_be_sent(M2MBase *object,
+                                        uint16_t obs_number,
+                                        m2m::Vector<uint16_t> changed_instance_ids,
+                                        bool send_object = false);
+
+    virtual void resource_to_be_deleted(M2MBase* base);
+
+    virtual void value_updated(M2MBase *base, const String &object_name);
+
+    virtual void remove_object(M2MBase *object);
+
+    virtual void send_delayed_response(M2MBase *base);
+
+private:
+
+    /**
+    * @brief Initializes all the nsdl library component to be usable.
+    * @return true if initialization is successful else false.
+    */
+    bool initialize();
+
+    bool add_object_to_list(M2MObject *object);
+
+    bool create_nsdl_object_structure(M2MObject *object);
+
+    bool create_nsdl_object_instance_structure(M2MObjectInstance *object_instance);
+
+    bool create_nsdl_resource_structure(M2MResource *resource,
+                                        bool multiple_instances = false);
+
+    bool create_nsdl_resource(M2MBase *base);
+
+    String coap_to_string(uint8_t *coap_data_ptr,
+                          int coap_data_ptr_length);
+
+    void execute_nsdl_process_loop();
+
+    uint64_t registration_time();
+
+    M2MBase* find_resource(const String &object,
+                           uint8_t *token = NULL,
+                           uint8_t token_len = 0);
+
+    M2MBase* find_resource(const M2MObject *object,
+                           const String &object_instance,
+                           uint8_t *token = NULL,
+                           uint8_t token_len = 0);
+
+    M2MBase* find_resource(const M2MObjectInstance *object_instance,
+                           const String &resource_instance,
+                           uint8_t *token = NULL,
+                           uint8_t token_len = 0);
+
+    M2MBase* find_resource(const M2MResource *resource,
+                           const String &object_name,
+                           const String &resource_instance,
+                           uint8_t *token = NULL,
+                           uint8_t token_len = 0);
+
+    bool object_present(M2MObject * object) const;
+
+    M2MInterface::Error interface_error(sn_coap_hdr_s *coap_header);
+
+    void send_object_observation(M2MObject *object,
+                                 uint16_t obs_number,
+                                 m2m::Vector<uint16_t> changed_instance_ids,
+                                 bool send_object);
+
+    void send_object_instance_observation(M2MObjectInstance *object_instance,
+                                          uint16_t obs_number);
+
+    void send_resource_observation(M2MResource *resource, uint16_t obs_number);
+
+    void send_notification(uint8_t *token,
+                           uint8_t  token_length,
+                           uint8_t *value,
+                           uint32_t value_length,
+                           uint16_t observation,
+                           uint32_t max_age,
+                           uint8_t  coap_content_type);
+
+    /**
+     * @brief Allocate (size + 1) amount of memory, copy size bytes into
+     * it and add zero termination.
+     * @param source Source string to copy, may not be NULL.
+     * @param size The size of memory to be reserved.
+    */
+    static uint8_t* alloc_string_copy(const uint8_t* source, uint16_t size);
+
+    /**
+     * @brief Utility method to convert given lifetime int to ascii
+     * and allocate a buffer for it and set it to _endpoint->lifetime_ptr.
+     * @param lifetime A new value for lifetime.
+    */
+    void set_endpoint_lifetime_buffer(int lifetime);
+
+    /**
+     * @brief Handle incoming bootstrap PUT message.
+     * @param coap_header, Received CoAP message
+     * @param address, Server address
+    */
+    void handle_bootstrap_put_message(sn_coap_hdr_s *coap_header, sn_nsdl_addr_s *address);
+
+    /**
+     * @brief Handle bootstrap finished message.
+     * @param coap_header, Received CoAP message
+     * @param address, Server address
+    */
+    void handle_bootstrap_finished(sn_coap_hdr_s *coap_header,sn_nsdl_addr_s *address);
+
+    /**
+     * @brief Handle bootstrap delete message.
+     * @param coap_header, Received CoAP message
+     * @param address, Server address
+    */
+    void handle_bootstrap_delete(sn_coap_hdr_s *coap_header,sn_nsdl_addr_s *address);
+
+    /**
+     * @brief Parse bootstrap TLV message.
+     * @param coap_header, Received CoAP message
+     * @return True if parsing was succesful else false
+    */
+    bool parse_bootstrap_message(sn_coap_hdr_s *coap_header, bool is_security_object);
+
+    /**
+     * @brief Parse bootstrap TLV message.
+     * @param coap_header, Received CoAP message
+     * @return True if parsing was succesful else false
+    */
+    bool validate_security_object();
+
+    /**
+     * @brief Handle bootstrap errors.
+    */
+    void handle_bootstrap_error();
+
+private:
+
+    M2MNsdlObserver                         &_observer;
+    M2MObjectList                            _object_list;
+    sn_nsdl_ep_parameters_s                 *_endpoint;
+    nsdl_s                                  *_nsdl_handle;
+    M2MSecurity                             *_security; // Not owned
+    M2MServer                               _server;
+    M2MTimer                                *_nsdl_exceution_timer;
+    M2MTimer                                *_registration_timer;
+    sn_nsdl_addr_s                          _sn_nsdl_address;
+    String                                  _endpoint_name;
+    uint32_t                                _counter_for_nsdl;
+    uint16_t                                _bootstrap_id;
+    bool                                    _unregister_ongoing;
+    bool                                    _identity_accepted;
+
+friend class Test_M2MNsdlInterface;
+
+};
+
+#endif // M2MNSDLINTERFACE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/m2mnsdlobserver.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_NSDL_OBSERVER_H
+#define M2M_NSDL_OBSERVER_H
+
+#include "include/nsdllinker.h"
+
+//FORWARD DECLARATION
+class M2MSecurity;
+class M2MServer;
+
+/**
+ * @brief Observer class for informing NSDL callback to the state machine
+ */
+
+class M2MNsdlObserver
+{
+
+public :
+
+    /**
+    * @brief Informs that coap message is ready.
+    * @param data_ptr, Data object of coap message.
+    * @param data_len, Length of the data object.
+    * @param address_ptr, Address structure of the server.
+    */
+    virtual void coap_message_ready(uint8_t *data_ptr,
+                                    uint16_t data_len,
+                                    sn_nsdl_addr_s *address_ptr) = 0;
+
+    /**
+    * @brief Informs that client is registered successfully.
+    * @param server_object, Server object associated with
+    * registered server.
+    */
+    virtual void client_registered(M2MServer *server_object) = 0;
+
+    /**
+    * @brief Informs that client registration is updated successfully.
+    * @param server_object, Server object associated with
+    * registered server.
+    */
+    virtual void registration_updated(const M2MServer &server_object) = 0;
+
+    /**
+    * @brief Informs that some error occured during
+    * registration.
+    * @param error_code, Error code for registration error
+    * @param retry, Indicates state machine to re-establish connection
+    */
+    virtual void registration_error(uint8_t error_code, bool retry = false) = 0;
+
+    /**
+    * @brief Informs that client is unregistered successfully.
+    */
+    virtual void client_unregistered() = 0;
+
+    /**
+    * @brief Informs that client bootstrapping is done.
+    * @param security_object, M2MSecurity Object which contains information about
+    * LWM2M server fetched from bootstrap server.
+    */
+    virtual void bootstrap_done(M2MSecurity *security_object) = 0;
+
+    /**
+    * @brief Informs that client bootstrapping is waiting for message to be sent.
+    * @param security_object, M2MSecurity Object which contains information about
+    * LWM2M server fetched from bootstrap server.
+    */
+    virtual void bootstrap_wait(M2MSecurity *security_object) = 0;
+
+    /**
+    * @brief Informs that some error occured during
+    * bootstrapping.
+    */
+    virtual void bootstrap_error() = 0;
+
+    /**
+    * @brief Informs that received data has been processed.
+    */
+    virtual void coap_data_processed() = 0;
+
+    /**
+     * @brief Callback informing that the value of the resource object is updated by server.
+     * @param base Object whose value is updated.
+     */
+    virtual void value_updated(M2MBase *base) = 0;
+};
+#endif // M2M_NSDL_OBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/m2mreporthandler.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2MREPORTHANDLER_H
+#define M2MREPORTHANDLER_H
+
+// Support for std args
+#include <stdint.h>
+#include "mbed-client/m2mconfig.h"
+#include "mbed-client/m2mbase.h"
+#include "mbed-client/m2mtimerobserver.h"
+#include "mbed-client/m2mresourceinstance.h"
+#include "mbed-client/m2mvector.h"
+#include "mbed-client/m2mtimer.h"
+
+//FORWARD DECLARATION
+class M2MReportObserver;
+class M2MTimer;
+class M2MResourceInstance;
+
+/**
+ *  @brief M2MReportHandler.
+ *  This class is handles all the observation related operations.
+ */
+class M2MReportHandler: public M2MTimerObserver
+{
+private:
+    // Prevents the use of assignment operator by accident.
+    M2MReportHandler& operator=( const M2MReportHandler& /*other*/ );
+
+public:
+
+    M2MReportHandler(M2MReportObserver &observer);
+
+public:
+
+    /**
+     * Enum defining which write attributes are set.
+    */
+    enum {
+        Cancel = 1,
+        Pmin = 2,
+        Pmax = 4,
+        Lt = 8,
+        Gt = 16,
+        St = 32
+    };
+
+    /**
+     * Destructor
+     */
+    virtual ~M2MReportHandler();
+
+    /**
+     * @brief Sets that object is under observation.
+     * @param Value for the observation.
+     * @param handler, Handler object for sending
+     * observation callbacks.
+     */
+    void set_under_observation(bool observed);
+
+    /**
+     * @brief Sets the value of the given resource.
+     * @param value, Value of the observed resource.
+     */
+    void set_value(float value);
+
+    /**
+     * @brief Sets notification trigger.
+     * @param obj_instance_id, Object instance id that has changed
+     */
+    void set_notification_trigger(uint16_t obj_instance_id = 0);
+
+    /**
+     * @brief Parses the received query for notification
+     * attribute.
+     * @param query Query to be parsed for attributes.
+     * @param type Type of the Base Object.
+     * @param resource_type Type of the Resource.
+     * @return true if required attributes are present else false.
+     */
+    bool parse_notification_attribute(const char *query,
+                                              M2MBase::BaseType type,
+                                              M2MResourceInstance::ResourceType resource_type = M2MResourceInstance::OPAQUE);
+
+    /**
+    * @brief Set back to default values.
+    */
+    void set_default_values();
+
+    /**
+     * @brief Return write attribute flags.
+     */
+    uint8_t attribute_flags();
+
+protected : // from M2MTimerObserver
+
+    virtual void timer_expired(M2MTimerObserver::Type type =
+                               M2MTimerObserver::Notdefined);
+
+private:
+
+
+
+    bool set_notification_attribute(const char* option,
+            M2MBase::BaseType type,
+            M2MResourceInstance::ResourceType resource_type);
+
+    /**
+     * @brief Schedule a report, if the pmin is exceeded
+     * then report immediately else store the state to be
+     * reported once the time fires.
+     */
+    void schedule_report();
+
+    /**
+    * @brief Reports a sample that satisfies the reporting criteria.
+    */
+    void report();
+
+    /**
+    * @brief Manage timers for pmin and pmax.
+    */
+    void handle_timers();
+
+    /**
+    * @brief Check whether notification params can be accepted.
+    */
+    bool check_attribute_validity();
+
+    /**
+    * @brief Stop pmin & pmax timers.
+    */
+    void stop_timers();
+
+    /**
+     * @brief Check if current value match threshold values.
+     * @return True if notify can be send otherwise false.
+     */
+    bool check_threshold_values();
+
+    /**
+     * @brief Check whether current value matches with GT & LT.
+     * @return True if current value match with GT or LT values.
+     */
+    bool check_gt_lt_params();
+
+private:
+    M2MReportObserver           &_observer;
+    uint8_t                     _attribute_state;
+    bool                        _notify;
+    bool                        _pmin_exceeded;
+    bool                        _pmax_exceeded;
+    M2MTimer                    _pmin_timer;
+    M2MTimer                    _pmax_timer;
+    int32_t                     _pmax;
+    int32_t                     _pmin;
+    float                       _current_value;
+    float                       _gt;
+    float                       _lt;
+    float                       _st;
+    float                       _high_step;
+    float                       _low_step;
+    float                       _last_value;
+    m2m::Vector<uint16_t>       _changed_instance_ids;
+
+friend class Test_M2MReportHandler;
+
+};
+
+#endif // M2MREPORTHANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/m2mtlvdeserializer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2mvector.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+
+/**
+ * @brief M2MTLVDeserializer
+ * TLV Deserialiser get the object instances and resources as binary data and 
+ * builds the <code>lwm2m</code> representation from it. See OMA-LWM2M 
+ * specification, chapter 6.1 for the resource model and chapter 6.3.3 for
+ * the OMA-TLV specification.
+ */
+class M2MTLVDeserializer {
+
+public :
+
+    typedef enum {
+        None,
+        NotFound,
+        NotAllowed,
+        NotValid
+    } Error;
+
+    typedef enum {
+        Put,
+        Post
+    } Operation;
+
+
+    /**
+    * Constructor.
+    */
+    M2MTLVDeserializer();
+
+    /**
+    * Destructor.
+    */
+    ~M2MTLVDeserializer();
+
+    /**
+     * This method checks whether the given binary encodes an object instance
+     * or something else. It returns <code>true</code> if bits 7-6 of the first
+     * byte is "00".
+     * @param tlv Binary to be checked as LWM2M object instance
+     * @return <code>true</code> or <code>false</code>.
+     */
+    bool is_object_instance(uint8_t *tlv);
+
+    
+    /**
+     * This method checks whether the given binary encodes a resource or 
+     * something else. It returns <code>true</code> if bits 7-6 of the first
+     * byte is "11".
+     * @param tlv Binary to be checked as LWM2M resource.
+     * @return <code>true</code> or <code>false</code>.
+     */
+    bool is_resource(uint8_t *tlv);
+
+    /**
+     * This method checks whether the given binary encodes a multiple resource
+     * or something else. It returns <code>true</code> if bits 7-6 of the first
+     * byte is "10".
+     * @param tlv Binary to be checked as LWM2M multiple resource.
+     * @return <code>true</code> or <code>false</code>.
+     */
+    bool is_multiple_resource(uint8_t *tlv);
+    
+    /**
+     * This method checks whether the given binary encodes a resource instance
+     * or something else. It returns <code>true</code> if bits 7-6 of the first
+     * byte is "01".
+     * @param tlv Binary to be checked as LWM2M resource instance.
+     * @return <code>true</code> or <code>false</code>.
+     */
+    bool is_resource_instance(uint8_t *tlv);
+
+    /**
+     * Deserialises the given binary that must encode object instances. Binary
+     * array can be checked before invoking this method with 
+     */
+    M2MTLVDeserializer::Error deserialise_object_instances(uint8_t* tlv,
+                                                           uint32_t tlv_size,
+                                                           M2MObject &object,
+                                                           M2MTLVDeserializer::Operation operation);
+
+    /**
+     * Deserialises the given binary that must encode resources. Binary array 
+     * can be checked before invoking this method.
+     */
+    M2MTLVDeserializer::Error deserialize_resources(uint8_t *tlv,
+                                                    uint32_t tlv_size,
+                                                    M2MObjectInstance &object_instance,
+                                                    M2MTLVDeserializer::Operation operation);
+
+    /**
+     * Deserialises the given binary that must encode resource instances. Binary array
+     * can be checked before invoking this method.
+     */
+    M2MTLVDeserializer::Error deserialize_resource_instances(uint8_t *tlv,
+                                                             uint32_t tlv_size,
+                                                             M2MResource &resource,
+                                                             M2MTLVDeserializer::Operation operation);
+    /**
+     * This method return object instance id or resource id.
+     * @param tlv Binary to be checked
+     * @return Object instance id or resource id.
+     */
+    uint16_t instance_id(uint8_t *tlv);
+    
+private:
+
+    M2MTLVDeserializer::Error deserialize_object_instances(uint8_t *tlv,
+                                                           uint32_t tlv_size,
+                                                           uint32_t offset,
+                                                           M2MObject &object,
+                                                           M2MTLVDeserializer::Operation operation,
+                                                           bool update_value);
+    
+    M2MTLVDeserializer::Error deserialize_resources(uint8_t *tlv,
+                                                    uint32_t tlv_size,
+                                                    uint32_t offset,
+                                                    M2MObjectInstance &object_instance,
+                                                    M2MTLVDeserializer::Operation operation,
+                                                    bool update_value);
+
+    M2MTLVDeserializer::Error deserialize_resource_instances(uint8_t *tlv,
+                                                             uint32_t tlv_size,
+                                                             uint32_t offset,
+                                                             M2MResource &resource,
+                                                             M2MObjectInstance &object_instance,
+                                                             M2MTLVDeserializer::Operation operation,
+                                                             bool update_value);
+
+    M2MTLVDeserializer::Error deserialize_resource_instances(uint8_t *tlv,
+                                                             uint32_t tlv_size,
+                                                             uint32_t offset,
+                                                             M2MResource &resource,
+                                                             M2MTLVDeserializer::Operation operation,
+                                                             bool update_value);
+
+    bool is_object_instance(uint8_t *tlv, uint32_t offset);
+    
+    bool is_resource(uint8_t *tlv, uint32_t offset);
+    
+    bool is_multiple_resource(uint8_t *tlv, uint32_t offset);
+    
+    bool is_resource_instance(uint8_t *tlv, uint32_t offset);
+};
+
+class TypeIdLength {
+
+public:
+
+    static TypeIdLength* createTypeIdLength(uint8_t *tlv, uint32_t offset);
+
+    TypeIdLength* deserialize();
+
+    void deserialiseID (uint32_t idLength);
+
+    void deserialiseLength (uint32_t lengthType);
+
+    uint8_t             *_tlv;
+    uint32_t            _offset;
+    uint32_t            _type;
+    uint16_t            _id;
+    uint32_t            _length;
+
+    friend class Test_M2MTLVDeserializer;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/m2mtlvserializer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2mvector.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+
+/**
+ * @brief M2MTLVSerializer
+ * TLV Serialiser constructs the binary representation of object instances,
+ * resources and resource instances (see OMA-LWM2M specification, chapter 6.1
+ * for resource model) as OMA-TLV according described in chapter 6.3.3. 
+ * 
+ */
+class M2MTLVSerializer {
+
+public:
+
+    /**
+    * Constructor.
+    */
+    M2MTLVSerializer();
+
+    /**
+    * Destructor.
+    */
+    ~M2MTLVSerializer();
+
+    /**
+     * Serialises given objects instances that contain resources or multiple 
+     * resources. Object instance IDs are also encoded. This method must be 
+     * used when an operation targets an object with (potential) multiple 
+     * instances like "GET /1". In that case the generated TLV will contain the
+     * following data:
+     * <ul>
+     * <li> ./0
+     * <li> ./0/0
+     * <li> ./0/1
+     * <li> ...
+     * <li> ./1
+     * <li> ./1/0
+     * <li> ./1/1
+     * <li> ...
+     * </ul>
+     *    
+     * @param objects List of object instances.
+     * @return Object instances encoded binary as OMA-TLV 
+     * @see #serializeObjectInstances(List) 
+     */
+    uint8_t* serialize(M2MObjectInstanceList object_instance_list, uint32_t &size);
+
+    /**
+     * Serialises given resources with no information about the parent object
+     * instance. This method must be used when an operation targets an object
+     * instance like "GET /1/0" or a single-instance object like "GET /3//".
+     * Resources may have single or multiple instances. The generated TLV will 
+     * contain the following data as response to "GET /3//":
+     * <ul>
+     * <li> ./0
+     * <li> ./1
+     * <li> ./2
+     * <li> ./6/0 (1st instance of a multiple resource)
+     * <li> ./6/1 (2nd instance of a multiple resource)
+     * <li> ...
+     * </ul>
+     * @param resources Array of resources and resource instances.
+     * @return Resources encoded binary as OMA-TLV
+     * @see #serializeResources(List)
+     */
+    uint8_t* serialize(M2MResourceList resource_list, uint32_t &size);
+
+    uint8_t* serialize(M2MResource *resource, uint32_t &size);
+
+private :
+
+    uint8_t* serialize_object_instances(M2MObjectInstanceList object_instance_list, uint32_t &size);
+
+    uint8_t* serialize_resources(M2MResourceList resource_list, uint32_t &size, bool &valid);
+
+    void serialize(uint16_t id, M2MObjectInstance *object_instance, uint8_t *&data, uint32_t &size);
+    
+    bool serialize (M2MResource *resource, uint8_t *&data, uint32_t &size);
+
+    bool serialize_resource(M2MResource *resource, uint8_t *&data, uint32_t &size);
+
+    bool serialize_multiple_resource(M2MResource *resource, uint8_t *&data, uint32_t &size);
+
+    void serialize_resource_instance(uint16_t id, M2MResourceInstance *resource, uint8_t *&data, uint32_t &size);
+    
+    void serialize_TILV (uint8_t type, uint16_t id, uint8_t *value, uint32_t value_length, uint8_t *&data, uint32_t &size);
+
+    uint8_t* serialize_id(uint16_t id, uint32_t &size);
+
+    uint8_t* serialize_length(uint32_t length, uint32_t &size);
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/nsdlaccesshelper.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef NSDL_ACCESS_HELPER_H
+#define NSDL_ACCESS_HELPER_H
+#include "mbed-client/m2mconnectionhandler.h"
+#include "include/m2mnsdlinterface.h"
+
+typedef Vector<M2MNsdlInterface  *> M2MNsdlInterfaceList;
+extern M2MNsdlInterfaceList __nsdl_interface_list;
+extern M2MConnectionHandler *__connection_handler;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+uint8_t __nsdl_c_callback(struct nsdl_s * nsdl_handle,
+                          sn_coap_hdr_s *received_coap_ptr,
+                          sn_nsdl_addr_s *address,
+                          sn_nsdl_capab_e nsdl_capab);
+void *__nsdl_c_memory_alloc(uint16_t size);
+void __nsdl_c_memory_free(void *ptr);
+uint8_t __nsdl_c_send_to_server(struct nsdl_s * nsdl_handle,
+                                sn_nsdl_capab_e protocol,
+                                uint8_t *data_ptr,
+                                uint16_t data_len,
+                                sn_nsdl_addr_s *address_ptr);
+uint8_t __nsdl_c_received_from_server(struct nsdl_s * nsdl_handle,
+                                      sn_coap_hdr_s *coap_header,
+                                      sn_nsdl_addr_s *address_ptr);
+
+void *__socket_malloc( void * context, size_t size);
+void __socket_free(void * context, void * ptr);
+
+M2MNsdlInterface* get_interface(struct nsdl_s* nsdl_handle);
+
+void __mutex_claim();
+void __mutex_release();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // NSDL_ACCESS_HELPER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/nsdllinker.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef NSDL_LINKER_H
+#define NSDL_LINKER_H
+
+#include <stdint.h>
+#include "nsdl-c/sn_nsdl.h"        // libCoap includes
+#include "nsdl-c/sn_coap_header.h"
+#include "nsdl-c/sn_coap_protocol.h"
+#include "nsdl-c/sn_nsdl_lib.h"
+#include "ns_list.h"
+
+#endif // NSDL_LINKER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/smartpointer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SMART_POINTER_H
+#define SMART_POINTER_H
+
+class ReferenceCount
+{
+private:
+
+    int _count; // Reference count
+
+public:
+
+void add_ref()
+{
+    // Increment the reference count
+    _count++;
+}
+
+int release()
+{
+    // Decrement the reference count and
+    // return the reference count.
+    return --_count;
+}
+};
+
+template < typename T > class SmartPointer
+{
+private:
+
+    T                   *_data;         // Generic pointer to be stored
+    ReferenceCount      *_reference;    // Reference count
+
+
+public:
+
+SmartPointer()
+: _data(0), _reference(0)
+{
+    // Create a new reference
+    _reference = new ReferenceCount();
+    // Increment the reference count
+    _reference->add_ref();
+}
+
+SmartPointer(T* value)
+: _data(value), _reference(0)
+{
+    // Create a new reference
+    _reference = new ReferenceCount();
+    // Increment the reference count
+    _reference->add_ref();
+}
+
+SmartPointer(const SmartPointer<T>& smart_pointer)
+: _data(smart_pointer._data), reference(smart_pointer._reference)
+{
+    // Copy constructor
+    // Copy the data and reference pointer
+    // and increment the reference count
+    _reference->add_ref();
+}
+
+~SmartPointer()
+{
+    if(_reference->release() == 0) {
+        delete _data;
+        delete _reference;
+    }
+}
+
+T& operator* ()
+{
+    return *_data;
+}
+
+T* operator-> ()
+{
+    return _data;
+}
+
+SmartPointer<T>& operator = (const SmartPointer<T>& smart_pointer)
+{
+    // Assignment operator
+    if (this != &SmartPointer) { // Avoid self assignment
+        // Decrement the old reference count
+        // if reference become zero delete the old data
+        if(_reference->release() == 0) {
+           delete _data;
+           delete _reference;
+        }
+
+        // Copy the data and reference pointer
+        // and increment the reference count
+        _data = SmartPointer._data;
+        _reference = SmartPointer._reference;
+        _reference->add_ref();
+    }
+    return *this;
+}
+
+};
+
+#endif // SMART_POINTER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mbase.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,766 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbed-client/m2mbase.h"
+#include "mbed-client/m2mobservationhandler.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2mtimer.h"
+
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+
+#include "include/m2mreporthandler.h"
+#include "include/nsdlaccesshelper.h"
+#include "mbed-trace/mbed_trace.h"
+#include <assert.h>
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define TRACE_GROUP "mClt"
+
+M2MBase::M2MBase(const String& resource_name,
+                 M2MBase::Mode mode,
+                 const String &resource_type,
+                 char *path,
+                 bool external_blockwise_store)
+:
+  _sn_resource(NULL),
+  _report_handler(NULL),
+  _observation_handler(NULL),
+  _token(NULL),
+  _function_pointer(NULL),
+  _value_updated_callback(NULL),
+  _observation_number(0),
+  _token_length(0),
+  _observation_level(M2MBase::None),
+  _is_under_observation(false)
+{
+    // Checking the name length properly, i.e returning error is impossible from constructor without exceptions
+    assert(resource_name.length() <= MAX_ALLOWED_STRING_LENGTH);
+
+    _sn_resource = (lwm2m_parameters_s*)memory_alloc(sizeof(lwm2m_parameters_s));
+    if(_sn_resource) {
+        memset(_sn_resource, 0, sizeof(lwm2m_parameters_s));
+        _sn_resource->free_on_delete = true;
+        _sn_resource->dynamic_resource_params =
+                (sn_nsdl_dynamic_resource_parameters_s*)memory_alloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
+        if(_sn_resource->dynamic_resource_params) {
+            memset(_sn_resource->dynamic_resource_params,
+                   0, sizeof(sn_nsdl_dynamic_resource_parameters_s));
+            _sn_resource->dynamic_resource_params->static_resource_parameters =
+                    (sn_nsdl_static_resource_parameters_s*)memory_alloc(sizeof(sn_nsdl_static_resource_parameters_s));
+
+            // Set callback function in case of dynamic resource
+            if (M2MBase::Dynamic == mode) {
+                _sn_resource->dynamic_resource_params->sn_grs_dyn_res_callback = __nsdl_c_callback;
+            }
+
+            if(_sn_resource->dynamic_resource_params->static_resource_parameters) {
+                // Cast const away to able to compile using MEMORY_OPTIMIZED_API flag
+                sn_nsdl_static_resource_parameters_s *params =
+                        const_cast<sn_nsdl_static_resource_parameters_s *>(_sn_resource->dynamic_resource_params->static_resource_parameters);
+                memset(params, 0, sizeof(sn_nsdl_static_resource_parameters_s));
+                const size_t len = strlen(resource_type.c_str());
+                if (len > 0) {
+                    params->resource_type_ptr = (char*)
+                            alloc_string_copy((uint8_t*) resource_type.c_str(), len);
+                }
+                params->path = (uint8_t*)path;
+                params->pathlen = strlen(path);
+
+
+                params->mode = (const uint8_t)mode;
+                params->free_on_delete = true;
+                params->external_memory_block = external_blockwise_store;
+                _sn_resource->dynamic_resource_params->static_resource_parameters = params;
+            }
+        }
+
+        _sn_resource->name = stringdup((char*)resource_name.c_str());
+        _sn_resource->dynamic_resource_params->publish_uri = true;
+        _sn_resource->dynamic_resource_params->free_on_delete = true;
+
+        if(is_integer(resource_name) && resource_name.size() <= MAX_ALLOWED_STRING_LENGTH) {
+            _sn_resource->name_id = strtoul(resource_name.c_str(), NULL, 10);
+            if(_sn_resource->name_id > 65535){
+                _sn_resource->name_id = -1;
+            }
+        } else {
+            _sn_resource->name_id = -1;
+        }
+    }
+}
+
+M2MBase::M2MBase(const lwm2m_parameters_s *s):
+    _sn_resource((lwm2m_parameters_s*) s),
+    _report_handler(NULL),
+    _observation_handler(NULL),
+    _token(NULL),
+    _function_pointer(NULL),
+    _value_updated_callback(NULL),
+    _observation_number(0),
+    _token_length(0),
+    _observation_level(M2MBase::None),
+    _is_under_observation(false)
+{
+    // Set callback function in case of dynamic resource
+    if (M2MBase::Dynamic == _sn_resource->dynamic_resource_params->static_resource_parameters->mode) {
+        _sn_resource->dynamic_resource_params->sn_grs_dyn_res_callback = __nsdl_c_callback;
+    }
+}
+
+M2MBase::~M2MBase()
+{
+    delete _report_handler;
+    free_resources();
+    free(_token);
+    delete _function_pointer;
+    delete _value_updated_callback;
+}
+
+char* M2MBase::create_path(const M2MObject &parent, uint16_t object_instance)
+{
+    StringBuffer<5> obj_inst_id;
+    obj_inst_id.append_int(object_instance);
+
+    return create_path(parent, obj_inst_id.c_str());
+}
+
+char* M2MBase::create_path(const M2MObject &parent, const char *name)
+{
+    char * result = NULL;
+    StringBuffer<(MAX_NAME_SIZE * 2 + (2 + 1))> path;
+
+    const char* obj_name = parent.name();
+
+    // XXX: ensure space
+    path.append(obj_name);
+    path.append('/');
+    path.append(name);
+
+    result = stringdup(path.c_str());
+    return result;
+}
+
+char* M2MBase::create_path(const M2MResource &parent, uint16_t resource_instance)
+{
+    StringBuffer<5> res_inst;
+    res_inst.append_int(resource_instance);
+
+    return create_path(parent, res_inst.c_str());
+}
+
+char* M2MBase::create_path(const M2MResource &parent, const char *name)
+{
+    char * result = NULL;
+    StringBuffer<(MAX_NAME_SIZE * 4 + (3 + 1))> path;
+    M2MObjectInstance& parent_object_instance = parent.get_parent_object_instance();
+    M2MObject& parent_object = parent_object_instance.get_parent_object();
+
+    const char* obj_name = parent_object.name();
+
+    // Note: the parent_object_instance.name() contains name of its parent object, not the name of instance,
+    // so we need to skip that here
+    const uint16_t obj_inst_id = parent_object_instance.instance_id();
+
+    const char* resource_name = parent.name();
+
+    // XXX: ensure space
+    path.append(obj_name);
+    path.append('/');
+    path.append_int(obj_inst_id);
+    path.append('/');
+    path.append(resource_name);
+    path.append('/');
+    path.append(name);
+
+    result = stringdup(path.c_str());
+    return result;
+}
+
+char* M2MBase::create_path(const M2MObjectInstance &parent, const char *name)
+{
+    char * result = NULL;
+    StringBuffer<(MAX_NAME_SIZE * 3 + (2 + 1))> path;
+    M2MObject& parent_object = parent.get_parent_object();
+
+    const char* obj_name = parent_object.name();
+    // Note: the parent_object_instance.name() contains name of its parent object, not the name of instance,
+    // so we need to skip that here
+    const uint16_t obj_inst_id = parent.instance_id();
+
+    // XXX: ensure space
+    path.append(obj_name);
+    path.append('/');
+    path.append_int(obj_inst_id);
+    path.append('/');
+    path.append(name);
+
+    result = stringdup(path.c_str());
+    return result;
+}
+
+
+void M2MBase::set_operation(M2MBase::Operation opr)
+{
+    // If the mode is Static, there is only GET_ALLOWED supported.
+    if(M2MBase::Static == mode()) {
+        _sn_resource->dynamic_resource_params->access = M2MBase::GET_ALLOWED;
+    } else {
+        _sn_resource->dynamic_resource_params->access = opr;
+    }
+}
+
+#ifndef MEMORY_OPTIMIZED_API
+void M2MBase::set_interface_description(const char *desc)
+{
+    assert(_sn_resource->dynamic_resource_params->static_resource_parameters->free_on_delete);
+    free(_sn_resource->dynamic_resource_params->static_resource_parameters->interface_description_ptr);
+    _sn_resource->dynamic_resource_params->static_resource_parameters->interface_description_ptr = NULL;
+    const size_t len = strlen(desc);
+    if (len > 0 ) {
+        _sn_resource->dynamic_resource_params->static_resource_parameters->interface_description_ptr =
+                (char*)alloc_string_copy((uint8_t*) desc, len);
+    }
+}
+
+void M2MBase::set_interface_description(const String &desc)
+{
+    assert(_sn_resource->dynamic_resource_params->static_resource_parameters->free_on_delete);
+    set_interface_description(desc.c_str());
+}
+
+void M2MBase::set_resource_type(const String &res_type)
+{
+    assert(_sn_resource->dynamic_resource_params->static_resource_parameters->free_on_delete);
+    set_resource_type(res_type.c_str());
+}
+
+void M2MBase::set_resource_type(const char *res_type)
+{
+    assert(_sn_resource->dynamic_resource_params->static_resource_parameters->free_on_delete);
+    free(_sn_resource->dynamic_resource_params->static_resource_parameters->resource_type_ptr);
+    _sn_resource->dynamic_resource_params->static_resource_parameters->resource_type_ptr = NULL;
+    const size_t len = strlen(res_type);
+    if (len > 0) {
+        _sn_resource->dynamic_resource_params->static_resource_parameters->resource_type_ptr = (char*)
+                alloc_string_copy((uint8_t*) res_type, len);
+    }
+}
+#endif
+
+void M2MBase::set_coap_content_type(const uint8_t con_type)
+{
+    _sn_resource->dynamic_resource_params->coap_content_type = con_type;
+}
+
+void M2MBase::set_observable(bool observable)
+{
+    _sn_resource->dynamic_resource_params->observable = observable;
+}
+
+void M2MBase::add_observation_level(M2MBase::Observation obs_level)
+{
+    _observation_level = (M2MBase::Observation)(_observation_level | obs_level);
+}
+
+void M2MBase::remove_observation_level(M2MBase::Observation obs_level)
+{
+    _observation_level = (M2MBase::Observation)(_observation_level & ~obs_level);
+}
+
+void M2MBase::set_observation_handler(M2MObservationHandler *handler)
+{
+    tr_debug("M2MBase::set_observation_handler - handler: 0x%x", handler);
+    _observation_handler = handler;
+}
+
+
+void M2MBase::set_under_observation(bool observed,
+                                    M2MObservationHandler *handler)
+{
+    tr_debug("M2MBase::set_under_observation - observed: %d", observed);
+    tr_debug("M2MBase::set_under_observation - base_type: %d", base_type());
+    _is_under_observation = observed;
+    _observation_handler = handler;
+    if (handler) {
+        if (base_type() != M2MBase::ResourceInstance) {
+            // Create report handler only if it does not exist and one wants observation
+            // This saves 76 bytes of memory on most usual case.
+            if (observed) {
+                if(!_report_handler) {
+                    _report_handler = new M2MReportHandler(*this);
+                }
+            }
+            if (_report_handler) {
+                _report_handler->set_under_observation(observed);
+            }
+        }
+    } else {
+        delete _report_handler;
+        _report_handler = NULL;
+    }
+}
+
+void M2MBase::set_observation_token(const uint8_t *token, const uint8_t length)
+{
+     free(_token);
+     _token = NULL;
+     _token_length = 0;
+
+    if( token != NULL && length > 0 ) {
+        _token = alloc_string_copy((uint8_t *)token, length);
+        if(_token) {
+            _token_length = length;
+        }
+    }
+}
+
+void M2MBase::set_instance_id(const uint16_t inst_id)
+{
+    _sn_resource->instance_id = inst_id;
+}
+
+void M2MBase::set_observation_number(const uint16_t /*observation_number*/)
+{
+}
+
+void M2MBase::set_max_age(const uint32_t max_age)
+{
+    _sn_resource->max_age = max_age;
+}
+
+M2MBase::BaseType M2MBase::base_type() const
+{
+    return (M2MBase::BaseType)_sn_resource->base_type;
+}
+
+M2MBase::Operation M2MBase::operation() const
+{
+    return (M2MBase::Operation)_sn_resource->dynamic_resource_params->access;
+}
+
+const char* M2MBase::name() const
+{
+    return _sn_resource->name;
+}
+
+int32_t M2MBase::name_id() const
+{
+    return _sn_resource->name_id;
+}
+
+uint16_t M2MBase::instance_id() const
+{
+    return _sn_resource->instance_id;
+}
+
+const char* M2MBase::interface_description() const
+{
+    return (reinterpret_cast<char*>(
+        _sn_resource->dynamic_resource_params->static_resource_parameters->interface_description_ptr));
+}
+
+const char* M2MBase::resource_type() const
+{
+    return (reinterpret_cast<char*>(
+        _sn_resource->dynamic_resource_params->static_resource_parameters->resource_type_ptr));
+}
+
+const char* M2MBase::uri_path() const
+{
+    return (reinterpret_cast<char*>(
+        _sn_resource->dynamic_resource_params->static_resource_parameters->path));
+}
+
+uint8_t M2MBase::coap_content_type() const
+{
+    return _sn_resource->dynamic_resource_params->coap_content_type;
+}
+
+bool M2MBase::is_observable() const
+{
+    return _sn_resource->dynamic_resource_params->observable;
+}
+
+M2MBase::Observation M2MBase::observation_level() const
+{
+    return _observation_level;
+}
+
+void M2MBase::get_observation_token(uint8_t *&token, uint32_t &token_length)
+{
+    token_length = 0;
+    free(token);
+    if (_token) {
+        token = alloc_string_copy((uint8_t *)_token, _token_length);
+        if(token) {
+            token_length = _token_length;
+        }
+    }
+}
+
+M2MBase::Mode M2MBase::mode() const
+{
+    return (M2MBase::Mode)_sn_resource->dynamic_resource_params->static_resource_parameters->mode;
+}
+
+uint16_t M2MBase::observation_number() const
+{
+    return _observation_number;
+}
+
+uint32_t M2MBase::max_age() const
+{
+    return _sn_resource->max_age;
+}
+
+bool M2MBase::handle_observation_attribute(const char *query)
+{
+    tr_debug("M2MBase::handle_observation_attribute - under observation(%d)", is_under_observation());
+    bool success = false;
+    // Create handler if not already exists. Client must able to parse write attributes even when
+    // observation is not yet set
+    if (!_report_handler) {
+        _report_handler = new M2MReportHandler(*this);
+    }
+
+    success = _report_handler->parse_notification_attribute(query,base_type());
+    if (success) {
+        if (is_under_observation()) {
+            _report_handler->set_under_observation(true);
+        }
+     } else {
+        _report_handler->set_default_values();
+    }
+    return success;
+}
+
+void M2MBase::observation_to_be_sent(m2m::Vector<uint16_t> changed_instance_ids, bool send_object)
+{
+    //TODO: Move this to M2MResourceInstance
+    if(_observation_handler) {
+       _observation_number++;
+       _observation_handler->observation_to_be_sent(this,
+                                                    _observation_number,
+                                                    changed_instance_ids,
+                                                    send_object);
+    }
+}
+
+void M2MBase::set_base_type(M2MBase::BaseType type)
+{
+    assert(_sn_resource->free_on_delete);
+    _sn_resource->base_type = type;
+}
+
+sn_coap_hdr_s* M2MBase::handle_get_request(nsdl_s */*nsdl*/,
+                                           sn_coap_hdr_s */*received_coap_header*/,
+                                           M2MObservationHandler */*observation_handler*/)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+sn_coap_hdr_s* M2MBase::handle_put_request(nsdl_s */*nsdl*/,
+                                           sn_coap_hdr_s */*received_coap_header*/,
+                                           M2MObservationHandler */*observation_handler*/,
+                                           bool &)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+sn_coap_hdr_s* M2MBase::handle_post_request(nsdl_s */*nsdl*/,
+                                            sn_coap_hdr_s */*received_coap_header*/,
+                                            M2MObservationHandler */*observation_handler*/,
+                                            bool &,
+                                            sn_nsdl_addr_s *)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+void *M2MBase::memory_alloc(uint32_t size)
+{
+    if(size)
+        return malloc(size);
+    else
+        return 0;
+}
+
+void M2MBase::memory_free(void *ptr)
+{
+    free(ptr);
+}
+
+char* M2MBase::alloc_string_copy(const char* source)
+{
+    assert(source != NULL);
+
+    // Note: the armcc's libc does not have strdup, so we need to implement it here
+    const size_t len = strlen(source);
+
+    return (char*)alloc_string_copy((uint8_t*)source, len);
+}
+
+uint8_t* M2MBase::alloc_string_copy(const uint8_t* source, uint32_t size)
+{
+    assert(source != NULL);
+
+    uint8_t* result = (uint8_t*)memory_alloc(size + 1);
+    if (result) {
+        memcpy(result, source, size);
+        result[size] = '\0';
+    }
+    return result;
+}
+
+uint8_t* M2MBase::alloc_copy(const uint8_t* source, uint32_t size)
+{
+    assert(source != NULL);
+
+    uint8_t* result = (uint8_t*)memory_alloc(size);
+    if (result) {
+        memcpy(result, source, size);
+    }
+    return result;
+}
+
+bool M2MBase::validate_string_length(const String &string, size_t min_length, size_t max_length)
+{
+    bool valid = false;
+
+    const size_t len = string.length();
+    if ((len >= min_length) && (len <= max_length)) {
+        valid = true;
+    }
+
+    return valid;
+}
+
+bool M2MBase::validate_string_length(const char* string, size_t min_length, size_t max_length)
+{
+    bool valid = false;
+
+    if (string != NULL) {
+        const size_t len = strlen(string);
+        if ((len >= min_length) && (len <= max_length)) {
+            valid = true;
+        }
+    }
+
+    return valid;
+}
+
+M2MReportHandler* M2MBase::create_report_handler()
+{
+    if (!_report_handler) {
+        _report_handler = new M2MReportHandler(*this);
+    }
+    return _report_handler;
+}
+
+M2MReportHandler* M2MBase::report_handler()
+{
+    return _report_handler;
+}
+
+M2MObservationHandler* M2MBase::observation_handler()
+{
+    return _observation_handler;
+}
+
+void M2MBase::set_register_uri(bool register_uri)
+{
+    _sn_resource->dynamic_resource_params->publish_uri = register_uri;
+}
+
+bool M2MBase::register_uri()
+{
+    return _sn_resource->dynamic_resource_params->publish_uri;
+}
+
+bool M2MBase::is_integer(const String &value)
+{
+    const char *s = value.c_str();
+    if(value.empty() || ((!isdigit(s[0])) && (s[0] != '-') && (s[0] != '+'))) {
+        return false;
+    }
+    char * p;
+    strtol(value.c_str(), &p, 10);
+    return (*p == 0);
+}
+
+bool M2MBase::is_integer(const char *value)
+{
+    assert(value != NULL);
+
+    if((strlen(value) < 1) || ((!isdigit(value[0])) && (value[0] != '-') && (value[0] != '+'))) {
+        return false;
+    }
+    char * p;
+    strtol(value, &p, 10);
+    return (*p == 0);
+}
+
+bool M2MBase::is_under_observation() const
+{
+    return _is_under_observation;
+}
+
+void M2MBase::set_value_updated_function(value_updated_callback callback)
+{
+    delete _value_updated_callback;
+    // XXX: create a copy of the copy of callback object. Perhaps it would better to
+    // give a reference as parameter and just store that, as it would save some memory.
+    _value_updated_callback = new value_updated_callback(callback);
+}
+
+void M2MBase::set_value_updated_function(value_updated_callback2 callback)
+{
+    delete _function_pointer;
+    _function_pointer = new FP1<void, const char*>(callback);
+    set_value_updated_function(value_updated_callback(_function_pointer,
+                                                      &FP1<void, const char*>::call));
+}
+
+bool M2MBase::is_value_updated_function_set()
+{
+    return (_value_updated_callback) ? true : false;
+}
+
+void M2MBase::execute_value_updated(const String& name)
+{
+    if(_value_updated_callback) {
+        (*_value_updated_callback)(name.c_str());
+    }
+}
+
+bool M2MBase::build_path(StringBuffer<MAX_PATH_SIZE> &buffer, const char *s1, uint16_t i1, const char *s2, uint16_t i2)
+{
+
+    if(!buffer.ensure_space(strlen(s1) + strlen(s2) + (MAX_INSTANCE_SIZE * 2) + 3 + 1)){
+        return false;
+    }
+
+    buffer.append(s1);
+    buffer.append('/');
+    buffer.append_int(i1);
+    buffer.append('/');
+    buffer.append(s2);
+    buffer.append('/');
+    buffer.append_int(i2);
+
+    return true;
+
+}
+
+bool M2MBase::build_path(StringBuffer<MAX_PATH_SIZE_2> &buffer, const char *s1, uint16_t i1, const char *s2)
+{
+    if(!buffer.ensure_space(strlen(s1) + strlen(s2) + MAX_INSTANCE_SIZE + 2 + 1)){
+        return false;
+    }
+
+    buffer.append(s1);
+    buffer.append('/');
+    buffer.append_int(i1);
+    buffer.append('/');
+    buffer.append(s2);
+
+    return true;
+}
+
+bool M2MBase::build_path(StringBuffer<MAX_PATH_SIZE_3> &buffer, const char *s1, uint16_t i1, uint16_t i2)
+{
+    if(!buffer.ensure_space(strlen(s1) + (MAX_INSTANCE_SIZE * 2) + 2 + 1)){
+        return false;
+    }
+
+    buffer.append(s1);
+    buffer.append('/');
+    buffer.append_int(i1);
+    buffer.append('/');
+    buffer.append_int(i2);
+
+    return true;
+}
+
+bool M2MBase::build_path(StringBuffer<MAX_PATH_SIZE_4> &buffer, const char *s1, uint16_t i1)
+{
+    if(!buffer.ensure_space(strlen(s1) + MAX_INSTANCE_SIZE + 1 + 1)){
+        return false;
+    }
+
+    buffer.append(s1);
+    buffer.append('/');
+    buffer.append_int(i1);
+
+    return true;
+}
+
+char* M2MBase::stringdup(const char* src)
+{
+    assert(src != NULL);
+
+    const size_t len = strlen(src) + 1;
+
+    char *dest = (char*)malloc(len);
+
+    if (dest) {
+        memcpy(dest, src, len);
+    }
+    return dest;
+}
+
+void M2MBase::free_resources()
+{
+    // remove the nsdl structures from the nsdlinterface's lists.
+    if (_observation_handler) {
+        _observation_handler->resource_to_be_deleted(this);
+    }
+
+    if (_sn_resource->dynamic_resource_params->static_resource_parameters->free_on_delete) {
+        sn_nsdl_static_resource_parameters_s *params =
+                const_cast<sn_nsdl_static_resource_parameters_s *>(_sn_resource->dynamic_resource_params->static_resource_parameters);
+
+        free(params->path);
+        free(params->resource);
+        free(params->resource_type_ptr);
+        free(params->interface_description_ptr);
+        free(params);
+    }
+    if (_sn_resource->dynamic_resource_params->free_on_delete) {
+        free(_sn_resource->dynamic_resource_params);
+    }
+
+    if (_sn_resource->free_on_delete) {
+        free(_sn_resource->name);
+        free(_sn_resource);
+    }
+}
+
+size_t M2MBase::resource_name_length() const
+{
+    return strlen(_sn_resource->name);
+}
+
+sn_nsdl_dynamic_resource_parameters_s* M2MBase::get_nsdl_resource()
+{
+    return _sn_resource->dynamic_resource_params;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mblockmessage.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2mblockmessage.h"
+#include "mbed-client/m2mconfig.h"
+#include <stdlib.h>
+#include <string.h>
+
+M2MBlockMessage::M2MBlockMessage() :
+    _block_data_ptr(NULL),
+    _total_message_size(0),
+    _block_data_len(0),
+    _block_number(0),
+    _error_code(M2MBlockMessage::ErrorNone),
+    _is_last_block(false),
+    _is_block_message(false)
+{
+}
+
+M2MBlockMessage::~M2MBlockMessage()
+{
+    free(_block_data_ptr);
+    _block_data_ptr = NULL;
+}
+
+void M2MBlockMessage::set_message_info(sn_coap_hdr_s *coap_header)
+{
+    _is_block_message = (coap_header &&
+                coap_header->options_list_ptr &&
+                coap_header->options_list_ptr->block1 != -1) ? true : false;
+
+    if (coap_header && coap_header->options_list_ptr) {
+        // Check total size
+        if (coap_header->options_list_ptr->use_size1) {
+            _total_message_size = coap_header->options_list_ptr->size1;
+        }
+
+        // Default value in coap library is 65kb
+        uint32_t max_size = SN_COAP_MAX_INCOMING_MESSAGE_SIZE;
+        if (_total_message_size > max_size) {
+            _error_code = M2MBlockMessage::EntityTooLarge;
+        } else {
+            _error_code = M2MBlockMessage::ErrorNone;
+        }
+        if (M2MBlockMessage::ErrorNone == _error_code) {
+            // Is last block
+            if (coap_header->options_list_ptr->block1 != -1) {
+//                if (!(*(coap_header->options_list_ptr->block1_ptr + (coap_header->options_list_ptr->block1_len - 1)) & 0x08)) {
+                if (!((coap_header->options_list_ptr->block1) & 0x08)) {
+                    _is_last_block = true;
+                } else {
+                    _is_last_block = false;
+                }
+            }
+
+            _block_number = coap_header->options_list_ptr->block1 >> 4;
+            // Block number
+//            if (coap_header->options_list_ptr->block1_len == 3) {
+//                _block_number = *(coap_header->options_list_ptr->block1_ptr) << 12;
+//                _block_number |= *(coap_header->options_list_ptr->block1_ptr + 1) << 4;
+//                _block_number |= (*(coap_header->options_list_ptr->block1_ptr + 2)) >> 4;
+//            }
+
+//            else if (coap_header->options_list_ptr->block1_len == 2) {
+//                _block_number = *(coap_header->options_list_ptr->block1_ptr) << 4;
+//                _block_number |= (*(coap_header->options_list_ptr->block1_ptr + 1)) >> 4;
+//            }
+//            else if (coap_header->options_list_ptr->block1_len == 1) {
+//                _block_number = (*coap_header->options_list_ptr->block1_ptr) >> 4;
+//            }
+//            else {
+//                _block_number = 0;
+//            }
+
+            // Payload
+            free(_block_data_ptr);
+            _block_data_ptr = NULL;
+            _block_data_len = coap_header->payload_len;
+            if(_block_data_len > 0) {
+                _block_data_ptr = (uint8_t *)malloc(_block_data_len);
+                if (_block_data_ptr) {
+                    memcpy(_block_data_ptr, coap_header->payload_ptr, _block_data_len);
+                }
+            }
+        }
+    }
+}
+
+void M2MBlockMessage::clear_values()
+{
+    free(_block_data_ptr);
+    _block_data_ptr = NULL;
+    _block_data_len = 0;
+    _block_number = 0;
+    _total_message_size = 0;
+    _is_last_block = false;
+    _error_code = M2MBlockMessage::ErrorNone;
+}
+
+bool M2MBlockMessage::is_block_message() const
+{
+    return _is_block_message;
+}
+
+uint16_t M2MBlockMessage::block_number() const
+{
+    return _block_number;
+}
+
+uint32_t M2MBlockMessage::total_message_size() const
+{
+    return _total_message_size;
+}
+
+bool M2MBlockMessage::is_last_block() const
+{
+    return _is_last_block;
+}
+
+uint8_t* M2MBlockMessage::block_data() const
+{
+    return _block_data_ptr;
+}
+
+uint32_t M2MBlockMessage::block_data_len() const
+{
+    return _block_data_len;
+}
+
+M2MBlockMessage::Error M2MBlockMessage::error_code() const
+{
+    return _error_code;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mdevice.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,568 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbed-client/m2mdevice.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+#include "mbed-trace/mbed_trace.h"
+
+#define BUFFER_SIZE 21
+#define TRACE_GROUP "mClt"
+
+M2MDevice* M2MDevice::_instance = NULL;
+
+M2MDevice* M2MDevice::get_instance()
+{
+    if(_instance == NULL) {
+        // ownership of this path is transferred to M2MBase.
+        // Since this object is a singleton, we could use the C-structs to avoid heap
+        // allocation on a lot of M2MDevice -objects data.
+        char *path = stringdup(M2M_DEVICE_ID);
+        if (path) {
+            _instance = new M2MDevice(path);
+        }
+    }
+    return _instance;
+}
+
+void M2MDevice::delete_instance()
+{
+    delete _instance;
+    _instance = NULL;
+}
+
+M2MDevice::M2MDevice(char *path)
+: M2MObject(M2M_DEVICE_ID, path)
+{
+    M2MBase::set_register_uri(false);
+    M2MBase::set_operation(M2MBase::GET_ALLOWED);
+
+    _device_instance = M2MObject::create_object_instance();
+    if(_device_instance) {
+        _device_instance->set_operation(M2MBase::GET_ALLOWED);
+        _device_instance->set_register_uri(true);
+        _device_instance->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+        M2MResource* res = _device_instance->create_dynamic_resource(DEVICE_REBOOT,
+                                                                     OMA_RESOURCE_TYPE,
+                                                                     M2MResourceInstance::OPAQUE,
+                                                                     false);
+        if(res) {
+            res->set_operation(M2MBase::POST_ALLOWED);
+            res->set_register_uri(false);
+        }
+
+        M2MResourceInstance* instance = _device_instance->create_dynamic_resource_instance(DEVICE_ERROR_CODE,
+                                                                 OMA_RESOURCE_TYPE,
+                                                                 M2MResourceInstance::INTEGER,
+                                                                 true,0);
+        if(instance) {
+            M2MResource * dev_res = _device_instance->resource(DEVICE_ERROR_CODE);
+            if(dev_res) {
+                dev_res->set_register_uri(false);
+            }
+            instance->set_operation(M2MBase::GET_ALLOWED);
+
+            instance->set_value(0);
+
+            instance->set_register_uri(false);
+        }
+        res = _device_instance->create_dynamic_resource(DEVICE_SUPPORTED_BINDING_MODE,
+                                                        OMA_RESOURCE_TYPE,
+                                                        M2MResourceInstance::STRING,
+                                                        true);
+        if(res) {
+            res->set_operation(M2MBase::GET_ALLOWED);
+            res->set_value((const uint8_t*)BINDING_MODE_UDP,sizeof(BINDING_MODE_UDP)-1);
+            res->set_register_uri(false);
+        }
+    }
+}
+
+M2MDevice::~M2MDevice()
+{
+}
+
+M2MResource* M2MDevice::create_resource(DeviceResource resource, const String &value)
+{
+    M2MResource* res = NULL;
+    const char* device_id_ptr = "";
+    M2MBase::Operation operation = M2MBase::GET_ALLOWED;
+    if(!is_resource_present(resource) && value.size() <= MAX_ALLOWED_STRING_LENGTH) {
+        switch(resource) {
+            case Manufacturer:
+               device_id_ptr = DEVICE_MANUFACTURER;
+               break;
+            case DeviceType:
+                device_id_ptr = DEVICE_DEVICE_TYPE;
+                break;
+            case ModelNumber:
+                device_id_ptr = DEVICE_MODEL_NUMBER;
+                break;
+            case SerialNumber:
+                device_id_ptr = DEVICE_SERIAL_NUMBER;
+                break;
+            case HardwareVersion:
+                device_id_ptr = DEVICE_HARDWARE_VERSION;
+                break;
+            case FirmwareVersion:
+                device_id_ptr = DEVICE_FIRMWARE_VERSION;
+                break;
+            case SoftwareVersion:
+                device_id_ptr = DEVICE_SOFTWARE_VERSION;
+                break;
+            case UTCOffset:
+                device_id_ptr = DEVICE_UTC_OFFSET;
+                operation = M2MBase::GET_PUT_ALLOWED;
+                break;
+            case Timezone:
+                device_id_ptr = DEVICE_TIMEZONE;
+                operation = M2MBase::GET_PUT_ALLOWED;
+                break;
+            default:
+                break;
+        }
+    }
+    const String device_id(device_id_ptr);
+
+    if(!device_id.empty()) {
+        if(_device_instance) {
+            res = _device_instance->create_dynamic_resource(device_id,
+                                                            OMA_RESOURCE_TYPE,
+                                                            M2MResourceInstance::STRING,
+                                                            true);
+
+            if(res ) {
+                res->set_operation(operation);
+                if (value.empty()) {
+                    res->clear_value();
+                } else {
+                    res->set_value((const uint8_t*)value.c_str(),
+                                   (uint32_t)value.length());
+                }
+                res->set_register_uri(false);
+            }
+        }
+    }
+    return res;
+}
+
+M2MResource* M2MDevice::create_resource(DeviceResource resource, int64_t value)
+{
+    M2MResource* res = NULL;
+    const char* device_id_ptr = "";
+    M2MBase::Operation operation = M2MBase::GET_ALLOWED;
+    if(!is_resource_present(resource)) {
+        switch(resource) {
+        case BatteryLevel:
+            if(check_value_range(resource, value)) {
+                device_id_ptr = DEVICE_BATTERY_LEVEL;
+            }
+            break;
+        case BatteryStatus:
+            if(check_value_range(resource, value)) {
+                device_id_ptr = DEVICE_BATTERY_STATUS;
+            }
+            break;
+        case MemoryFree:
+            device_id_ptr = DEVICE_MEMORY_FREE;
+            break;
+        case MemoryTotal:
+            device_id_ptr = DEVICE_MEMORY_TOTAL;
+            break;
+        case CurrentTime:
+            device_id_ptr = DEVICE_CURRENT_TIME;
+            operation = M2MBase::GET_PUT_ALLOWED;
+            break;
+        default:
+            break;
+        }
+    }
+
+    const String device_id(device_id_ptr);
+
+    if(!device_id.empty()) {
+        if(_device_instance) {
+            res = _device_instance->create_dynamic_resource(device_id,
+                                                            OMA_RESOURCE_TYPE,
+                                                            M2MResourceInstance::INTEGER,
+                                                            true);
+
+            if(res) {
+
+
+                res->set_operation(operation);
+                res->set_value(value);
+
+                res->set_register_uri(false);
+            }
+        }
+    }
+    return res;
+}
+
+M2MResourceInstance* M2MDevice::create_resource_instance(DeviceResource resource, int64_t value,
+                                                 uint16_t instance_id)
+{
+    M2MResourceInstance* res = NULL;
+    const char* device_id_ptr = "";
+    // For these resources multiple instance can exist
+    if(AvailablePowerSources == resource) {
+        if(check_value_range(resource, value)) {
+            device_id_ptr = DEVICE_AVAILABLE_POWER_SOURCES;
+        }
+    } else if(PowerSourceVoltage == resource) {
+        device_id_ptr = DEVICE_POWER_SOURCE_VOLTAGE;
+    } else if(PowerSourceCurrent == resource) {
+        device_id_ptr = DEVICE_POWER_SOURCE_CURRENT;
+    } else if(ErrorCode == resource) {
+        if(check_value_range(resource, value)) {
+            device_id_ptr = DEVICE_ERROR_CODE;
+        }
+    }
+
+    const String device_id(device_id_ptr);
+
+    if(!device_id.empty()) {
+        if(_device_instance) {
+            res = _device_instance->create_dynamic_resource_instance(device_id,OMA_RESOURCE_TYPE,
+                                                                     M2MResourceInstance::INTEGER,
+                                                                     true, instance_id);
+
+            M2MResource *resource = _device_instance->resource(device_id);
+            if(resource) {
+                resource->set_register_uri(false);
+            }
+            if(res) {
+                res->set_value(value);
+                // Only read operation is allowed for above resources
+                res->set_operation(M2MBase::GET_ALLOWED);
+
+                res->set_register_uri(false);
+            }
+        }
+    }
+    return res;
+}
+M2MResource* M2MDevice::create_resource(DeviceResource resource)
+{
+    M2MResource* res = NULL;
+    if(!is_resource_present(resource)) {
+        const char* device_Id_ptr = "";
+        if(FactoryReset == resource) {
+            device_Id_ptr = DEVICE_FACTORY_RESET;
+        } else if(ResetErrorCode == resource) {
+            device_Id_ptr = DEVICE_RESET_ERROR_CODE;
+        }
+        const String device_Id(device_Id_ptr);
+
+        if(_device_instance && !device_Id.empty()) {
+            res = _device_instance->create_dynamic_resource(device_Id,
+                                                            OMA_RESOURCE_TYPE,
+                                                            M2MResourceInstance::OPAQUE,
+                                                            true);
+            M2MResource *resource = _device_instance->resource(device_Id);
+            if(resource) {
+                resource->set_register_uri(false);
+            }
+            if(res) {
+                res->set_operation(M2MBase::POST_ALLOWED);
+                res->set_register_uri(false);
+            }
+        }
+    }
+    return res;
+}
+
+bool M2MDevice::delete_resource(DeviceResource resource)
+{
+    bool success = false;
+    if(M2MDevice::Reboot != resource             &&
+       M2MDevice::ErrorCode != resource          &&
+       M2MDevice::SupportedBindingMode != resource) {
+        if(_device_instance) {
+            success = _device_instance->remove_resource(resource_name(resource));
+        }
+    }
+    return success;
+}
+
+bool M2MDevice::delete_resource_instance(DeviceResource resource,
+                                         uint16_t instance_id)
+{
+    bool success = false;
+    if(M2MDevice::Reboot != resource             &&
+       M2MDevice::ErrorCode != resource          &&
+       M2MDevice::SupportedBindingMode != resource) {
+        if(_device_instance) {
+            success = _device_instance->remove_resource_instance(resource_name(resource),instance_id);
+        }
+    }
+    return success;
+}
+
+bool M2MDevice::set_resource_value(DeviceResource resource,
+                                   const String &value,
+                                   uint16_t instance_id)
+{
+    bool success = false;
+    M2MResourceInstance* res = get_resource_instance(resource,instance_id);
+    if(res && value.size() <= MAX_ALLOWED_STRING_LENGTH) {
+        if(M2MDevice::Manufacturer == resource          ||
+           M2MDevice::ModelNumber == resource           ||
+           M2MDevice::DeviceType == resource            ||
+           M2MDevice::SerialNumber == resource          ||
+           M2MDevice::HardwareVersion == resource       ||
+           M2MDevice::FirmwareVersion == resource       ||
+           M2MDevice::SoftwareVersion == resource       ||
+           M2MDevice::UTCOffset == resource             ||
+           M2MDevice::Timezone == resource) {
+                if (value.empty()) {
+                    res->clear_value();
+                    success = true;
+                } else {
+                    success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length());
+                }
+        }
+    }
+    return success;
+}
+
+bool M2MDevice::set_resource_value(DeviceResource resource,
+                                       int64_t value,
+                                       uint16_t instance_id)
+{
+    bool success = false;
+    M2MResourceInstance* res = get_resource_instance(resource,instance_id);
+    if(res) {
+        if(M2MDevice::BatteryLevel == resource          ||
+           M2MDevice::BatteryStatus == resource         ||
+           M2MDevice::MemoryFree == resource            ||
+           M2MDevice::MemoryTotal == resource           ||
+           M2MDevice::ErrorCode == resource             ||
+           M2MDevice::CurrentTime == resource           ||
+           M2MDevice::AvailablePowerSources == resource ||
+           M2MDevice::PowerSourceVoltage == resource    ||
+           M2MDevice::PowerSourceCurrent == resource) {
+            // If it is any of the above resource
+            // set the value of the resource.
+            if (check_value_range(resource, value)) {
+
+                success = res->set_value(value);
+            }
+        }
+    }
+    return success;
+}
+
+String M2MDevice::resource_value_string(DeviceResource resource,
+                                        uint16_t instance_id) const
+{
+    String value = "";
+    M2MResourceInstance* res = get_resource_instance(resource,instance_id);
+    if(res) {
+        if(M2MDevice::Manufacturer == resource          ||
+           M2MDevice::ModelNumber == resource           ||
+           M2MDevice::DeviceType == resource            ||
+           M2MDevice::SerialNumber == resource          ||
+           M2MDevice::HardwareVersion == resource       ||
+           M2MDevice::FirmwareVersion == resource       ||
+           M2MDevice::SoftwareVersion == resource       ||
+           M2MDevice::UTCOffset == resource             ||
+           M2MDevice::Timezone == resource) {
+
+
+            value = res->get_value_string();
+        }
+    }
+    return value;
+}
+
+int64_t M2MDevice::resource_value_int(DeviceResource resource,
+                                      uint16_t instance_id) const
+{
+    int64_t value = -1;
+    M2MResourceInstance* res = get_resource_instance(resource,instance_id);
+    if(res) {
+        if(M2MDevice::BatteryLevel == resource          ||
+           M2MDevice::BatteryStatus == resource         ||
+           M2MDevice::MemoryFree == resource            ||
+           M2MDevice::MemoryTotal == resource           ||
+           M2MDevice::ErrorCode == resource             ||
+           M2MDevice::CurrentTime == resource           ||
+           M2MDevice::AvailablePowerSources == resource ||
+           M2MDevice::PowerSourceVoltage == resource    ||
+           M2MDevice::PowerSourceCurrent == resource) {
+
+            // note: the value may be 32bit int on 32b archs.
+            value = res->get_value_int();
+        }
+    }
+    return value;
+}
+
+bool M2MDevice::is_resource_present(DeviceResource resource) const
+{
+    bool success = false;
+    M2MResourceInstance* res = get_resource_instance(resource,0);
+    if(res) {
+        success = true;
+    }
+    return success;
+}
+
+uint16_t M2MDevice::per_resource_count(DeviceResource res) const
+{
+    uint16_t count = 0;
+    if(_device_instance) {
+        count = _device_instance->resource_count(resource_name(res));
+    }
+    return count;
+}
+
+uint16_t M2MDevice::total_resource_count() const
+{
+    uint16_t count = 0;
+    if(_device_instance) {
+        count = _device_instance->resources().size();
+    }
+    return count;
+}
+
+M2MResourceInstance* M2MDevice::get_resource_instance(DeviceResource dev_res,
+                                                      uint16_t instance_id) const
+{
+    M2MResource* res = NULL;
+    M2MResourceInstance* inst = NULL;
+    if(_device_instance) {
+        res = _device_instance->resource(resource_name(dev_res));
+        if(res) {
+            if(res->supports_multiple_instances()) {
+               inst = res->resource_instance(instance_id);
+            } else {
+                inst = res;
+            }
+        }
+    }
+    return inst;
+}
+
+const char* M2MDevice::resource_name(DeviceResource resource)
+{
+    const char* res_name = "";
+    switch(resource) {
+        case Manufacturer:
+            res_name = DEVICE_MANUFACTURER;
+            break;
+        case DeviceType:
+            res_name = DEVICE_DEVICE_TYPE;
+            break;
+        case ModelNumber:
+            res_name = DEVICE_MODEL_NUMBER;
+            break;
+        case SerialNumber:
+            res_name = DEVICE_SERIAL_NUMBER;
+            break;
+        case HardwareVersion:
+            res_name = DEVICE_HARDWARE_VERSION;
+            break;
+        case FirmwareVersion:
+            res_name = DEVICE_FIRMWARE_VERSION;
+            break;
+        case SoftwareVersion:
+            res_name = DEVICE_SOFTWARE_VERSION;
+            break;
+        case Reboot:
+            res_name = DEVICE_REBOOT;
+            break;
+        case FactoryReset:
+            res_name = DEVICE_FACTORY_RESET;
+            break;
+        case AvailablePowerSources:
+            res_name = DEVICE_AVAILABLE_POWER_SOURCES;
+            break;
+        case PowerSourceVoltage:
+            res_name = DEVICE_POWER_SOURCE_VOLTAGE;
+            break;
+        case PowerSourceCurrent:
+            res_name = DEVICE_POWER_SOURCE_CURRENT;
+            break;
+        case BatteryLevel:
+            res_name = DEVICE_BATTERY_LEVEL;
+            break;
+        case BatteryStatus:
+            res_name = DEVICE_BATTERY_STATUS;
+            break;
+        case MemoryFree:
+            res_name = DEVICE_MEMORY_FREE;
+            break;
+        case MemoryTotal:
+            res_name = DEVICE_MEMORY_TOTAL;
+            break;
+        case ErrorCode:
+            res_name = DEVICE_ERROR_CODE;
+            break;
+        case ResetErrorCode:
+            res_name = DEVICE_RESET_ERROR_CODE;
+            break;
+        case CurrentTime:
+            res_name = DEVICE_CURRENT_TIME;
+            break;
+        case UTCOffset:
+            res_name = DEVICE_UTC_OFFSET;
+            break;
+        case Timezone:
+            res_name = DEVICE_TIMEZONE;
+            break;
+        case SupportedBindingMode:
+            res_name = DEVICE_SUPPORTED_BINDING_MODE;
+            break;
+    }
+    return res_name;
+}
+
+bool M2MDevice::check_value_range(DeviceResource resource, int64_t value) const
+{
+    bool success = false;
+    switch (resource) {
+        case AvailablePowerSources:
+            if(value >= 0 && value <= 7) {
+                success = true;
+            }
+            break;
+        case BatteryLevel:
+            if (value >= 0 && value <= 100) {
+                success = true;
+            }
+            break;
+        case BatteryStatus:
+            if (value >= 0 && value <= 6) {
+                success = true;
+            }
+            break;
+        case ErrorCode:
+            if (value >= 0 && value <= 8) {
+                success = true;
+            }
+            break;
+    default:
+        success = true;
+        break;
+    }
+    return success;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mfirmware.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,604 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbed-client/m2mfirmware.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+#include "include/nsdlaccesshelper.h"
+
+#define BUFFER_SIZE 21
+#define TRACE_GROUP "mClt"
+
+M2MFirmware* M2MFirmware::_instance = NULL;
+
+M2MFirmware* M2MFirmware::get_instance()
+{
+    if(_instance == NULL) {
+        _instance = new M2MFirmware();
+    }
+    return _instance;
+}
+
+void M2MFirmware::delete_instance()
+{
+    delete _instance;
+    _instance = NULL;
+}
+
+M2MFirmware::M2MFirmware()
+: M2MObject(M2M_FIRMWARE_ID, stringdup(M2M_FIRMWARE_ID))
+{
+    M2MBase::set_register_uri(false);
+    M2MBase::set_operation(M2MBase::GET_PUT_ALLOWED);
+    _firmware_instance = M2MObject::create_object_instance();
+    if(_firmware_instance) {
+        _firmware_instance->set_operation(M2MBase::GET_PUT_ALLOWED);
+        create_mandatory_resources();
+    }
+}
+
+M2MFirmware::~M2MFirmware()
+{
+}
+
+// Conditionally put the static part of parameter struct into flash.
+// Unfortunately this can't be done yet by default as there is old API which
+// may be used to modify the values in sn_nsdl_static_resource_parameters_s.
+#ifdef MEMORY_OPTIMIZED_API
+#define STATIC_PARAM_TYPE const
+#else
+#define STATIC_PARAM_TYPE
+#endif
+
+#define PACKAGE_PATH FIRMWARE_PATH_PREFIX FIRMWARE_PACKAGE
+
+STATIC_PARAM_TYPE
+static sn_nsdl_static_resource_parameters_s firmware_package_params_static = {
+    (char*)OMA_RESOURCE_TYPE,      // resource_type_ptr
+    (char*)"",                     // interface_description_ptr
+    (uint8_t*)PACKAGE_PATH,    // path
+    (uint8_t*)"",           // resource
+    5,                      // strlen("5/0/0")
+    0,                      // resourcelen
+    false,                  // external_memory_block
+    SN_GRS_DYNAMIC,         // mode
+    false                   // free_on_delete
+};
+
+#define PACKAGE_URI_PATH FIRMWARE_PATH_PREFIX FIRMWARE_PACKAGE_URI
+
+STATIC_PARAM_TYPE
+static sn_nsdl_static_resource_parameters_s firmware_package_uri_params_static = {
+    (char*)OMA_RESOURCE_TYPE,      // resource_type_ptr
+    (char*)"",                     // interface_description_ptr
+    (uint8_t*)PACKAGE_URI_PATH, // path
+    (uint8_t*)"",           // resource
+    5,                      // strlen("5/0/1")
+    0,                      // resourcelen
+    false,                  // external_memory_block
+    SN_GRS_DYNAMIC,         // mode
+    false                   // free_on_delete
+};
+
+#define UPDATE_PATH FIRMWARE_PATH_PREFIX FIRMWARE_UPDATE
+
+STATIC_PARAM_TYPE
+static sn_nsdl_static_resource_parameters_s firmware_update_params_static = {
+    (char*)OMA_RESOURCE_TYPE,   // resource_type_ptr
+    (char*)"",                  // interface_description_ptr
+    (uint8_t*)UPDATE_PATH,  // path
+    (uint8_t*)"",           // resource
+    5,                      // strlen(5/0/2)
+    0,                      // resourcelen
+    false,                  // external_memory_block
+    SN_GRS_DYNAMIC,         // mode
+    false                   // free_on_delete
+};
+
+#define STATE_URI_PATH FIRMWARE_PATH_PREFIX FIRMWARE_STATE
+
+STATIC_PARAM_TYPE
+static sn_nsdl_static_resource_parameters_s firmware_state_params_static = {
+    (char*)OMA_RESOURCE_TYPE,   // resource_type_ptr
+    (char*)"",                  // interface_description_ptr
+    (uint8_t*)STATE_URI_PATH,   // path
+    (uint8_t*)"0",          // resource
+    5,                      // strlen("5/0/3")
+    1,                      // resourcelen
+    false,                  // external_memory_block
+    SN_GRS_DYNAMIC,         // mode
+    false                   // free_on_delete
+};
+
+#define UPDATE_RESULT_PATH FIRMWARE_PATH_PREFIX FIRMWARE_UPDATE_RESULT
+
+STATIC_PARAM_TYPE
+static sn_nsdl_static_resource_parameters_s firmware_update_result_params_static = {
+    (char*)OMA_RESOURCE_TYPE,      // resource_type_ptr
+    (char*)"",                     // interface_description_ptr
+    (uint8_t*)UPDATE_RESULT_PATH, // path
+    (uint8_t*)"0",          // resource
+    5,                      // strlen(5/0/5)
+    1,                      // resourcelen
+    false,                  // external_memory_block
+    SN_GRS_DYNAMIC,         // mode
+    false                   // free_on_delete
+};
+
+static sn_nsdl_dynamic_resource_parameters_s firmware_package_params_dynamic = {
+    __nsdl_c_callback,
+    &firmware_package_params_static,
+    {NULL, NULL},                     // link
+    COAP_CONTENT_OMA_PLAIN_TEXT_TYPE, // coap_content_type
+    M2MBase::PUT_ALLOWED,   // access
+    0,                      // registered
+    false,                  // publish_uri
+    false,                  // free_on_delete
+    true                    // observable
+};
+
+static sn_nsdl_dynamic_resource_parameters_s firmware_package_uri_params_dynamic = {
+    __nsdl_c_callback,
+    &firmware_package_uri_params_static,
+    {NULL, NULL},                     // link
+    COAP_CONTENT_OMA_PLAIN_TEXT_TYPE, // coap_content_type
+    M2MBase::PUT_ALLOWED,   // access
+    0,                      // registered
+    false,                  // publish_uri
+    false,                  // free_on_delete
+    true                    // observable
+};
+
+static sn_nsdl_dynamic_resource_parameters_s firmware_update_params_dynamic = {
+    __nsdl_c_callback,
+    &firmware_update_params_static,
+    {NULL, NULL},                     // link
+    COAP_CONTENT_OMA_PLAIN_TEXT_TYPE, // coap_content_type
+    M2MBase::NOT_ALLOWED,   // access
+    0,                      // registered
+    false,                  // publish_uri
+    false,                  // free_on_delete
+    true                    // observable
+};
+
+static sn_nsdl_dynamic_resource_parameters_s firmware_state_params_dynamic = {
+    __nsdl_c_callback,
+    &firmware_state_params_static,
+    {NULL, NULL},                     // link
+    COAP_CONTENT_OMA_PLAIN_TEXT_TYPE, // coap_content_type
+    M2MBase::GET_ALLOWED,   // access
+    0,                      // registered
+    false,                  // publish_uri
+    false,                  // free_on_delete
+    true                    // observable
+};
+
+static sn_nsdl_dynamic_resource_parameters_s firmware_update_result_params_dynamic = {
+    __nsdl_c_callback,
+    &firmware_update_result_params_static,
+    {NULL, NULL},                     // link
+    COAP_CONTENT_OMA_PLAIN_TEXT_TYPE, // coap_content_type
+    M2MBase::GET_ALLOWED,   // access
+    0,                      // registered
+    false,                  // publish_uri
+    false,                  // free_on_delete
+    true                    // observable
+};
+const static M2MBase::lwm2m_parameters firmware_package_params = {
+    0, // max_age
+    0, // instance_id
+    0, // name_id
+    (char*)FIRMWARE_PACKAGE, // name
+    &firmware_package_params_dynamic,
+    M2MBase::Resource, // base_type
+    false // free_on_delete
+};
+
+const static M2MBase::lwm2m_parameters firmware_package_uri_params = {
+    0, // max_age
+    0, // instance_id
+    0, // name_id
+    (char*)FIRMWARE_PACKAGE_URI, // name
+    &firmware_package_uri_params_dynamic,
+    M2MBase::Resource, // base_type
+    false // free_on_delete
+};
+
+const static M2MBase::lwm2m_parameters firmware_update_params = {
+    0, // max_age
+    0, // instance_id
+    0, // name_id
+    (char*)FIRMWARE_UPDATE, // name
+    &firmware_update_params_dynamic,
+    M2MBase::Resource, // base_type
+    false // free_on_delete
+};
+
+const static M2MBase::lwm2m_parameters firmware_state_params = {
+    0, // max_age
+    0, // instance_id
+    0, // name_id
+    (char*)FIRMWARE_STATE, // name
+    &firmware_state_params_dynamic,
+    M2MBase::Resource, // base_type
+    false // free_on_delete
+};
+
+const static M2MBase::lwm2m_parameters firmware_update_result_params = {
+    0, // max_age
+    0, // instance_id
+    0, // name_id
+    (char*)FIRMWARE_UPDATE_RESULT, // name
+    &firmware_update_result_params_dynamic,
+    M2MBase::Resource, // base_type
+    false // free_on_delete
+};
+
+void M2MFirmware::create_mandatory_resources()
+{
+    _firmware_instance->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+
+    M2MResource* res;
+
+    // todo:
+    // perhaps we should have a API for batch creation of objects by using a array
+    // of lwm2m_parameters.
+
+    res = _firmware_instance->create_dynamic_resource(&firmware_package_params,
+                                                        M2MResourceInstance::OPAQUE,
+                                                        false);
+
+    res = _firmware_instance->create_dynamic_resource(&firmware_package_uri_params,
+                                                    M2MResourceInstance::STRING,
+                                                    false);
+
+    res = _firmware_instance->create_dynamic_resource(&firmware_update_params,
+                                                    M2MResourceInstance::OPAQUE,
+                                                    false);
+
+    res = _firmware_instance->create_dynamic_resource(&firmware_state_params,
+                                                    M2MResourceInstance::INTEGER,
+                                                    true);
+
+    res = _firmware_instance->create_dynamic_resource(&firmware_update_result_params,
+                                                    M2MResourceInstance::INTEGER,
+                                                    true);
+}
+
+M2MResource* M2MFirmware::create_resource(FirmwareResource resource, const String &value)
+{
+    M2MResource* res = NULL;
+    const char* firmware_id_ptr = "";
+    M2MBase::Operation operation = M2MBase::GET_ALLOWED;
+    if(!is_resource_present(resource)) {
+        switch(resource) {
+            case PackageName:
+                firmware_id_ptr = FIRMWARE_PACKAGE_NAME;
+                break;
+            case PackageVersion:
+                firmware_id_ptr = FIRMWARE_PACKAGE_VERSION;
+                break;
+            default:
+                break;
+        }
+    }
+    String firmware_id(firmware_id_ptr);
+
+    if(!firmware_id.empty() && value.size() < 256) {
+        if(_firmware_instance) {
+            res = _firmware_instance->create_dynamic_resource(firmware_id,
+                                                            OMA_RESOURCE_TYPE,
+                                                            M2MResourceInstance::STRING,
+                                                            false);
+
+            if(res) {
+                res->set_register_uri(false);
+                res->set_operation(operation);
+                if(value.empty()) {
+                    res->clear_value();
+                } else {
+                    res->set_value((const uint8_t*)value.c_str(),
+                                   (uint32_t)value.length());
+                }
+            }
+        }
+    }
+    return res;
+}
+
+M2MResource* M2MFirmware::create_resource(FirmwareResource resource, int64_t value)
+{
+    M2MResource* res = NULL;
+    const char* firmware_id_ptr = "";
+    M2MBase::Operation operation = M2MBase::GET_ALLOWED;
+    if(!is_resource_present(resource)) {
+        switch(resource) {
+        case UpdateSupportedObjects:
+            if(check_value_range(resource, value)) {
+                firmware_id_ptr = FIRMWARE_UPDATE_SUPPORTED_OBJECTS;
+                operation = M2MBase::GET_PUT_ALLOWED;
+            }
+            break;
+        default:
+            break;
+        }
+    }
+
+    const String firmware_id(firmware_id_ptr);
+
+    if(!firmware_id.empty()) {
+        if(_firmware_instance) {
+            res = _firmware_instance->create_dynamic_resource(firmware_id,
+                                                            OMA_RESOURCE_TYPE,
+                                                            M2MResourceInstance::INTEGER,
+                                                            false);
+
+            if(res) {
+                res->set_register_uri(false);
+
+                res->set_operation(operation);
+                res->set_value(value);
+            }
+        }
+    }
+    return res;
+}
+
+bool M2MFirmware::set_resource_value(FirmwareResource resource,
+                                   const String &value)
+{
+    bool success = false;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MFirmware::PackageUri == resource  ||
+           M2MFirmware::PackageName == resource ||
+           M2MFirmware::PackageVersion == resource) {
+            if (value.size() < 256) {
+                if(value.empty()) {
+                    res->clear_value();
+                    success = true;
+                } else {
+                    success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length());
+                }
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MFirmware::set_resource_value(FirmwareResource resource,
+                                       int64_t value)
+{
+    bool success = false;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MFirmware::State == resource          ||
+           M2MFirmware::UpdateSupportedObjects == resource ||
+           M2MFirmware::UpdateResult == resource) {
+            // If it is any of the above resource
+            // set the value of the resource.
+            if (check_value_range(resource, value)) {
+
+                success = res->set_value(value);
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MFirmware::set_resource_value(FirmwareResource resource,
+                                     const uint8_t *value,
+                                     const uint32_t length)
+{
+    bool success = false;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MFirmware::Package == resource) {
+            success = res->set_value(value,length);
+        }
+    }
+    return success;
+}
+
+bool M2MFirmware::is_resource_present(FirmwareResource resource) const
+{
+    bool success = false;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        success = true;
+    }
+    return success;
+}
+
+const char* M2MFirmware::resource_name(FirmwareResource resource)
+{
+    const char* res_name = "";
+    switch(resource) {
+        case Package:
+            res_name = FIRMWARE_PACKAGE;
+            break;
+        case PackageUri:
+            res_name = FIRMWARE_PACKAGE_URI;
+            break;
+        case Update:
+            res_name = FIRMWARE_UPDATE;
+            break;
+        case State:
+            res_name = FIRMWARE_STATE;
+            break;
+        case UpdateSupportedObjects:
+            res_name = FIRMWARE_UPDATE_SUPPORTED_OBJECTS;
+            break;
+        case UpdateResult:
+            res_name = FIRMWARE_UPDATE_RESULT;
+            break;
+        case PackageName:
+            res_name = FIRMWARE_PACKAGE_NAME;
+            break;
+        case PackageVersion:
+            res_name = FIRMWARE_PACKAGE_VERSION;
+            break;
+    }
+    return res_name;
+}
+
+uint16_t M2MFirmware::per_resource_count(FirmwareResource res) const
+{
+    uint16_t count = 0;
+    if(_firmware_instance) {
+        count = _firmware_instance->resource_count(resource_name(res));
+    }
+    return count;
+}
+
+uint16_t M2MFirmware::total_resource_count() const
+{
+    uint16_t count = 0;
+    if(_firmware_instance) {
+        count = _firmware_instance->resources().size();
+    }
+    return count;
+}
+
+uint32_t M2MFirmware::resource_value_buffer(FirmwareResource resource,
+                               uint8_t *&data) const
+{
+    uint32_t size = 0;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MFirmware::Package == resource) {
+            res->get_value(data,size);
+        }
+    }
+    return size;
+}
+
+M2MResource* M2MFirmware::get_resource(FirmwareResource res) const
+{
+    M2MResource* res_object = NULL;
+    if(_firmware_instance) {
+        const char* res_name_ptr = "";
+        switch(res) {
+            case Package:
+                res_name_ptr = FIRMWARE_PACKAGE;
+                break;
+            case PackageUri:
+                res_name_ptr = FIRMWARE_PACKAGE_URI;
+                break;
+            case Update:
+                res_name_ptr = FIRMWARE_UPDATE;
+                break;
+            case State:
+                res_name_ptr = FIRMWARE_STATE;
+                break;
+            case UpdateSupportedObjects:
+                res_name_ptr = FIRMWARE_UPDATE_SUPPORTED_OBJECTS;
+                break;
+            case UpdateResult:
+                res_name_ptr = FIRMWARE_UPDATE_RESULT;
+                break;
+            case PackageName:
+                res_name_ptr = FIRMWARE_PACKAGE_NAME;
+                break;
+            case PackageVersion:
+                res_name_ptr = FIRMWARE_PACKAGE_VERSION;
+                break;
+        }
+
+        res_object = _firmware_instance->resource(res_name_ptr);
+    }
+    return res_object;
+}
+
+bool M2MFirmware::delete_resource(FirmwareResource resource)
+{
+    bool success = false;
+    if(M2MFirmware::UpdateSupportedObjects == resource ||
+       M2MFirmware::PackageName == resource            ||
+       M2MFirmware::PackageVersion == resource) {
+        if(_firmware_instance) {
+            success = _firmware_instance->remove_resource(resource_name(resource));
+        }
+    }
+    return success;
+}
+
+int64_t M2MFirmware::resource_value_int(FirmwareResource resource) const
+{
+    int64_t value = -1;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MFirmware::State == resource          ||
+           M2MFirmware::UpdateSupportedObjects == resource         ||
+           M2MFirmware::UpdateResult == resource) {
+
+            value = res->get_value_int();
+        }
+    }
+    return value;
+}
+
+String M2MFirmware::resource_value_string(FirmwareResource resource) const
+{
+    String value = "";
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MFirmware::PackageUri == resource          ||
+           M2MFirmware::PackageName == resource           ||
+           M2MFirmware::PackageVersion == resource) {
+
+            value = res->get_value_string();
+        }
+    }
+    return value;
+}
+
+bool M2MFirmware::check_value_range(FirmwareResource resource, int64_t value) const
+{
+    bool success = false;
+    switch (resource) {
+        case UpdateSupportedObjects:
+            if(value == 0 || value == 1) {
+                success = true;
+            }
+            break;
+        case State:
+            if (value >= 0 && value <= 3) {
+                success = true;
+                M2MResource* updateRes = get_resource(M2MFirmware::Update);
+                if (updateRes){
+                    if (value == M2MFirmware::Downloaded) {
+                        updateRes->set_operation(M2MBase::POST_ALLOWED);
+                    }
+                    else {
+                        updateRes->set_operation(M2MBase::NOT_ALLOWED);
+                    }
+                }
+            }
+            break;
+        case UpdateResult:
+            if (value >= 0 && value <= 7) {
+                success = true;
+            }
+            break;
+    default:
+        break;
+    }
+    return success;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2minterfacefactory.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Note: this macro is needed on armcc to get the the PRI*32 macros
+// from inttypes.h in a C++ code.
+#ifndef __STDC_FORMAT_MACROS
+#define __STDC_FORMAT_MACROS
+#endif
+
+#include "mbed-client/m2minterfacefactory.h"
+#include "mbed-client/m2mserver.h"
+#include "mbed-client/m2mdevice.h"
+#include "mbed-client/m2mfirmware.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2mconfig.h"
+#include "include/m2minterfaceimpl.h"
+#include "mbed-trace/mbed_trace.h"
+
+#include <inttypes.h>
+
+#define TRACE_GROUP "mClt"
+
+M2MInterface* M2MInterfaceFactory::create_interface(M2MInterfaceObserver &observer,
+                                                    const String &endpoint_name,
+                                                    const String &endpoint_type,
+                                                    const int32_t life_time,
+                                                    const uint16_t listen_port,
+                                                    const String &domain,
+                                                    M2MInterface::BindingMode mode,
+                                                    M2MInterface::NetworkStack stack,
+                                                    const String &context_address)
+{
+    tr_debug("M2MInterfaceFactory::create_interface - IN");
+    tr_debug("M2MInterfaceFactory::create_interface - parameters endpoint name : %s",endpoint_name.c_str());
+    tr_debug("M2MInterfaceFactory::create_interface - parameters endpoint type : %s",endpoint_type.c_str());
+    tr_debug("M2MInterfaceFactory::create_interface - parameters life time(in secs): %" PRId32,life_time);
+    tr_debug("M2MInterfaceFactory::create_interface - parameters Listen Port : %d",listen_port);
+    tr_debug("M2MInterfaceFactory::create_interface - parameters Binding Mode : %d",(int)mode);
+    tr_debug("M2MInterfaceFactory::create_interface - parameters NetworkStack : %d",(int)stack);
+    M2MInterfaceImpl *interface = NULL;
+
+
+    bool endpoint_type_valid = true;
+    if(!endpoint_type.empty()) {
+        if(endpoint_type.size() > MAX_ALLOWED_STRING_LENGTH){
+            endpoint_type_valid = false;
+        }
+    }
+
+    bool domain_valid = true;
+    if(!domain.empty()) {
+        if(domain.size() > MAX_ALLOWED_STRING_LENGTH){
+            domain_valid = false;
+        }
+    }
+
+    if(((life_time == -1) || (life_time >= MINIMUM_REGISTRATION_TIME)) &&
+       !endpoint_name.empty() && (endpoint_name.size() <= MAX_ALLOWED_STRING_LENGTH) &&
+       endpoint_type_valid && domain_valid) {
+        tr_debug("M2MInterfaceFactory::create_interface - Creating M2MInterfaceImpl");
+        interface = new M2MInterfaceImpl(observer, endpoint_name,
+                                         endpoint_type, life_time,
+                                         listen_port, domain, mode,
+                                         stack, context_address);
+
+    }
+    tr_debug("M2MInterfaceFactory::create_interface - OUT");
+    return interface;
+}
+
+M2MSecurity* M2MInterfaceFactory::create_security(M2MSecurity::ServerType server_type)
+{
+    tr_debug("M2MInterfaceFactory::create_security");
+    M2MSecurity *security = new M2MSecurity(server_type);
+    return security;
+}
+
+M2MServer* M2MInterfaceFactory::create_server()
+{
+    tr_debug("M2MInterfaceFactory::create_server");
+    M2MServer *server = new M2MServer();
+    return server;
+}
+
+M2MDevice* M2MInterfaceFactory::create_device()
+{
+    tr_debug("M2MInterfaceFactory::create_device");
+    M2MDevice* device = M2MDevice::get_instance();
+    return device;
+}
+
+M2MFirmware* M2MInterfaceFactory::create_firmware()
+{
+    tr_debug("M2MInterfaceFactory::create_firmware");
+    M2MFirmware* firmware = M2MFirmware::get_instance();
+    return firmware;
+}
+
+M2MObject* M2MInterfaceFactory::create_object(const String &name)
+{
+    tr_debug("M2MInterfaceFactory::create_object : Name : %s", name.c_str());
+    if(name.size() > MAX_ALLOWED_STRING_LENGTH || name.empty()){
+        return NULL;
+    }
+
+    M2MObject *object = NULL;
+    object = new M2MObject(name, M2MBase::stringdup(name.c_str()));
+    return object;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2minterfaceimpl.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1036 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <assert.h>
+#include <stdlib.h>
+#include "include/m2minterfaceimpl.h"
+#include "include/eventdata.h"
+#include "mbed-client/m2minterfaceobserver.h"
+#include "mbed-client/m2mconnectionhandler.h"
+#include "mbed-client/m2mconnectionsecurity.h"
+#include "include/m2mnsdlinterface.h"
+#include "include/nsdlaccesshelper.h"
+#include "mbed-client/m2msecurity.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2mtimer.h"
+#include "mbed-trace/mbed_trace.h"
+
+#include <stdlib.h>
+
+#define TRACE_GROUP "mClt"
+
+#define RESOLVE_SEC_MODE(mode)  ((mode == M2MInterface::TCP || mode == M2MInterface::TCP_QUEUE) ? M2MConnectionSecurity::TLS : M2MConnectionSecurity::DTLS)
+
+M2MInterfaceImpl::M2MInterfaceImpl(M2MInterfaceObserver& observer,
+                                   const String &ep_name,
+                                   const String &ep_type,
+                                   const int32_t l_time,
+                                   const uint16_t listen_port,
+                                   const String &dmn,
+                                   M2MInterface::BindingMode mode,
+                                   M2MInterface::NetworkStack stack,
+                                   const String &con_addr)
+: _event_data(NULL),
+  _bootstrap_timer(NULL),
+  _server_port(0),
+  _listen_port(listen_port),
+  _endpoint_type(ep_type),
+  _domain( dmn),
+  _life_time(l_time),
+  _context_address(con_addr),
+  _register_server(NULL),
+  _queue_sleep_timer(*this),
+  _retry_timer(*this),
+  _callback_handler(NULL),
+  _max_states( STATE_MAX_STATES ),
+  _event_ignored(false),
+  _event_generated(false),
+  _reconnecting(false),
+  _retry_timer_expired(false),
+  _bootstrapped(true), // True as default to get it working with connector only configuration
+  _current_state(0),
+  _retry_count(0),
+  _binding_mode(mode),
+  _observer(observer),
+  _security_connection( new M2MConnectionSecurity( RESOLVE_SEC_MODE(mode) )),
+  _connection_handler(*this, _security_connection, mode, stack),
+  _nsdl_interface(*this),
+  _security(NULL)
+{
+    tr_debug("M2MInterfaceImpl::M2MInterfaceImpl() -IN");
+    _nsdl_interface.create_endpoint(ep_name,
+                                     _endpoint_type,
+                                     _life_time,
+                                     _domain,
+                                     (uint8_t)_binding_mode & 0x07, // nsdl binding mode is only 3 least significant bits
+                                     _context_address);
+
+    //Here we must use TCP still
+    __connection_handler = &_connection_handler;
+    _connection_handler.bind_connection(_listen_port);
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    _bootstrap_timer = new M2MTimer(*this);
+#endif
+    tr_debug("M2MInterfaceImpl::M2MInterfaceImpl() -OUT");
+}
+
+
+M2MInterfaceImpl::~M2MInterfaceImpl()
+{
+    tr_debug("M2MInterfaceImpl::~M2MInterfaceImpl() - IN");
+    _connection_handler.stop_listening();
+    delete _bootstrap_timer;
+    _security_connection = NULL;
+    tr_debug("M2MInterfaceImpl::~M2MInterfaceImpl() - OUT");
+}
+
+void M2MInterfaceImpl::bootstrap(M2MSecurity *security)
+{
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MInterfaceImpl::bootstrap(M2MSecurity *security) - IN");
+    if(!security) {
+        _observer.error(M2MInterface::InvalidParameters);
+        return;
+    }
+    // Transition to a new state based upon
+    // the current state of the state machine
+    M2MSecurityData* data = new M2MSecurityData();
+    data->_object = security;
+    BEGIN_TRANSITION_MAP                                    // - Current State -
+        TRANSITION_MAP_ENTRY (STATE_BOOTSTRAP)              // state_idle
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state__bootstrap_address_resolved
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap_resource_created
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap_wait
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrapped
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_register
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_register_address_resolved
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_registered
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_update_registration
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_unregister
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_unregistered
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_sending_coap_data
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_sent
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_received
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_processing_coap_data
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_processed
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_waiting
+    END_TRANSITION_MAP(data)
+    if(_event_ignored) {
+        _event_ignored = false;
+        _observer.error(M2MInterface::NotAllowed);
+    }
+    tr_debug("M2MInterfaceImpl::bootstrap(M2MSecurity *security) - OUT");
+#else
+    _observer.error(M2MInterface::NotAllowed);
+#endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+}
+
+void M2MInterfaceImpl::cancel_bootstrap()
+{
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+//TODO: Do we need this ?
+#endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+}
+
+void M2MInterfaceImpl::register_object(M2MSecurity *security, const M2MObjectList &object_list)
+{
+    tr_debug("M2MInterfaceImpl::register_object - IN");
+    if(!security) {
+        _observer.error(M2MInterface::InvalidParameters);
+        return;
+    }
+    // Transition to a new state based upon
+    // the current state of the state machine
+    //TODO: manage register object in a list.
+    _register_server = security;
+    M2MRegisterData *data = new M2MRegisterData();
+    data->_object = security;
+    data->_object_list = object_list;
+    BEGIN_TRANSITION_MAP                                    // - Current State -
+        TRANSITION_MAP_ENTRY (STATE_REGISTER)               // state_idle
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state__bootstrap_address_resolved
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap_resource_created
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap_wait
+        TRANSITION_MAP_ENTRY (STATE_REGISTER)               // state_bootstrapped
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_register
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_register_address_resolved
+        TRANSITION_MAP_ENTRY (STATE_REGISTER)               // state_registered
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_update_registration
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_unregister
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_unregistered
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_sending_coap_data
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_sent
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_received
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_processing_coap_data
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_processed
+        TRANSITION_MAP_ENTRY (STATE_REGISTER)               // state_waiting
+    END_TRANSITION_MAP(data)
+    if(_event_ignored) {
+        _event_ignored = false;
+        _observer.error(M2MInterface::NotAllowed);
+    }
+    tr_debug("M2MInterfaceImpl::register_object - OUT");
+}
+
+void M2MInterfaceImpl::update_registration(M2MSecurity *security_object, const uint32_t lifetime)
+{
+    tr_debug("M2MInterfaceImpl::update_registration(M2MSecurity *security_object, const uint32_t lifetime)");
+    M2MUpdateRegisterData *data = new M2MUpdateRegisterData();
+    data->_object = security_object;
+    data->_lifetime = lifetime;
+    start_register_update(data);
+}
+
+void M2MInterfaceImpl::update_registration(M2MSecurity *security_object,
+                                           const M2MObjectList &object_list,
+                                           const uint32_t lifetime)
+{
+    tr_debug("M2MInterfaceImpl::update_registration(M2MSecurity *security_object, const M2MObjectList &object_list, const uint32_t lifetime)");
+    M2MUpdateRegisterData *data = new M2MUpdateRegisterData();
+    data->_object = security_object;
+    data->_lifetime = lifetime;
+    data->_object_list = object_list;
+    start_register_update(data);
+}
+
+void M2MInterfaceImpl::unregister_object(M2MSecurity* /*security*/)
+{
+    tr_debug("M2MInterfaceImpl::unregister_object - IN");
+    tr_debug("M2MInterfaceImpl::unregister_object - current state %d", _current_state);
+    // Transition to a new state based upon
+    // the current state of the state machine
+    BEGIN_TRANSITION_MAP                                // - Current State -
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_idle
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state__bootstrap_address_resolved
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap_resource_created
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap_wait
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrapped
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_register
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_register_address_resolved
+        TRANSITION_MAP_ENTRY (STATE_UNREGISTER)             // state_registered
+        TRANSITION_MAP_ENTRY (STATE_UNREGISTER)             // state_update_registration
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_unregister
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_unregistered
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_sending_coap_data
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_sent
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_received
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_processing_coap_data
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_processed
+        TRANSITION_MAP_ENTRY (STATE_UNREGISTER)             // state_waiting
+    END_TRANSITION_MAP(NULL)
+    if(_event_ignored) {
+        _event_ignored = false;
+        _observer.error(M2MInterface::NotAllowed);
+    }
+    tr_debug("M2MInterfaceImpl::unregister_object - OUT");
+}
+
+void M2MInterfaceImpl::set_queue_sleep_handler(callback_handler handler)
+{
+    tr_debug("M2MInterfaceImpl::set_queue_sleep_handler()");
+    _callback_handler = handler;
+}
+
+void M2MInterfaceImpl::set_random_number_callback(random_number_cb callback)
+{
+    if(_security_connection) {
+        _security_connection->set_random_number_callback(callback);
+    }
+}
+
+void M2MInterfaceImpl::set_entropy_callback(entropy_cb callback)
+{
+    if(_security_connection) {
+        _security_connection->set_entropy_callback(callback);
+    }
+}
+
+void M2MInterfaceImpl::set_platform_network_handler(void *handler)
+{
+    tr_debug("M2MInterfaceImpl::set_platform_network_handler()");
+    _connection_handler.set_platform_network_handler(handler);
+}
+
+void M2MInterfaceImpl::coap_message_ready(uint8_t *data_ptr,
+                                          uint16_t data_len,
+                                          sn_nsdl_addr_s *address_ptr)
+{
+    tr_debug("M2MInterfaceImpl::coap_message_ready");
+    if (_current_state != STATE_IDLE) {
+        internal_event(STATE_SENDING_COAP_DATA);
+        if(!_connection_handler.send_data(data_ptr,data_len,address_ptr)) {
+            internal_event( STATE_IDLE);
+            tr_error("M2MInterfaceImpl::coap_message_ready() - M2MInterface::NetworkError");
+            if (!_reconnecting) {
+                _observer.error(M2MInterface::NetworkError);
+            }
+        }
+    }
+}
+
+void M2MInterfaceImpl::client_registered(M2MServer *server_object)
+{
+    tr_debug("M2MInterfaceImpl::client_registered");
+    _retry_count = 0;
+    internal_event(STATE_REGISTERED);
+    //Inform client is registered.
+    //TODO: manage register object in a list.
+    _observer.object_registered(_register_server,*server_object);
+}
+
+void M2MInterfaceImpl::registration_updated(const M2MServer &server_object)
+{
+    tr_debug("M2MInterfaceImpl::registration_updated");
+    internal_event(STATE_REGISTERED);
+    _observer.registration_updated(_register_server,server_object);
+}
+
+void M2MInterfaceImpl::registration_error(uint8_t error_code, bool retry)
+{
+    tr_debug("M2MInterfaceImpl::registration_error code [%d]", error_code);
+    // Try to register again
+    if (retry) {
+        socket_error(M2MConnectionHandler::SOCKET_SEND_ERROR);
+    } else {
+        internal_event(STATE_IDLE);
+        _observer.error((M2MInterface::Error)error_code);
+    }
+}
+
+void M2MInterfaceImpl::client_unregistered()
+{
+    tr_debug("M2MInterfaceImpl::client_unregistered()");
+    internal_event(STATE_UNREGISTERED);
+    //TODO: manage register object in a list.
+    _observer.object_unregistered(_register_server);
+}
+
+void M2MInterfaceImpl::bootstrap_done(M2MSecurity *security_object)
+{
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MInterfaceImpl::bootstrap_done");
+    _retry_count = 0;
+    _reconnecting = false;
+    _bootstrapped = true;
+    _bootstrap_timer->stop_timer();
+    internal_event(STATE_BOOTSTRAPPED);
+    _observer.bootstrap_done(security_object);
+#endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+}
+
+void M2MInterfaceImpl::bootstrap_wait(M2MSecurity *security_object)
+{
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MInterfaceImpl::bootstrap_wait");
+    _security = security_object;
+    internal_event(STATE_BOOTSTRAP_WAIT);
+#endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+}
+
+void M2MInterfaceImpl::bootstrap_error()
+{
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MInterfaceImpl::bootstrap_error()");
+    _bootstrapped = false;
+    _bootstrap_timer->stop_timer();
+    internal_event(STATE_IDLE);
+    _observer.error(M2MInterface::BootstrapFailed);
+#endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+}
+
+void M2MInterfaceImpl::coap_data_processed()
+{
+    tr_debug("M2MInterfaceImpl::coap_data_processed()");
+    internal_event(STATE_COAP_DATA_PROCESSED);
+}
+
+void M2MInterfaceImpl::value_updated(M2MBase *base)
+{
+    tr_debug("M2MInterfaceImpl::value_updated");
+    if(base) {
+        M2MBase::BaseType type = base->base_type();
+        _observer.value_updated(base, type);
+    }
+}
+
+void M2MInterfaceImpl::data_available(uint8_t* data,
+                                      uint16_t data_size,
+                                      const M2MConnectionObserver::SocketAddress &address)
+{
+    tr_debug("M2MInterfaceImpl::data_available");
+    ReceivedData *event = new ReceivedData();
+    event->_data = data;
+    event->_size = data_size;
+    event->_address = &address;
+    internal_event(STATE_COAP_DATA_RECEIVED, event);
+}
+
+void M2MInterfaceImpl::socket_error(uint8_t error_code, bool retry)
+{
+    tr_debug("M2MInterfaceImpl::socket_error: (%d), retry (%d), reconnecting (%d)", error_code, retry, _reconnecting);
+#if MBED_CLIENT_RECONNECTION_LOOP < 1
+    if (!_retry_timer_expired && _reconnecting) {
+        tr_debug("M2MInterfaceImpl::socket_error - retry timer running - return");
+        return;
+    }
+#endif
+
+    M2MInterface::Error error = M2MInterface::ErrorNone;
+    switch (error_code) {
+    case M2MConnectionHandler::SSL_CONNECTION_ERROR:
+        error = M2MInterface::SecureConnectionFailed;
+        break;
+    case M2MConnectionHandler::DNS_RESOLVING_ERROR:
+        error = M2MInterface::DnsResolvingFailed;
+        break;
+    case M2MConnectionHandler::SOCKET_READ_ERROR:
+        error = M2MInterface::NetworkError;
+        break;
+    case M2MConnectionHandler::SOCKET_SEND_ERROR:
+        error = M2MInterface::NetworkError;
+        break;
+    case M2MConnectionHandler::SSL_HANDSHAKE_ERROR:
+        error = M2MInterface::SecureConnectionFailed;
+        break;
+    case M2MConnectionHandler::SOCKET_ABORT:
+        error = M2MInterface::NetworkError;
+        break;
+    default:
+        break;
+    }
+
+    // Try to do reconnecting
+    if (retry) {
+        if (_retry_count < MBED_CLIENT_RECONNECTION_COUNT) {
+            _retry_count++;
+        }
+#if MBED_CLIENT_RECONNECTION_LOOP > 0
+        else {
+            tr_debug("M2MInterfaceImpl::socket_error - start again");
+            _retry_count = 1;
+            _observer.error(error);
+        }
+#else
+        else {
+            tr_debug("M2MInterfaceImpl::socket_error - no more retries");
+            _connection_handler.stop_listening();
+            _retry_timer.stop_timer();
+            retry = false;
+        }
+#endif
+        if (retry) {
+            internal_event(STATE_IDLE);
+            _reconnecting = true;
+            _connection_handler.stop_listening();
+            int retry_time = MBED_CLIENT_RECONNECTION_INTERVAL *
+                    MBED_CLIENT_RECONNECTION_COUNT * _retry_count * 1000;
+            _retry_timer_expired = false;
+            _retry_timer.start_timer(retry_time,
+                                      M2MTimerObserver::RetryTimer);
+            tr_debug("M2MInterfaceImpl::socket_error - reconnecting in %d(s), count %d/%d", retry_time / 1000,
+                     _retry_count, MBED_CLIENT_RECONNECTION_COUNT);
+        }
+    }
+    // Inform application
+    if (!retry && M2MInterface::ErrorNone != error) {
+        tr_debug("M2MInterfaceImpl::socket_error - send error to application");
+        _connection_handler.stop_listening();
+        _retry_timer.stop_timer();
+        _retry_count = 0;
+        _reconnecting = false;
+        _observer.error(error);
+        internal_event(STATE_IDLE);
+    }
+}
+
+void M2MInterfaceImpl::address_ready(const M2MConnectionObserver::SocketAddress &address,
+                                     M2MConnectionObserver::ServerType server_type,
+                                     const uint16_t server_port)
+{
+    tr_debug("M2MInterfaceImpl::address_ready");
+    ResolvedAddressData *data = new ResolvedAddressData();
+    data->_address = &address;
+    data->_port = server_port;
+    if( M2MConnectionObserver::Bootstrap == server_type) {
+        tr_debug("M2MInterfaceImpl::address_ready() Server Type Bootstrap");
+        internal_event(STATE_BOOTSTRAP_ADDRESS_RESOLVED, data);
+    } else {
+        tr_debug("M2MInterfaceImpl::address_ready() Server Type LWM2M");
+        internal_event(STATE_REGISTER_ADDRESS_RESOLVED, data);
+    }
+}
+
+void M2MInterfaceImpl::data_sent()
+{
+    tr_debug("M2MInterfaceImpl::data_sent()");
+    if(_binding_mode == M2MInterface::UDP_QUEUE ||
+       _binding_mode == M2MInterface::TCP_QUEUE  ||
+       _binding_mode == M2MInterface::SMS_QUEUE  ||
+       _binding_mode == M2MInterface::UDP_SMS_QUEUE) {
+        if(_callback_handler) {
+            _queue_sleep_timer.stop_timer();
+            _queue_sleep_timer.start_timer(MBED_CLIENT_RECONNECTION_COUNT*MBED_CLIENT_RECONNECTION_INTERVAL*1000,
+                                            M2MTimerObserver::QueueSleep);
+        }
+    }
+    if (_current_state == STATE_BOOTSTRAP_WAIT) {
+        // For bootstrap we need to call bootstrap_done callback ONLY after we have
+        // sent the last ACK and ended in STATE_BOOTSTRAP_WAIT
+        M2MSecurity *sec = _security;
+        _security = NULL;
+        bootstrap_done(sec);
+    }
+    else {
+        internal_event(STATE_COAP_DATA_SENT);
+    }
+}
+
+void M2MInterfaceImpl::timer_expired(M2MTimerObserver::Type type)
+{
+    tr_debug("M2MInterfaceImpl::timer_expired()");
+    if(M2MTimerObserver::QueueSleep == type) {
+        if(_callback_handler) {
+            _callback_handler();
+        }
+    }
+    else if (M2MTimerObserver::RetryTimer == type) {
+        _retry_timer_expired = true;
+        if (_bootstrapped) {
+            internal_event(STATE_REGISTER);
+        } else {
+            internal_event(STATE_BOOTSTRAP);
+        }
+    }
+    else if (M2MTimerObserver::BootstrapTimer == type) {
+        bootstrap_error();
+    }
+}
+
+// state machine sits here.
+void M2MInterfaceImpl::state_idle(EventData* /*data*/)
+{
+    tr_debug("M2MInterfaceImpl::state_idle");
+    _nsdl_interface.stop_timers();
+}
+
+void M2MInterfaceImpl::state_bootstrap(EventData *data)
+{
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MInterfaceImpl::state_bootstrap");
+    // Start with bootstrapping preparation
+    _bootstrapped = false;
+    M2MSecurityData *event = static_cast<M2MSecurityData *> (data);
+    if(!_security) {
+        M2MInterface::Error error = M2MInterface::InvalidParameters;
+        if (event) {
+            _security = event->_object;
+            if(_security) {
+                if(M2MSecurity::Bootstrap == _security->server_type()) {
+                    tr_debug("M2MInterfaceImpl::state_bootstrap - server_type : M2MSecurity::Bootstrap");
+                    String server_address = _security->resource_value_string(M2MSecurity::M2MServerUri);
+                    tr_debug("M2MInterfaceImpl::state_bootstrap - server_address %s", server_address.c_str());
+                    _bootstrap_timer->start_timer(MBED_CLIENT_RECONNECTION_COUNT * MBED_CLIENT_RECONNECTION_INTERVAL * 8 * 1000,
+                                                  M2MTimerObserver::BootstrapTimer);
+                    String coap;
+                    if(server_address.compare(0,sizeof(COAP)-1,COAP) == 0) {
+                         coap = COAP;
+                    }
+                    else if(server_address.compare(0,sizeof(COAPS)-1,COAPS) == 0) {
+                        _security->resource_value_int(M2MSecurity::SecurityMode) != M2MSecurity::NoSecurity ? coap = COAPS: coap = "";
+                    }
+                    if(!coap.empty()) {
+                        server_address = server_address.substr(coap.size(),
+                                                           server_address.size()-coap.size());
+
+                        process_address(server_address, _server_ip_address, _server_port);
+
+                        tr_debug("M2MInterfaceImpl::state_bootstrap - IP address %s , Port %d", _server_ip_address.c_str(), _server_port);
+                        // If bind and resolving server address succeed then proceed else
+                        // return error to the application and go to Idle state.
+                        if(!_server_ip_address.empty()) {
+                            error = M2MInterface::ErrorNone;
+                            _connection_handler.resolve_server_address(_server_ip_address,
+                                                                        _server_port,
+                                                                        M2MConnectionObserver::Bootstrap,
+                                                                        _security);
+                        }
+                    }
+                }
+            }
+        }
+        if (error != M2MInterface::ErrorNone) {
+            tr_error("M2MInterfaceImpl::state_bootstrap - set error as M2MInterface::InvalidParameters");
+            internal_event(STATE_IDLE);
+            _observer.error(error);
+        }
+    } else {
+        _listen_port = rand() % 64511 + 1024;
+        _connection_handler.stop_listening();
+        _connection_handler.bind_connection(_listen_port);
+        _connection_handler.resolve_server_address(_server_ip_address,
+                                                    _server_port,
+                                                    M2MConnectionObserver::Bootstrap,
+                                                    _security);
+    }
+#endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+}
+
+void M2MInterfaceImpl::state_bootstrap_address_resolved( EventData *data)
+{
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MInterfaceImpl::state_bootstrap_address_resolved");
+    if (data) {
+        ResolvedAddressData *event = static_cast<ResolvedAddressData *> (data);
+        sn_nsdl_addr_s address;
+
+        M2MInterface::NetworkStack stack = event->_address->_stack;
+
+        if(M2MInterface::LwIP_IPv4 == stack) {
+            tr_debug("M2MInterfaceImpl::state_bootstrap_address_resolved : IPv4 address");
+            address.type = SN_NSDL_ADDRESS_TYPE_IPV4;
+        } else if((M2MInterface::LwIP_IPv6 == stack) ||
+                  (M2MInterface::Nanostack_IPv6 == stack)) {
+            tr_debug("M2MInterfaceImpl::state_bootstrap_address_resolved : IPv6 address");
+            address.type = SN_NSDL_ADDRESS_TYPE_IPV6;
+        }
+        address.port = event->_port;
+        address.addr_ptr = (uint8_t*)event->_address->_address;
+        address.addr_len = event->_address->_length;
+        _connection_handler.start_listening_for_data();
+
+        // Include domain id to be part of endpoint name
+        StringBuffer<M2MBase::MAX_PATH_SIZE> new_ep_name;
+
+        if(!new_ep_name.ensure_space(_nsdl_interface.endpoint_name().size() + 1))
+        {
+            tr_error("MM2MInterfaceImpl::state_bootstrap_address_resolved : name too long");
+            _observer.error(M2MInterface::InvalidParameters);
+            return;
+        }
+
+        new_ep_name.append(_nsdl_interface.endpoint_name().c_str());
+
+        if (!_domain.empty()) {
+
+            if(!new_ep_name.ensure_space(_nsdl_interface.endpoint_name().size() + 1 + _domain.size() + 1))
+            {
+                tr_error("MM2MInterfaceImpl::state_bootstrap_address_resolved : name + domain too long");
+                _observer.error(M2MInterface::InvalidParameters);
+                return;
+            }
+
+            new_ep_name.append('@');
+            new_ep_name.append(_domain.c_str());
+
+        }
+        if(_nsdl_interface.create_bootstrap_resource(&address, new_ep_name.c_str())) {
+           tr_debug("M2MInterfaceImpl::state_bootstrap_address_resolved : create_bootstrap_resource - success");
+           internal_event(STATE_BOOTSTRAP_RESOURCE_CREATED);
+        } else{
+            // If resource creation fails then inform error to application
+            tr_error("M2MInterfaceImpl::state_bootstrap_address_resolved : M2MInterface::InvalidParameters");
+            internal_event(STATE_IDLE);
+            _observer.error(M2MInterface::InvalidParameters);
+        }
+    }
+#endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+}
+
+void M2MInterfaceImpl::state_bootstrap_resource_created( EventData */*data*/)
+{
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MInterfaceImpl::state_bootstrap_resource_created");
+#endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+}
+
+void M2MInterfaceImpl::state_bootstrapped( EventData */*data*/)
+{
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MInterfaceImpl::state_bootstrapped");
+#endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+}
+
+void M2MInterfaceImpl::state_register(EventData *data)
+{
+    tr_debug("M2MInterfaceImpl::state_register");
+    M2MRegisterData *event = static_cast<M2MRegisterData *> (data);
+    if (!_security) {
+        M2MInterface::Error error = M2MInterface::InvalidParameters;
+        // Start with registration preparation
+        if(event) {
+            _security = event->_object;
+            if(_security) {
+                if(M2MSecurity::M2MServer == _security->server_type()) {
+                    tr_debug("M2MInterfaceImpl::state_register - server_type : M2MSecurity::M2MServer");
+                    if(_nsdl_interface.create_nsdl_list_structure(event->_object_list)) {
+                        tr_debug("M2MInterfaceImpl::state_register - create_nsdl_list_structure - success");
+                        // If the nsdl resource structure is created successfully
+                        String server_address = _security->resource_value_string(M2MSecurity::M2MServerUri);
+                        tr_debug("M2MInterfaceImpl::state_register - server_address %s", server_address.c_str());
+                        String  coap;
+                        if(server_address.compare(0,sizeof(COAP)-1,COAP) == 0) {
+                             coap = COAP;
+                        }
+                        else if(server_address.compare(0,sizeof(COAPS)-1,COAPS) == 0) {
+                            _security->resource_value_int(M2MSecurity::SecurityMode) != M2MSecurity::NoSecurity ? coap = COAPS: coap = "";
+                        }
+                        if(!coap.empty()) {
+                            server_address = server_address.substr(coap.size(),
+                                                               server_address.size() - coap.size());
+                            process_address(server_address, _server_ip_address, _server_port);
+
+                            tr_debug("M2MInterfaceImpl::state_register - IP address %s , Port %d", _server_ip_address.c_str(), _server_port);
+                            if(!_server_ip_address.empty()) {
+                                // Connection related errors are coming through callback
+                                error = M2MInterface::ErrorNone;
+                                _connection_handler.resolve_server_address(_server_ip_address,_server_port,
+                                                                            M2MConnectionObserver::LWM2MServer,
+                                                                            _security);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if (error != M2MInterface::ErrorNone) {
+            tr_error("M2MInterfaceImpl::state_register - set error as M2MInterface::InvalidParameters");
+            internal_event(STATE_IDLE);
+            _observer.error(error);
+        }
+    } else {
+        _listen_port = rand() % 64511 + 1024;
+        _connection_handler.stop_listening();
+        if (event) {
+            _nsdl_interface.create_nsdl_list_structure(event->_object_list);
+        }
+        _connection_handler.bind_connection(_listen_port);
+        _connection_handler.resolve_server_address(_server_ip_address,_server_port,
+                                                    M2MConnectionObserver::LWM2MServer,
+                                                    _security);
+    }
+}
+
+void M2MInterfaceImpl::process_address(const String& server_address, String& ip_address, uint16_t& port) {
+
+    int colonFound = server_address.find_last_of(':'); //10
+    if(colonFound != -1) {
+        ip_address = server_address.substr(0,colonFound);
+        port = atoi(server_address.substr(colonFound+1,
+                                         server_address.size()-ip_address.size()).c_str());
+        colonFound = ip_address.find_last_of(']');
+        if(ip_address.compare(0,1,"[") == 0) {
+            if(colonFound == -1) {
+                ip_address.clear();
+            } else {
+                ip_address = ip_address.substr(1,colonFound-1);
+            }
+        } else if(colonFound != -1) {
+            ip_address.clear();
+        }
+    }
+}
+
+void M2MInterfaceImpl::state_register_address_resolved( EventData *data)
+{
+    tr_debug("M2MInterfaceImpl::state_register_address_resolved");
+    if(data) {
+        ResolvedAddressData *event = static_cast<ResolvedAddressData *> (data);
+
+        sn_nsdl_addr_type_e address_type = SN_NSDL_ADDRESS_TYPE_IPV6;
+
+        M2MInterface::NetworkStack stack = event->_address->_stack;
+
+        if(M2MInterface::LwIP_IPv4 == stack) {
+            tr_debug("M2MInterfaceImpl::state_register_address_resolved : IPv4 address");
+            address_type = SN_NSDL_ADDRESS_TYPE_IPV4;
+        } else if((M2MInterface::LwIP_IPv6 == stack) ||
+                  (M2MInterface::Nanostack_IPv6 == stack)) {
+            tr_debug("M2MInterfaceImpl::state_register_address_resolved : IPv6 address");
+            address_type = SN_NSDL_ADDRESS_TYPE_IPV6;
+        }
+        _connection_handler.start_listening_for_data();
+        if(!_nsdl_interface.send_register_message((uint8_t*)event->_address->_address,event->_address->_length,
+                                                  event->_port, address_type)) {
+            // If resource creation fails then inform error to application
+            tr_error("M2MInterfaceImpl::state_register_address_resolved : M2MInterface::InvalidParameters");
+            internal_event(STATE_IDLE);
+            _observer.error(M2MInterface::InvalidParameters);
+        }
+    }
+}
+
+void M2MInterfaceImpl::state_registered( EventData */*data*/)
+{
+    tr_debug("M2MInterfaceImpl::state_registered");
+    _retry_count = 0;
+    _reconnecting = false;
+}
+
+void M2MInterfaceImpl::state_update_registration(EventData *data)
+{
+    tr_debug("M2MInterfaceImpl::state_update_registration");
+    if(data) {
+        M2MUpdateRegisterData *event = static_cast<M2MUpdateRegisterData *> (data);
+        // Create new resources if any
+        if (!event->_object_list.empty()) {
+            _nsdl_interface.create_nsdl_list_structure(event->_object_list);
+        }
+        _nsdl_interface.send_update_registration(event->_lifetime);
+    }
+}
+
+void M2MInterfaceImpl::state_unregister( EventData */*data*/)
+{
+    tr_debug("M2MInterfaceImpl::state_unregister");
+    internal_event(STATE_SENDING_COAP_DATA);
+    if(!_nsdl_interface.send_unregister_message()) {
+        tr_error("M2MInterfaceImpl::state_unregister : M2MInterface::NotRegistered");
+        internal_event(STATE_IDLE);
+        _observer.error(M2MInterface::NotRegistered);
+    }
+}
+
+void M2MInterfaceImpl::state_unregistered( EventData */*data*/)
+{
+    tr_debug("M2MInterfaceImpl::state_unregistered");
+    internal_event(STATE_IDLE);
+}
+
+void M2MInterfaceImpl::state_sending_coap_data( EventData */*data*/)
+{
+    tr_debug("M2MInterfaceImpl::state_sending_coap_data");
+    internal_event(STATE_WAITING);
+}
+
+void M2MInterfaceImpl::state_coap_data_sent( EventData */*data*/)
+{
+    tr_debug("M2MInterfaceImpl::state_coap_data_sent");
+    internal_event(STATE_WAITING);
+}
+
+void M2MInterfaceImpl::state_coap_data_received( EventData *data)
+{
+    tr_debug("M2MInterfaceImpl::state_coap_data_received");
+    if(data) {
+        ReceivedData *event = static_cast<ReceivedData*> (data);
+        sn_nsdl_addr_s address;
+
+        M2MInterface::NetworkStack stack = event->_address->_stack;
+
+        if(M2MInterface::LwIP_IPv4 == stack) {
+            tr_debug("M2MInterfaceImpl::state_coap_data_received : IPv4 address");
+            address.type = SN_NSDL_ADDRESS_TYPE_IPV4;
+            address.addr_len = 4;
+        } else if((M2MInterface::LwIP_IPv6 == stack) ||
+                  (M2MInterface::Nanostack_IPv6 == stack)) {
+            tr_debug("M2MInterfaceImpl::state_coap_data_received : IPv6 address");
+            address.type = SN_NSDL_ADDRESS_TYPE_IPV6;
+            address.addr_len = 16;
+        }
+        address.port = event->_address->_port;
+        address.addr_ptr = (uint8_t*)event->_address->_address;
+        address.addr_len = event->_address->_length;
+
+        // Process received data
+        internal_event(STATE_PROCESSING_COAP_DATA);
+        if(!_nsdl_interface.process_received_data(event->_data,
+                                                  event->_size,
+                                                  &address)) {
+           tr_error("M2MInterfaceImpl::state_coap_data_received : M2MInterface::ResponseParseFailed");
+            _observer.error(M2MInterface::ResponseParseFailed);
+        }
+    }
+}
+
+void M2MInterfaceImpl::state_processing_coap_data( EventData */*data*/)
+{
+    tr_debug("M2MInterfaceImpl::state_processing_coap_data");
+    internal_event(STATE_WAITING);
+}
+
+void M2MInterfaceImpl::state_coap_data_processed( EventData */*data*/)
+{
+    tr_debug("M2MInterfaceImpl::state_coap_data_processed");
+    internal_event(STATE_WAITING);
+}
+
+void M2MInterfaceImpl::state_waiting( EventData */*data*/)
+{
+    tr_debug("M2MInterfaceImpl::state_waiting");
+}
+
+// generates an external event. called once per external event
+// to start the state machine executing
+void M2MInterfaceImpl::external_event(uint8_t new_state,
+                                     EventData* p_data)
+{
+    tr_debug("M2MInterfaceImpl::external_event : new state %d", new_state);
+    // if we are supposed to ignore this event
+    if (new_state == EVENT_IGNORED) {
+        tr_debug("M2MInterfaceImpl::external_event : new state is EVENT_IGNORED");
+        // just delete the event data, if any
+        if (p_data) {
+            delete p_data;
+            p_data = NULL;
+        }
+        _event_ignored = true;
+    }
+    else {
+        tr_debug("M2MInterfaceImpl::external_event : handle new state");
+        // generate the event and execute the state engine
+        internal_event(new_state, p_data);
+    }
+}
+
+// generates an internal event. called from within a state
+// function to transition to a new state
+void M2MInterfaceImpl::internal_event(uint8_t new_state,
+                                      EventData* p_data)
+{
+    tr_debug("M2MInterfaceImpl::internal_event : new state %d", new_state);
+    _event_data = p_data;
+    _event_generated = true;
+    _current_state = new_state;
+    state_engine();
+}
+
+// the state engine executes the state machine states
+void M2MInterfaceImpl::state_engine (void)
+{
+    tr_debug("M2MInterfaceImpl::state_engine");
+    EventData* p_data_temp = NULL;
+
+    // while events are being generated keep executing states
+    while (_event_generated) {
+        p_data_temp = _event_data;  // copy of event data pointer
+        _event_data = NULL;       // event data used up, reset ptr
+        _event_generated = false;  // event used up, reset flag
+
+        assert(_current_state < _max_states);
+
+        state_function( _current_state, p_data_temp );
+
+        // if event data was used, then delete it
+        if (p_data_temp) {
+            delete p_data_temp;
+            p_data_temp = NULL;
+        }
+    }
+}
+
+void M2MInterfaceImpl::state_function( uint8_t current_state, EventData* data )
+{
+    switch( current_state ) {
+        case STATE_IDLE:
+            M2MInterfaceImpl::state_idle(data);
+            break;
+        case STATE_BOOTSTRAP:
+        #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+            M2MInterfaceImpl::state_bootstrap(data);
+        #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+            break;
+        case STATE_BOOTSTRAP_ADDRESS_RESOLVED:
+        #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+            M2MInterfaceImpl::state_bootstrap_address_resolved(data);
+        #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+            break;
+        case STATE_BOOTSTRAP_RESOURCE_CREATED:
+        #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+            M2MInterfaceImpl::state_bootstrap_resource_created(data);
+        #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+            break;
+        case STATE_BOOTSTRAP_WAIT:
+        #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+            // Do nothing, we're just waiting for data_sent callback
+        #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+            break;
+        case STATE_BOOTSTRAPPED:
+        #ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+            M2MInterfaceImpl::state_bootstrapped(data);
+        #endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+            break;
+        case STATE_REGISTER:
+            M2MInterfaceImpl::state_register(data);
+            break;
+        case STATE_REGISTER_ADDRESS_RESOLVED:
+            M2MInterfaceImpl::state_register_address_resolved(data);
+            break;
+        case STATE_REGISTERED:
+            M2MInterfaceImpl::state_registered(data);
+            break;
+        case STATE_UPDATE_REGISTRATION:
+            M2MInterfaceImpl::state_update_registration(data);
+            break;
+        case STATE_UNREGISTER:
+            M2MInterfaceImpl::state_unregister(data);
+            break;
+        case STATE_UNREGISTERED:
+            M2MInterfaceImpl::state_unregistered(data);
+            break;
+        case STATE_SENDING_COAP_DATA:
+            M2MInterfaceImpl::state_sending_coap_data(data);
+            break;
+        case STATE_COAP_DATA_SENT:
+            M2MInterfaceImpl::state_coap_data_sent(data);
+            break;
+        case STATE_COAP_DATA_RECEIVED:
+            M2MInterfaceImpl::state_coap_data_received(data);
+            break;
+        case STATE_PROCESSING_COAP_DATA:
+            M2MInterfaceImpl::state_processing_coap_data(data);
+            break;
+        case STATE_COAP_DATA_PROCESSED:
+            M2MInterfaceImpl::state_coap_data_processed(data);
+            break;
+        case STATE_WAITING:
+            M2MInterfaceImpl::state_waiting(data);
+            break;
+    }
+}
+
+void M2MInterfaceImpl::start_register_update(M2MUpdateRegisterData *data) {
+    tr_debug("M2MInterfaceImpl::start_register_update - IN");
+    if(!data || (data->_lifetime != 0 && (data->_lifetime < MINIMUM_REGISTRATION_TIME))) {
+        _observer.error(M2MInterface::InvalidParameters);
+    }
+    BEGIN_TRANSITION_MAP                                    // - Current State -
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_idle
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state__bootstrap_address_resolved
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap_resource_created
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrap_wait
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_bootstrapped
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_register
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_register_address_resolved
+        TRANSITION_MAP_ENTRY (STATE_UPDATE_REGISTRATION)    // state_registered
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_update_registration
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_unregister
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_unregistered
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_sending_coap_data
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_sent
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_received
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_processing_coap_data
+        TRANSITION_MAP_ENTRY (EVENT_IGNORED)                // state_coap_data_processed
+        TRANSITION_MAP_ENTRY (STATE_UPDATE_REGISTRATION)    // state_waiting
+    END_TRANSITION_MAP(data)
+    if(_event_ignored) {
+        _event_ignored = false;
+        if (!_reconnecting)
+            _observer.error(M2MInterface::NotAllowed);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mnsdlinterface.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1655 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Note: this macro is needed on armcc to get the the PRI*32 macros
+// from inttypes.h in a C++ code.
+#ifndef __STDC_FORMAT_MACROS
+#define __STDC_FORMAT_MACROS
+#endif
+
+// Note: this macro is needed on armcc to get the the limit macros like UINT16_MAX
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS
+#endif
+
+
+#include "include/nsdlaccesshelper.h"
+#include "include/m2mnsdlobserver.h"
+#include "include/m2mtlvdeserializer.h"
+#include "include/m2mtlvserializer.h"
+#include "include/m2mnsdlinterface.h"
+#include "mbed-client/m2mstring.h"
+#include "mbed-client/m2msecurity.h"
+#include "mbed-client/m2mserver.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-trace/mbed_trace.h"
+#include "mbed-client/m2mtimer.h"
+#include "source/libNsdl/src/include/sn_grs.h"
+
+#include <assert.h>
+#include <inttypes.h>
+#include <stdlib.h>
+
+#define BUFFER_SIZE 21
+#define TRACE_GROUP "mClt"
+
+M2MNsdlInterface::M2MNsdlInterface(M2MNsdlObserver &observer)
+: _observer(observer),
+  _endpoint(NULL),
+  _nsdl_handle(NULL),
+  _security(NULL),
+  _server(),
+  _nsdl_exceution_timer(new M2MTimer(*this)),
+  _registration_timer(new M2MTimer(*this)),
+  _counter_for_nsdl(0),
+  _bootstrap_id(0),
+  _unregister_ongoing(false),
+  _identity_accepted(false)
+{
+    tr_debug("M2MNsdlInterface::M2MNsdlInterface()");
+    __nsdl_interface_list.push_back(this);
+    _sn_nsdl_address.addr_len = 0;
+    _sn_nsdl_address.addr_ptr = NULL;
+    _sn_nsdl_address.port = 0;
+    _sn_nsdl_address.type = SN_NSDL_ADDRESS_TYPE_NONE;
+
+    // This initializes libCoap and libNsdl
+    // Parameters are function pointers to used memory allocation
+    // and free functions in structure and used functions for sending
+    // and receiving purposes.
+    _nsdl_handle = sn_nsdl_init(&(__nsdl_c_send_to_server), &(__nsdl_c_received_from_server),
+                 &(__nsdl_c_memory_alloc), &(__nsdl_c_memory_free));
+
+    initialize();
+}
+
+M2MNsdlInterface::~M2MNsdlInterface()
+{
+    tr_debug("M2MNsdlInterface::~M2MNsdlInterface() - IN");
+    if(_endpoint) {
+         memory_free(_endpoint->endpoint_name_ptr);
+         memory_free(_endpoint->lifetime_ptr);
+         memory_free(_endpoint->location_ptr);
+         memory_free(_endpoint);
+    }
+    delete _nsdl_exceution_timer;
+    delete _registration_timer;
+    _object_list.clear();
+    _security = NULL;
+
+    sn_nsdl_destroy(_nsdl_handle);
+    _nsdl_handle = NULL;
+
+    M2MNsdlInterfaceList::const_iterator it;
+    it = __nsdl_interface_list.begin();
+    int index = 0;
+    for (; it!=__nsdl_interface_list.end(); it++) {
+        if ((*it) == this) {
+            __nsdl_interface_list.erase(index);
+            break;
+        }
+        index++;
+    }
+    tr_debug("M2MNsdlInterface::~M2MNsdlInterface() - OUT");
+}
+
+bool M2MNsdlInterface::initialize()
+{
+    tr_debug("M2MNsdlInterface::initialize()");
+    bool success = false;
+
+    //Sets the packet retransmission attempts and time interval
+    sn_nsdl_set_retransmission_parameters(_nsdl_handle,
+                                          MBED_CLIENT_RECONNECTION_COUNT,
+                                          MBED_CLIENT_RECONNECTION_INTERVAL);
+
+    //Allocate the memory for endpoint
+    _endpoint = (sn_nsdl_ep_parameters_s*)memory_alloc(sizeof(sn_nsdl_ep_parameters_s));
+    if(_endpoint) {
+        memset(_endpoint, 0, sizeof(sn_nsdl_ep_parameters_s));
+        success = true;
+    }
+    return success;
+}
+
+void M2MNsdlInterface::create_endpoint(const String &name,
+                                       const String &type,
+                                       const int32_t life_time,
+                                       const String &domain,
+                                       const uint8_t mode,
+                                       const String &/*context_address*/)
+{
+    tr_debug("M2MNsdlInterface::create_endpoint( name %s type %s lifetime %" PRId32 ", domain %s, mode %d)",
+              name.c_str(), type.c_str(), life_time, domain.c_str(), mode);
+    _endpoint_name = name;
+    if(_endpoint){
+        memset(_endpoint, 0, sizeof(sn_nsdl_ep_parameters_s));
+        if(!_endpoint_name.empty()) {
+            memory_free(_endpoint->endpoint_name_ptr);
+            _endpoint->endpoint_name_ptr = alloc_string_copy((uint8_t*)_endpoint_name.c_str(), _endpoint_name.length());
+            _endpoint->endpoint_name_len = _endpoint_name.length();
+        }
+        if(!type.empty()) {
+            _endpoint->type_ptr = (uint8_t*)type.c_str();
+            _endpoint->type_len =  type.length();
+        }
+        if(!domain.empty()) {
+            _endpoint->domain_name_ptr = (uint8_t*)domain.c_str();
+            _endpoint->domain_name_len = domain.length();
+        }
+        _endpoint->binding_and_mode = (sn_nsdl_oma_binding_and_mode_t)mode;
+
+        // If lifetime is less than zero then leave the field empty
+        if( life_time > 0) {
+            set_endpoint_lifetime_buffer(life_time);
+        }
+    }
+}
+
+void M2MNsdlInterface::set_endpoint_lifetime_buffer(int lifetime)
+{
+    // max len of "-9223372036854775808" plus zero termination
+    char buffer[20+1];
+
+    uint32_t size = m2m::itoa_c(lifetime, buffer);
+
+    if (_endpoint && size <= sizeof(buffer)) {
+        _endpoint->lifetime_ptr = alloc_string_copy((uint8_t*)buffer, size);
+        if(_endpoint->lifetime_ptr) {
+            _endpoint->lifetime_len =  size;
+        } else {
+            _endpoint->lifetime_len = 0;
+        }
+    }
+}
+
+
+void M2MNsdlInterface::delete_endpoint()
+{
+    tr_debug("M2MNsdlInterface::delete_endpoint()");
+    if(_endpoint) {
+        free(_endpoint->lifetime_ptr);
+
+        memory_free(_endpoint);
+        _endpoint = NULL;
+    }
+}
+
+bool M2MNsdlInterface::create_nsdl_list_structure(const M2MObjectList &object_list)
+{
+    tr_debug("M2MNsdlInterface::create_nsdl_list_structure()");
+    bool success = false;
+    if(!object_list.empty()) {
+       tr_debug("M2MNsdlInterface::create_nsdl_list_structure - Object count is %d", object_list.size());
+        M2MObjectList::const_iterator it;
+        it = object_list.begin();
+        for ( ; it != object_list.end(); it++ ) {
+            // Create NSDL structure for all Objects inside
+            success = create_nsdl_object_structure(*it);
+            add_object_to_list(*it);
+        }
+    }
+    return success;
+}
+
+bool M2MNsdlInterface::remove_nsdl_resource(M2MBase *base)
+{
+    sn_nsdl_dynamic_resource_parameters_s* resource = base->get_nsdl_resource();
+    return sn_nsdl_pop_resource(_nsdl_handle, resource);
+}
+
+bool M2MNsdlInterface::create_bootstrap_resource(sn_nsdl_addr_s *address, const String &bootstrap_endpoint_name)
+{
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MNsdlInterface::create_bootstrap_resource()");
+    _identity_accepted = false;
+    bool success = false;
+    sn_nsdl_bs_ep_info_t bootstrap_endpoint;
+    tr_debug("M2MNsdlInterface::create_bootstrap_resource() - endpoint name: %s", bootstrap_endpoint_name.c_str());
+    if (_endpoint->endpoint_name_ptr) {
+        memory_free(_endpoint->endpoint_name_ptr);
+    }
+
+    _endpoint->endpoint_name_ptr = alloc_string_copy((uint8_t*)bootstrap_endpoint_name.c_str(), bootstrap_endpoint_name.length());
+    _endpoint->endpoint_name_len = bootstrap_endpoint_name.length();
+    if(_bootstrap_id == 0) {
+        _bootstrap_id = sn_nsdl_oma_bootstrap(_nsdl_handle,
+                                               address,
+                                               _endpoint,
+                                               &bootstrap_endpoint);
+        tr_debug("M2MNsdlInterface::create_bootstrap_resource - _bootstrap_id %d", _bootstrap_id);
+        success = _bootstrap_id != 0;
+    }
+    return success;
+#else
+    (void)address;
+    (void)bootstrap_endpoint_name;
+    return false;
+#endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+}
+
+bool M2MNsdlInterface::send_register_message(uint8_t* address,
+                                             uint8_t address_length,
+                                             const uint16_t port,
+                                             sn_nsdl_addr_type_e address_type)
+{
+    tr_debug("M2MNsdlInterface::send_register_message()");
+    _nsdl_exceution_timer->stop_timer();
+    _nsdl_exceution_timer->start_timer(ONE_SECOND_TIMER * 1000,
+                                       M2MTimerObserver::NsdlExecution,
+                                       false);
+    bool success = false;
+    if(set_NSP_address(_nsdl_handle, address, address_length, port, address_type) == 0) {
+        success = sn_nsdl_register_endpoint(_nsdl_handle,_endpoint) != 0;
+    }
+    return success;
+}
+
+bool M2MNsdlInterface::send_update_registration(const uint32_t lifetime)
+{
+    tr_debug("M2MNsdlInterface::send_update_registration( lifetime %" PRIu32 ")", lifetime);
+    bool success = false;
+    create_nsdl_list_structure(_object_list);
+
+    //If Lifetime value is 0, then don't change the existing lifetime value
+    if(lifetime != 0) {
+        if(_endpoint && _endpoint->lifetime_ptr) {
+            memory_free(_endpoint->lifetime_ptr);
+            _endpoint->lifetime_ptr = NULL;
+            _endpoint->lifetime_len = 0;
+        }
+        set_endpoint_lifetime_buffer(lifetime);
+
+        _registration_timer->stop_timer();
+        _registration_timer->start_timer(registration_time() * 1000,
+                                         M2MTimerObserver::Registration,
+                                         false);
+        if(_nsdl_handle &&
+           _endpoint && _endpoint->lifetime_ptr) {
+            tr_debug("M2MNsdlInterface::send_update_registration - new lifetime value");
+            success = sn_nsdl_update_registration(_nsdl_handle,
+                                                  _endpoint->lifetime_ptr,
+                                                  _endpoint->lifetime_len) != 0;
+        }
+    } else {
+        if(_nsdl_handle) {
+            tr_debug("M2MNsdlInterface::send_update_registration - regular update");
+            success = sn_nsdl_update_registration(_nsdl_handle, NULL, 0) != 0;
+        }
+    }
+    return success;
+}
+
+bool M2MNsdlInterface::send_unregister_message()
+{
+    tr_debug("M2MNsdlInterface::send_unregister_message");
+    if (_unregister_ongoing) {
+        tr_debug("M2MNsdlInterface::send_unregister_message - unregistration already in progress");
+        return true;
+    }
+
+    bool success = false;
+    _unregister_ongoing = true;
+    success = sn_nsdl_unregister_endpoint(_nsdl_handle) != 0;
+    return success;
+}
+
+// XXX: move these to common place, no need to copy these wrappers to multiple places:
+void *M2MNsdlInterface::memory_alloc(uint16_t size)
+{
+    if(size)
+        return malloc(size);
+    else
+        return 0;
+}
+
+void M2MNsdlInterface::memory_free(void *ptr)
+{
+    if(ptr)
+        free(ptr);
+}
+
+uint8_t* M2MNsdlInterface::alloc_string_copy(const uint8_t* source, uint16_t size)
+{
+    assert(source != NULL);
+
+    uint8_t* result = (uint8_t*)memory_alloc(size + 1);
+    if (result) {
+        memcpy(result, source, size);
+        result[size] = '\0';
+    }
+    return result;
+}
+
+uint8_t M2MNsdlInterface::send_to_server_callback(struct nsdl_s * /*nsdl_handle*/,
+                                                  sn_nsdl_capab_e /*protocol*/,
+                                                  uint8_t *data_ptr,
+                                                  uint16_t data_len,
+                                                  sn_nsdl_addr_s *address)
+{
+    tr_debug("M2MNsdlInterface::send_to_server_callback()");
+    _observer.coap_message_ready(data_ptr,data_len,address);
+    return 1;
+}
+
+uint8_t M2MNsdlInterface::received_from_server_callback(struct nsdl_s *nsdl_handle,
+                                                        sn_coap_hdr_s *coap_header,
+                                                        sn_nsdl_addr_s *address)
+{
+    _observer.coap_data_processed();
+    uint8_t value = 0;
+    if(nsdl_handle && coap_header) {
+        tr_debug("M2MNsdlInterface::received_from_server_callback - incoming msg id:%" PRIu16, coap_header->msg_id);
+        tr_debug("M2MNsdlInterface::received_from_server_callback - registration id:%" PRIu16, nsdl_handle->register_msg_id);
+        tr_debug("M2MNsdlInterface::received_from_server_callback - unregistration id:%" PRIu16, nsdl_handle->unregister_msg_id);
+        tr_debug("M2MNsdlInterface::received_from_server_callback - update registration id:%" PRIu16, nsdl_handle->update_register_msg_id);
+        bool is_bootstrap_msg = address && (nsdl_handle->oma_bs_address_len == address->addr_len) &&
+                                   (nsdl_handle->oma_bs_port == address->port) &&
+                                   !memcmp(nsdl_handle->oma_bs_address_ptr, address->addr_ptr, nsdl_handle->oma_bs_address_len);
+        if(coap_header->msg_id == nsdl_handle->register_msg_id) {
+            if(coap_header->msg_code == COAP_MSG_CODE_RESPONSE_CREATED) {
+                tr_debug("M2MNsdlInterface::received_from_server_callback - registration callback");
+                _observer.client_registered(&_server);
+                // If lifetime is less than zero then leave the field empty
+                if(coap_header->options_list_ptr) {
+                    memory_free(_endpoint->lifetime_ptr);
+                    _endpoint->lifetime_ptr = NULL;
+                    _endpoint->lifetime_len = 0;
+
+                    uint32_t max_time = coap_header->options_list_ptr->max_age;
+                    // If lifetime is less than zero then leave the field empty
+                    if( max_time > 0) {
+                        set_endpoint_lifetime_buffer(max_time);
+                    }
+                    if(coap_header->options_list_ptr->location_path_ptr) {
+
+                        memory_free(_endpoint->location_ptr);
+
+                        _endpoint->location_ptr = alloc_string_copy(coap_header->options_list_ptr->location_path_ptr, coap_header->options_list_ptr->location_path_len);
+                        if (_endpoint->location_ptr != NULL) {
+                            _endpoint->location_len = coap_header->options_list_ptr->location_path_len;
+                        }
+                        sn_nsdl_set_endpoint_location(_nsdl_handle,_endpoint->location_ptr,_endpoint->location_len);
+                    }
+                }
+                if(_endpoint->lifetime_ptr) {
+                    _registration_timer->stop_timer();
+                    _registration_timer->start_timer(registration_time() * 1000,
+                                                     M2MTimerObserver::Registration,
+                                                     false);
+                }
+            } else {
+                tr_error("M2MNsdlInterface::received_from_server_callback - registration error %d", coap_header->msg_code);
+                // Try to do clean register again
+                if(COAP_MSG_CODE_RESPONSE_BAD_REQUEST == coap_header->msg_code ||
+                   COAP_MSG_CODE_RESPONSE_FORBIDDEN == coap_header->msg_code) {
+                    _observer.registration_error(M2MInterface::InvalidParameters, false);
+                } else {
+                    _observer.registration_error(M2MInterface::NetworkError, true);
+                }
+
+            }
+        } else if(coap_header->msg_id == nsdl_handle->unregister_msg_id) {
+            _unregister_ongoing = false;
+            tr_debug("M2MNsdlInterface::received_from_server_callback - unregistration callback");
+            if(coap_header->msg_code == COAP_MSG_CODE_RESPONSE_DELETED) {
+                _registration_timer->stop_timer();
+                _observer.client_unregistered();
+            } else {
+                tr_error("M2MNsdlInterface::received_from_server_callback - unregistration error %d", coap_header->msg_code);
+                M2MInterface::Error error = interface_error(coap_header);
+                _observer.registration_error(error);
+            }
+        } else if(coap_header->msg_id == nsdl_handle->update_register_msg_id) {
+            if(coap_header->msg_code == COAP_MSG_CODE_RESPONSE_CHANGED) {
+                tr_debug("M2MNsdlInterface::received_from_server_callback - registration_updated successfully");
+                _observer.registration_updated(_server);
+            } else {
+                tr_error("M2MNsdlInterface::received_from_server_callback - registration_updated failed %d", coap_header->msg_code);
+                _registration_timer->stop_timer();
+                sn_nsdl_register_endpoint(_nsdl_handle,_endpoint);
+            }
+        }
+#ifndef MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+        else if(coap_header->msg_id == nsdl_handle->bootstrap_msg_id) {
+            tr_debug("M2MNsdlInterface::received_from_server_callback - bootstrap");
+            _bootstrap_id = 0;
+            M2MInterface::Error error = interface_error(coap_header);
+            if(error != M2MInterface::ErrorNone) {
+                handle_bootstrap_error();
+            } else {
+                _identity_accepted = true;
+            }
+        }
+#endif //MBED_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+        else {
+
+            sn_coap_hdr_s *coap_response = NULL;
+            bool execute_value_updated = false;
+            M2MObjectInstance *obj_instance = NULL;
+            String resource_name;
+
+            if(COAP_MSG_CODE_REQUEST_PUT == coap_header->msg_code) {
+                if (is_bootstrap_msg) {
+                    handle_bootstrap_put_message(coap_header, address);
+                }
+                else{
+                    tr_debug("M2MNsdlInterface::received_from_server_callback - Method not allowed (PUT).");
+                    coap_response = sn_nsdl_build_response(_nsdl_handle,
+                                                           coap_header,
+                                                           COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED);
+                }
+            }
+            else if(COAP_MSG_CODE_REQUEST_DELETE == coap_header->msg_code) {
+                if (is_bootstrap_msg) {
+                    handle_bootstrap_delete(coap_header, address);
+                }
+                else{
+                    tr_debug("M2MNsdlInterface::received_from_server_callback - Method not allowed (DELETE).");
+                    coap_response = sn_nsdl_build_response(_nsdl_handle,
+                                                           coap_header,
+                                                           COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED);
+                }
+            }
+            else if(COAP_MSG_CODE_REQUEST_POST == coap_header->msg_code) {
+                if(is_bootstrap_msg) {
+                    handle_bootstrap_finished(coap_header, address);
+                }
+                else if(coap_header->uri_path_ptr) {
+
+                    resource_name = coap_to_string(coap_header->uri_path_ptr,
+                                                          coap_header->uri_path_len);
+
+                    String object_name;
+                    int slash_found = resource_name.find_last_of('/');
+                    //The POST operation here is only allowed for non-existing object instances
+                    if(slash_found != -1) {
+                        object_name = resource_name.substr(0,slash_found);
+                        if( object_name.find_last_of('/') != -1){
+                            coap_response = sn_nsdl_build_response(_nsdl_handle,
+                                                                   coap_header,
+                                                                   COAP_MSG_CODE_RESPONSE_NOT_FOUND);
+                        } else {
+                            int32_t instance_id = atoi(resource_name.substr(slash_found+1,
+                                                     resource_name.size()-object_name.size()).c_str());
+                            M2MBase* base = find_resource(object_name);
+                            if(base && (instance_id >= 0) && (instance_id < UINT16_MAX)) {
+                                if(coap_header->payload_ptr) {
+                                    M2MObject* object = static_cast<M2MObject*> (base);
+                                    obj_instance = object->create_object_instance(instance_id);
+                                    if(obj_instance) {
+                                        obj_instance->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+                                        coap_response = obj_instance->handle_post_request(_nsdl_handle,
+                                                                                          coap_header,
+                                                                                          this,
+                                                                                          execute_value_updated);
+                                    }
+                                    if(coap_response && coap_response->msg_code != COAP_MSG_CODE_RESPONSE_CREATED) {
+                                        //Invalid request so remove created ObjectInstance
+                                        object->remove_object_instance(instance_id);
+                                    } else  {
+                                        tr_debug("M2MNsdlInterface::received_from_server_callback - Send Update registration for Create");
+                                        send_update_registration();
+                                    }
+                                } else {
+                                    tr_debug("M2MNsdlInterface::received_from_server_callback - Missing Payload - Cannot create");
+                                    coap_response = sn_nsdl_build_response(_nsdl_handle,
+                                                                           coap_header,
+                                                                           COAP_MSG_CODE_RESPONSE_BAD_REQUEST);
+                                }
+                            } else { //if(base)
+                                tr_debug("M2MNsdlInterface::received_from_server_callback - Missing BASE - Cannot create");
+                                coap_response = sn_nsdl_build_response(_nsdl_handle,
+                                                                       coap_header,
+                                                                       COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED);
+                            }
+                        }
+                    } else{ // if(slash_found != -1)
+                        tr_debug("M2MNsdlInterface::received_from_server_callback - slash_found - Cannot create");
+                        coap_response = sn_nsdl_build_response(_nsdl_handle,
+                                                               coap_header,
+                                                               COAP_MSG_CODE_RESPONSE_NOT_FOUND);
+                    }
+
+                }
+            }
+            else if(COAP_MSG_CODE_EMPTY == coap_header->msg_code) {
+                if (COAP_MSG_TYPE_RESET == coap_header->msg_type) {
+                    // Cancel ongoing observation
+                    tr_error("M2MNsdlInterface::received_from_server_callback() - RESET message");
+                    M2MBase *base = find_resource("", coap_header->token_ptr, coap_header->token_len);
+                    if (base) {
+                        M2MBase::BaseType type = base->base_type();
+                        switch (type) {
+                            case M2MBase::Object:
+                                base->remove_observation_level(M2MBase::O_Attribute);
+                                break;
+                            case M2MBase::Resource:
+                                base->remove_observation_level(M2MBase::R_Attribute);
+                                break;
+                            case M2MBase::ObjectInstance:
+                                base->remove_observation_level(M2MBase::OI_Attribute);
+                                break;
+                            default:
+                                break;
+                        }
+                        base->set_under_observation(false, this);
+                    }
+                } else {
+                    tr_debug("M2MNsdlInterface::received_from_server_callback - Empty ACK, msg id: %d", coap_header->msg_id);
+                    M2MBase *base = find_resource("", coap_header->token_ptr, coap_header->token_len);
+                    if (base) {
+                        // Supported only in Resource level
+                        if (M2MBase::Resource == base->base_type()) {
+                            M2MResource *resource = static_cast<M2MResource *> (base);
+                            resource->notification_sent();
+                        }
+                    }
+                }
+            }
+
+            if(coap_response) {
+                tr_debug("M2MNsdlInterface::received_from_server_callback - send CoAP response");
+                (sn_nsdl_send_coap_message(_nsdl_handle, address, coap_response) == 0) ? value = 0 : value = 1;
+                sn_nsdl_release_allocated_coap_msg_mem(_nsdl_handle, coap_response);
+            }
+
+            if (execute_value_updated) {
+                value_updated(obj_instance, resource_name);
+            }
+
+        }
+    }
+    return value;
+}
+
+uint8_t M2MNsdlInterface::resource_callback(struct nsdl_s */*nsdl_handle*/,
+                                            sn_coap_hdr_s *received_coap_header,
+                                            sn_nsdl_addr_s *address,
+                                            sn_nsdl_capab_e /*nsdl_capab*/)
+{
+    tr_debug("M2MNsdlInterface::resource_callback()");
+    _observer.coap_data_processed();
+    uint8_t result = 1;
+    sn_coap_hdr_s *coap_response = NULL;
+    sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; // 4.00
+    String resource_name = coap_to_string(received_coap_header->uri_path_ptr,
+                                          received_coap_header->uri_path_len);
+    tr_debug("M2MNsdlInterface::resource_callback() - resource_name %s", resource_name.c_str());
+    bool execute_value_updated = false;
+    M2MBase* base = find_resource(resource_name);
+    if(base) {
+        if(COAP_MSG_CODE_REQUEST_GET == received_coap_header->msg_code) {
+            coap_response = base->handle_get_request(_nsdl_handle, received_coap_header,this);
+        } else if(COAP_MSG_CODE_REQUEST_PUT == received_coap_header->msg_code) {
+            coap_response = base->handle_put_request(_nsdl_handle, received_coap_header, this, execute_value_updated);
+        } else if(COAP_MSG_CODE_REQUEST_POST == received_coap_header->msg_code) {
+            if(base->base_type() == M2MBase::ResourceInstance) {
+                msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+            } else {
+                coap_response = base->handle_post_request(_nsdl_handle,
+                                                          received_coap_header,
+                                                          this,
+                                                          execute_value_updated,
+                                                          address);
+            }
+        } else if(COAP_MSG_CODE_REQUEST_DELETE == received_coap_header->msg_code) {
+            // Delete the object instance
+            tr_debug("M2MNsdlInterface::resource_callback() - DELETE the object instance");
+            M2MBase::BaseType type = base->base_type();
+            if(M2MBase::ObjectInstance == type) {
+                M2MBase* base_object = find_resource(base->name());
+                if(base_object) {
+                    M2MObject *object = static_cast<M2MObject*> (base_object);
+                    int slash_found = resource_name.find_last_of('/');
+                    // Object instance validty checks done in upper level, no need for error handling
+                    if(slash_found != -1) {
+                        String object_name;
+                        object_name = resource_name.substr(slash_found + 1, resource_name.length());
+                        if (object->remove_object_instance(strtoul(
+                                object_name.c_str(),
+                                NULL,
+                                10))) {
+                            msg_code = COAP_MSG_CODE_RESPONSE_DELETED;
+                        }
+                    }
+                }
+            } else {
+                msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; // 4.00
+            }
+        }
+    } else  {
+        tr_debug("M2MNsdlInterface::resource_callback() - Resource NOT FOUND");
+        msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; // 4.00
+    }
+    if(!coap_response) {
+            coap_response = sn_nsdl_build_response(_nsdl_handle,
+                                                   received_coap_header,
+                                                   msg_code);
+    }
+    if(coap_response &&
+            coap_response->coap_status != COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVING &&
+            coap_response->msg_code != COAP_MSG_CODE_EMPTY) {
+
+        tr_debug("M2MNsdlInterface::resource_callback() - send CoAP response");
+        (sn_nsdl_send_coap_message(_nsdl_handle, address, coap_response) == 0) ? result = 0 : result = 1;
+        if(coap_response->payload_ptr) {
+            free(coap_response->payload_ptr);
+            coap_response->payload_ptr = NULL;
+        }
+    }
+    // If the external blockwise storing is enabled call value updated once all the blocks have been received
+    if (execute_value_updated &&
+            coap_response &&
+            coap_response->coap_status != COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVING) {
+        value_updated(base,resource_name);
+    }
+
+    sn_nsdl_release_allocated_coap_msg_mem(_nsdl_handle, coap_response);
+    return result;
+}
+
+bool M2MNsdlInterface::process_received_data(uint8_t *data,
+                                             uint16_t data_size,
+                                             sn_nsdl_addr_s *address)
+{
+    tr_debug("M2MNsdlInterface::process_received_data( data size %d)", data_size);
+    return (0 == sn_nsdl_process_coap(_nsdl_handle,
+                                      data,
+                                      data_size,
+                                      address)) ? true : false;
+}
+
+void M2MNsdlInterface::stop_timers()
+{
+    tr_debug("M2MNsdlInterface::stop_timers()");
+    if(_registration_timer) {
+        _registration_timer->stop_timer();
+    }
+    if (_nsdl_exceution_timer) {
+        _nsdl_exceution_timer->stop_timer();
+    }
+    _bootstrap_id = 0;
+    _unregister_ongoing = false;
+}
+
+void M2MNsdlInterface::timer_expired(M2MTimerObserver::Type type)
+{
+    if(M2MTimerObserver::NsdlExecution == type) {
+        sn_nsdl_exec(_nsdl_handle, _counter_for_nsdl);
+        _counter_for_nsdl++;
+    } else if(M2MTimerObserver::Registration == type) {
+        tr_debug("M2MNsdlInterface::timer_expired - M2MTimerObserver::Registration - Send update registration");
+        send_update_registration();
+    }
+}
+
+void M2MNsdlInterface::observation_to_be_sent(M2MBase *object,
+                                              uint16_t obs_number,
+                                              m2m::Vector<uint16_t> changed_instance_ids,
+                                              bool send_object)
+{
+    __mutex_claim();
+    if(object) {
+        tr_debug("M2MNsdlInterface::observation_to_be_sent()");
+        M2MBase::BaseType type = object->base_type();
+        if(type == M2MBase::Object) {
+            send_object_observation(static_cast<M2MObject*> (object),
+                                    obs_number,
+                                    changed_instance_ids,
+                                    send_object);
+        } else if(type == M2MBase::ObjectInstance) {
+            send_object_instance_observation(static_cast<M2MObjectInstance*> (object), obs_number);
+        } else if(type == M2MBase::Resource) {
+            send_resource_observation(static_cast<M2MResource*> (object), obs_number);
+        }
+    }
+    __mutex_release();
+}
+
+void M2MNsdlInterface::send_delayed_response(M2MBase *base)
+{
+    __mutex_claim();
+    tr_debug("M2MNsdlInterface::send_delayed_response()");
+    M2MResource *resource = NULL;
+    if(base) {
+        if(M2MBase::Resource == base->base_type()) {
+            resource = static_cast<M2MResource *> (base);
+        }
+        if(resource) {
+            sn_coap_hdr_s * coap_response = static_cast<sn_coap_hdr_s *>(malloc(sizeof(sn_coap_hdr_s)));
+            if(coap_response) {
+                memset(coap_response,0,sizeof(sn_coap_hdr_s));
+
+                coap_response->msg_type = COAP_MSG_TYPE_CONFIRMABLE;
+                coap_response->msg_code = COAP_MSG_CODE_RESPONSE_CONTENT;
+                resource->get_delayed_token(coap_response->token_ptr,coap_response->token_len);
+
+                uint32_t length = 0;
+                resource->get_value(coap_response->payload_ptr, length);
+                coap_response->payload_len = length;
+
+                sn_nsdl_send_coap_message(_nsdl_handle, _nsdl_handle->nsp_address_ptr->omalw_address_ptr, coap_response);
+
+                if(coap_response->payload_ptr) {
+                   free(coap_response->payload_ptr);
+                   coap_response->payload_ptr = NULL;
+                }
+                if(coap_response->token_ptr) {
+                    free(coap_response->token_ptr);
+                    coap_response->token_ptr = NULL;
+                }
+                free(coap_response);
+            }
+        }
+    }
+    __mutex_release();
+}
+
+void M2MNsdlInterface::resource_to_be_deleted(M2MBase *base)
+{
+    __mutex_claim();
+    remove_nsdl_resource(base);
+    __mutex_release();
+}
+
+void M2MNsdlInterface::value_updated(M2MBase *base,
+                                     const String &object_name)
+{
+    tr_debug("M2MNsdlInterface::value_updated()");
+    if(base) {
+        switch(base->base_type()) {
+            case M2MBase::Object:
+                create_nsdl_object_structure(static_cast<M2MObject*> (base));
+            break;
+            case M2MBase::ObjectInstance:
+                create_nsdl_object_instance_structure(static_cast<M2MObjectInstance*> (base));
+            break;
+            case M2MBase::Resource: {
+                    M2MResource* resource = static_cast<M2MResource*> (base);
+                    create_nsdl_resource_structure(resource,
+                                               resource->supports_multiple_instances());
+            }
+            break;
+            case M2MBase::ResourceInstance: {
+                M2MResourceInstance* instance = static_cast<M2MResourceInstance*> (base);
+                create_nsdl_resource(instance);
+            }
+            break;
+        }
+    }
+
+    if (base && base->is_value_updated_function_set()) {
+        base->execute_value_updated(base->name());
+    }
+    else {
+        _observer.value_updated(base);
+    }
+}
+
+void M2MNsdlInterface::remove_object(M2MBase *object)
+{
+    __mutex_claim();
+    tr_debug("M2MNsdlInterface::remove_object()");
+    M2MObject* rem_object = static_cast<M2MObject*> (object);
+    if(rem_object && !_object_list.empty()) {
+        M2MObjectList::const_iterator it;
+        it = _object_list.begin();
+        int index = 0;
+        for ( ; it != _object_list.end(); it++, index++ ) {
+            if((*it) == rem_object) {
+                _object_list.erase(index);
+                break;
+            }
+        }
+    }
+    if(_object_list.empty()) {
+        _object_list.clear();
+    }
+    __mutex_release();
+}
+
+bool M2MNsdlInterface::create_nsdl_object_structure(M2MObject *object)
+{
+    tr_debug("M2MNsdlInterface::create_nsdl_object_structure()");
+    bool success = false;
+    if(object) {
+        M2MObjectInstanceList instance_list = object->instances();
+        tr_debug("M2MNsdlInterface::create_nsdl_object_structure - Object Instance count %d", instance_list.size());
+        if(!instance_list.empty()) {
+           M2MObjectInstanceList::const_iterator it;
+           it = instance_list.begin();
+           for ( ; it != instance_list.end(); it++ ) {
+               // Create NSDL structure for all object instances inside
+               success = create_nsdl_object_instance_structure(*it);
+           }
+        }
+    }
+    if(object && object->operation() != M2MBase::NOT_ALLOWED) {
+        success = create_nsdl_resource(object);
+    }
+    return success;
+}
+
+bool M2MNsdlInterface::create_nsdl_object_instance_structure(M2MObjectInstance *object_instance)
+{
+    tr_debug("M2MNsdlInterface::create_nsdl_object_instance_structure()");
+    bool success = false;
+    if( object_instance) {
+        M2MResourceList res_list = object_instance->resources();
+        tr_debug("M2MNsdlInterface::create_nsdl_object_instance_structure - ResourceBase count %d", res_list.size());
+        if(!res_list.empty()) {
+            M2MResourceList::const_iterator it;
+            it = res_list.begin();
+            for ( ; it != res_list.end(); it++ ) {
+                // Create NSDL structure for all resources inside
+                success = create_nsdl_resource_structure(*it,
+                                                         (*it)->supports_multiple_instances());
+            }
+        }
+        if(object_instance->operation() != M2MBase::NOT_ALLOWED) {
+            success = create_nsdl_resource(object_instance);
+        }
+    }
+    return success;
+}
+
+bool M2MNsdlInterface::create_nsdl_resource_structure(M2MResource *res,
+                                                      bool multiple_instances)
+{
+    tr_debug("M2MNsdlInterface::create_nsdl_resource_structure()");
+    bool success = false;
+    if(res) {
+        // if there are multiple instances supported
+        if(multiple_instances) {
+            M2MResourceInstanceList res_list = res->resource_instances();
+            tr_debug("M2MNsdlInterface::create_nsdl_resource_structure - ResourceInstance count %d", res_list.size());
+            if(!res_list.empty()) {
+                M2MResourceInstanceList::const_iterator it;
+                it = res_list.begin();
+                for ( ; it != res_list.end(); it++ ) {
+                    success = create_nsdl_resource((*it));
+                    if(!success) {
+                        tr_error("M2MNsdlInterface::create_nsdl_resource_structure - instance creation failed");
+                        return false;
+                    }
+                }
+                // Register the main Resource as well along with ResourceInstances
+                success = create_nsdl_resource(res);
+            }
+        } else {
+            success = create_nsdl_resource(res);
+        }
+    }
+    return success;
+}
+
+bool M2MNsdlInterface::create_nsdl_resource(M2MBase *base)
+{
+    __mutex_claim();
+    tr_debug("M2MNsdlInterface::create_nsdl_resource");
+    bool success = false;
+    if(base) {
+        int8_t result = 0;
+        sn_nsdl_dynamic_resource_parameters_s* orig_resource = base->get_nsdl_resource();
+        tr_debug("M2MNsdlInterface::create_nsdl_resource - path (%.*s)", orig_resource->static_resource_parameters->pathlen,
+                 orig_resource->static_resource_parameters->path);
+
+        // needed on deletion
+        if (base->observation_handler() == NULL) {
+            base->set_observation_handler(this);
+        }
+
+        result = sn_nsdl_put_resource(_nsdl_handle, orig_resource);
+        tr_debug("M2MNsdlInterface::create_nsdl_resource - Creating in NSDL-C result %d", result);
+
+        // Either the resource is created or it already
+        // exists , then result is success.
+        if (result == 0 ||
+           result == -2){
+            success = true;
+        }
+    }
+    __mutex_release();
+    return success;
+}
+
+// convenience method to get the URI from its buffer field...
+String M2MNsdlInterface::coap_to_string(uint8_t *coap_data,int coap_data_length)
+{
+    String value = "";
+    if (coap_data != NULL && coap_data_length > 0) {
+        value.append_raw((char *)coap_data,coap_data_length);
+    }
+    return value;
+}
+
+uint64_t M2MNsdlInterface::registration_time()
+{
+    uint64_t value = 0;
+    if(_endpoint && _endpoint->lifetime_ptr) {
+        value = atol((const char*)_endpoint->lifetime_ptr);
+    }
+
+    if(value >= OPTIMUM_LIFETIME) {
+        value = value - REDUCE_LIFETIME;
+    } else {
+        value = REDUCTION_FACTOR * value;
+    }
+    tr_debug("M2MNsdlInterface::registration_time - value (in seconds) %ld", value);
+    return value;
+}
+
+M2MBase* M2MNsdlInterface::find_resource(const String &object_name,
+                                         uint8_t *token,
+                                         uint8_t token_len)
+{
+    tr_debug("M2MNsdlInterface::find_resource(object level) - name (%s)", object_name.c_str());
+    tr_debug("M2MNsdlInterface::find_resource - token (%.*s)", token_len, token);
+    M2MBase *object = NULL;
+    if(!_object_list.empty()) {
+        M2MObjectList::const_iterator it;
+        it = _object_list.begin();
+        for ( ; it != _object_list.end(); it++ ) {
+            if (token_len == 0) {
+                tr_debug("M2MNsdlInterface::find_resource(object level) - path (%s)",
+                         (char*)(*it)->uri_path());
+                if (strcmp((char*)(*it)->uri_path(), object_name.c_str()) == 0) {
+                    object = (*it);
+                    tr_debug("M2MNsdlInterface::find_resource(%s) found", object_name.c_str());
+                    break;
+                }
+            } else {
+                uint8_t *stored_token = 0;
+                uint32_t stored_token_length = 0;
+                (*it)->get_observation_token(stored_token, stored_token_length);
+                tr_debug("M2MNsdlInterface::find_resource(object level) - stored token (%.*s)", stored_token_length, stored_token);
+                if (stored_token) {
+                    if (stored_token_length == token_len &&
+                            memcmp(token, stored_token, token_len) == 0) {
+                        object = (*it);
+                        tr_debug("M2MNsdlInterface::find_resource - token found");
+                        free(stored_token);
+                        break;
+                    } else {
+                        free(stored_token);
+                    }
+                }
+            }
+            object = find_resource((*it), object_name, token, token_len);
+            if(object != NULL) {
+                break;
+            }
+        }
+    }
+    return object;
+}
+
+M2MBase* M2MNsdlInterface::find_resource(const M2MObject *object,
+                                         const String &object_instance,
+                                         uint8_t *token,
+                                         uint8_t token_len)
+{
+    tr_debug("M2MNsdlInterface::find_resource(object instance level) - name (%s)", object_instance.c_str());
+    M2MBase *instance = NULL;
+    if(object) {
+        M2MObjectInstanceList list = object->instances();
+        if(!list.empty()) {
+            M2MObjectInstanceList::const_iterator it;
+            it = list.begin();
+            for ( ; it != list.end(); it++ ) {
+                if (!token) {
+                    tr_debug("M2MNsdlInterface::find_resource(object instance level) - path (%s)",
+                             (char*)(*it)->uri_path());
+                    if(!strcmp((char*)(*it)->uri_path(), object_instance.c_str())){
+                        instance = (*it);
+                        break;
+                    }
+                } else {
+                    uint8_t *stored_token = 0;
+                    uint32_t stored_token_length = 0;
+                    tr_debug("M2MNsdlInterface::find_resource(object instance level) - in token (%.*s)", token_len, token);
+                    (*it)->get_observation_token(stored_token, stored_token_length);
+                    tr_debug("M2MNsdlInterface::find_resource(object instance level) - stored token (%.*s)", stored_token_length, stored_token);
+                    if (stored_token) {
+                        if (stored_token_length == token_len &&
+                                memcmp(token, stored_token, token_len) == 0) {
+                            instance = (*it);
+                            free(stored_token);
+                            break;
+                        } else {
+                            free(stored_token);
+                        }
+                    }
+                }
+                instance = find_resource((*it),object_instance, token, token_len);
+                if(instance != NULL){
+                    break;
+                }
+            }
+        }
+    }
+    return instance;
+}
+
+M2MBase* M2MNsdlInterface::find_resource(const M2MObjectInstance *object_instance,
+                                         const String &resource_instance,
+                                         uint8_t *token,
+                                         uint8_t token_len)
+{
+    tr_debug("M2MNsdlInterface::find_resource(resource level) - name (%s)", resource_instance.c_str());
+    M2MBase *instance = NULL;
+    if(object_instance) {
+        M2MResourceList list = object_instance->resources();
+        if(!list.empty()) {
+            M2MResourceList::const_iterator it;
+            it = list.begin();
+            for ( ; it != list.end(); it++ ) {
+                if (!token) {
+                    if(!strcmp((char*)(*it)->uri_path(), resource_instance.c_str())) {
+                        instance = *it;
+                        break;
+                    }
+                    else if((*it)->supports_multiple_instances()) {
+                        instance = find_resource((*it), (*it)->uri_path(),
+                                                 resource_instance, token, token_len);
+                        if(instance != NULL){
+                            break;
+                        }
+                    }
+                } else {
+                    uint8_t *stored_token = 0;
+                    uint32_t stored_token_length = 0;
+                    tr_debug("M2MNsdlInterface::find_resource(resource level) - in token (%.*s)", token_len, token);
+                    (*it)->get_observation_token(stored_token, stored_token_length);
+                    tr_debug("M2MNsdlInterface::find_resource(resource level) - stored token (%.*s)", stored_token_length, stored_token);
+                    if (stored_token) {
+                        if (stored_token_length == token_len &&
+                                memcmp(token, stored_token, token_len) == 0) {
+                            instance = *it;
+                            free(stored_token);
+                            break;
+                        } else {
+                            free(stored_token);
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return instance;
+}
+
+M2MBase* M2MNsdlInterface::find_resource(const M2MResource *resource,
+                                         const String &object_name,
+                                         const String &resource_instance,
+                                         uint8_t */*token*/,
+                                         uint8_t /*token_len*/)
+{
+    tr_debug("M2MNsdlInterface::find_resource(resource instance level)");
+    M2MBase *res = NULL;
+    if(resource) {
+        if(resource->supports_multiple_instances()) {
+            M2MResourceInstanceList list = resource->resource_instances();
+            if(!list.empty()) {
+                M2MResourceInstanceList::const_iterator it;
+                it = list.begin();
+                for ( ; it != list.end(); it++ ) {
+                    if(!strcmp((char*)(*it)->uri_path(), resource_instance.c_str())){
+                        res = (*it);
+                        break;
+                    }
+                }
+            }
+        }
+    }
+    return res;
+}
+
+bool M2MNsdlInterface::object_present(M2MObject* object) const
+{
+    bool success = false;
+    if(object && !_object_list.empty()) {
+        M2MObjectList::const_iterator it;
+        it = _object_list.begin();
+        for ( ; it != _object_list.end(); it++ ) {
+            if((*it) == object) {
+                success = true;
+                break;
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MNsdlInterface::add_object_to_list(M2MObject* object)
+{
+    bool success = false;
+    if(object && !object_present(object)) {
+        _object_list.push_back(object);
+        success = true;
+    }
+    return success;
+}
+
+M2MInterface::Error M2MNsdlInterface::interface_error(sn_coap_hdr_s *coap_header)
+{
+    M2MInterface::Error error = M2MInterface::ErrorNone;
+    if(coap_header) {
+        switch(coap_header->msg_code) {
+            case COAP_MSG_CODE_RESPONSE_BAD_REQUEST:
+            case COAP_MSG_CODE_RESPONSE_BAD_OPTION:
+            case COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_INCOMPLETE:
+            case COAP_MSG_CODE_RESPONSE_PRECONDITION_FAILED:
+            case COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE:
+            case COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT:
+                error = M2MInterface::InvalidParameters;
+                break;
+            case COAP_MSG_CODE_RESPONSE_UNAUTHORIZED:
+            case COAP_MSG_CODE_RESPONSE_FORBIDDEN:
+            case COAP_MSG_CODE_RESPONSE_NOT_ACCEPTABLE:
+            case COAP_MSG_CODE_RESPONSE_NOT_FOUND:
+            case COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED:
+                error = M2MInterface::NotAllowed;
+                break;
+            case COAP_MSG_CODE_RESPONSE_CREATED:
+            case COAP_MSG_CODE_RESPONSE_DELETED:
+            case COAP_MSG_CODE_RESPONSE_VALID:
+            case COAP_MSG_CODE_RESPONSE_CHANGED:
+            case COAP_MSG_CODE_RESPONSE_CONTENT:
+                error = M2MInterface::ErrorNone;
+                break;
+            default:
+                error = M2MInterface::UnknownError;
+                break;
+        }
+        if(coap_header->coap_status == COAP_STATUS_BUILDER_MESSAGE_SENDING_FAILED) {
+            error = M2MInterface::NetworkError;
+        }
+    }
+    return error;
+}
+
+void M2MNsdlInterface::send_object_observation(M2MObject *object,
+                                               uint16_t obs_number,
+                                               m2m::Vector<uint16_t> changed_instance_ids,
+                                               bool send_object)
+{
+    tr_debug("M2MNsdlInterface::send_object_observation");
+    if(object) {
+        uint8_t *value = 0;
+        uint32_t length = 0;
+        uint8_t *token = 0;
+        uint32_t token_length = 0;
+
+        M2MTLVSerializer serializer;
+        // Send whole object structure
+        if (send_object) {
+            value = serializer.serialize(object->instances(), length);
+        }
+        // Send only changed object instances
+        else {
+            M2MObjectInstanceList list;
+            Vector<uint16_t>::const_iterator it;
+            it = changed_instance_ids.begin();
+            for (; it != changed_instance_ids.end(); it++){
+                M2MObjectInstance* obj_instance = object->object_instance(*it);
+                if (obj_instance){
+                    list.push_back(obj_instance);
+                }
+            }
+            if (!list.empty()) {
+                value = serializer.serialize(list, length);
+                list.clear();
+            }
+        }
+
+        object->get_observation_token(token,token_length);
+
+        send_notification(token,
+                          token_length,
+                          value,
+                          length,
+                          obs_number,
+                          object->max_age(),
+                          object->coap_content_type());
+        memory_free(value);
+        memory_free(token);
+    }
+}
+
+void M2MNsdlInterface::send_object_instance_observation(M2MObjectInstance *object_instance,
+                                                        uint16_t obs_number)
+{
+    tr_debug("M2MNsdlInterface::send_object_instance_observation");
+    if(object_instance) {
+        uint8_t *value = 0;
+        uint32_t length = 0;
+        uint8_t *token = 0;
+        uint32_t token_length = 0;
+
+        M2MTLVSerializer serializer;
+        value = serializer.serialize(object_instance->resources(), length);
+
+        object_instance->get_observation_token(token,token_length);
+
+        send_notification(token,
+                          token_length,
+                          value,
+                          length,
+                          obs_number,
+                          object_instance->max_age(),
+                          object_instance->coap_content_type());
+        memory_free(value);
+        memory_free(token);
+    }
+}
+
+void M2MNsdlInterface::send_resource_observation(M2MResource *resource,
+                                                 uint16_t obs_number)
+{
+    tr_debug("M2MNsdlInterface::send_resource_observation");
+    if(resource) {
+        uint8_t *value = 0;
+        uint32_t length = 0;
+        uint8_t *token = 0;
+        uint32_t token_length = 0;
+
+        resource->get_observation_token(token,token_length);
+        uint8_t content_type = 0;
+        if(M2MResourceInstance::OPAQUE == resource->resource_instance_type()) {
+            content_type = COAP_CONTENT_OMA_OPAQUE_TYPE;
+        }
+        if (resource->resource_instance_count() > 0) {
+            content_type = COAP_CONTENT_OMA_TLV_TYPE;
+            M2MTLVSerializer serializer;
+            value = serializer.serialize(resource, length);
+        } else {
+            resource->get_value(value,length);
+        }
+        send_notification(token,
+                          token_length,
+                          value,
+                          length,
+                          obs_number,
+                          resource->max_age(),
+                          content_type);
+
+        memory_free(value);
+        memory_free(token);
+    }
+}
+
+void M2MNsdlInterface::send_notification(uint8_t *token,
+                                         uint8_t  token_length,
+                                         uint8_t *value,
+                                         uint32_t value_length,
+                                         uint16_t observation,
+                                         uint32_t max_age,
+                                         uint8_t  coap_content_type)
+
+{
+    tr_debug("M2MNsdlInterface::send_notification");
+    sn_coap_hdr_s *notification_message_ptr;
+
+    /* Allocate and initialize memory for header struct */
+    notification_message_ptr = static_cast<sn_coap_hdr_s *>(memory_alloc(sizeof(sn_coap_hdr_s)));
+    if (notification_message_ptr) {
+        memset(notification_message_ptr, 0, sizeof(sn_coap_hdr_s));
+
+        notification_message_ptr->options_list_ptr = sn_nsdl_alloc_options_list(_nsdl_handle, notification_message_ptr);
+        if (notification_message_ptr->options_list_ptr) {
+            /* Fill header */
+            notification_message_ptr->msg_type = COAP_MSG_TYPE_CONFIRMABLE;
+            notification_message_ptr->msg_code = COAP_MSG_CODE_RESPONSE_CONTENT;
+
+            /* Fill token */
+            notification_message_ptr->token_len = token_length;
+            notification_message_ptr->token_ptr = token;
+
+            /* Fill payload */
+            notification_message_ptr->payload_len = value_length;
+            notification_message_ptr->payload_ptr = value;
+
+            /* Fill observe */
+            notification_message_ptr->options_list_ptr->observe = observation;
+
+            notification_message_ptr->options_list_ptr->max_age = max_age;
+
+            notification_message_ptr->content_format = sn_coap_content_format_e(coap_content_type);
+
+            /* Send message */
+            sn_nsdl_send_coap_message(_nsdl_handle,
+                                      _nsdl_handle->nsp_address_ptr->omalw_address_ptr,
+                                      notification_message_ptr);
+
+            /* Free memory */
+            notification_message_ptr->payload_ptr = NULL;
+            notification_message_ptr->options_list_ptr->observe = -1;
+            notification_message_ptr->token_ptr = NULL;
+        }
+        sn_nsdl_release_allocated_coap_msg_mem(_nsdl_handle, notification_message_ptr);
+    }
+}
+
+nsdl_s * M2MNsdlInterface::get_nsdl_handle()
+{
+    return _nsdl_handle;
+}
+
+void M2MNsdlInterface::handle_bootstrap_put_message(sn_coap_hdr_s *coap_header,
+                                                sn_nsdl_addr_s *address) {
+#ifndef M2M_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MNsdlInterface::handle_bootstrap_message");
+    uint8_t response_code = COAP_MSG_CODE_RESPONSE_CHANGED;
+    sn_coap_hdr_s *coap_response = NULL;
+    bool success = false;
+    bool security_object = false;
+    uint16_t content_type = 0;
+
+    if (!_security) {
+        _security = new M2MSecurity(M2MSecurity::M2MServer);
+    }
+
+    String resource_name = coap_to_string(coap_header->uri_path_ptr,
+                                          coap_header->uri_path_len);
+    tr_debug("M2MNsdlInterface::handle_bootstrap_message - uri %s", resource_name.c_str());
+
+    // Check incoming object
+    if (resource_name.compare(0,1,"0") == 0) {
+        security_object = true;
+        if(_security) {
+            success = true;
+            // Not mandatory resource that's why it must be created first
+            _security->create_resource(M2MSecurity::ShortServerID, 1);
+            // Change operation mode
+            M2MResourceList list = _security->object_instance()->resources();
+            if(!list.empty()) {
+                M2MResourceList::const_iterator it;
+                it = list.begin();
+                for ( ; it != list.end(); it++ ) {
+                    (*it)->set_operation(M2MBase::PUT_ALLOWED);
+                }
+            }
+        }
+    }
+    else if (resource_name.compare(0,1,"1") == 0) {
+        success = true;
+    }
+
+    if (success) {
+        // Send delayed response if token is part of the message
+        if (coap_header->token_ptr) {
+            tr_debug("M2MNsdlInterface::handle_bootstrap_message - send delayed response");
+            coap_response = sn_nsdl_build_response(_nsdl_handle,
+                                                   coap_header,
+                                                   COAP_MSG_CODE_EMPTY);
+            if (coap_response) {
+                coap_response->msg_type = COAP_MSG_TYPE_ACKNOWLEDGEMENT;
+                sn_nsdl_send_coap_message(_nsdl_handle, address, coap_response);
+                sn_nsdl_release_allocated_coap_msg_mem(_nsdl_handle, coap_response);
+            }
+        }
+
+        if(coap_header->content_format != COAP_CT_NONE) {
+            content_type = coap_header->content_format;
+        }
+
+        tr_debug("M2MNsdlInterface::handle_bootstrap_message - content_type %d", content_type);
+        if (content_type != COAP_CONTENT_OMA_TLV_TYPE) {
+            success = false;
+        }
+        if (success) {
+            success = parse_bootstrap_message(coap_header, security_object);
+            // Set operation back to default ones
+            if (_security) {
+                M2MResourceList list = _security->object_instance()->resources();
+                if(!list.empty()) {
+                    M2MResourceList::const_iterator it;
+                    it = list.begin();
+                    for ( ; it != list.end(); it++ ) {
+                        (*it)->set_operation(M2MBase::NOT_ALLOWED);
+                    }
+                }
+            }
+        }
+    }
+
+    if (!success) {
+        response_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+        handle_bootstrap_error();
+    }
+    coap_response = sn_nsdl_build_response(_nsdl_handle,
+                                           coap_header,
+                                           response_code);
+    if (coap_response) {
+        sn_nsdl_send_coap_message(_nsdl_handle, address, coap_response);
+        sn_nsdl_release_allocated_coap_msg_mem(_nsdl_handle, coap_response);
+    }
+#else
+    (void) coap_header;
+    (void) address;
+#endif
+}
+
+bool M2MNsdlInterface::parse_bootstrap_message(sn_coap_hdr_s *coap_header, bool is_security_object)
+{
+#ifndef M2M_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MNsdlInterface::parse_bootstrap_put_message");
+    bool ret = false;
+    bool is_obj_instance = false;
+    uint16_t instance_id = 0;
+    if (_security) {
+        // Actually there are no member variables on the M2MTLVDeserializer so all the methods
+        // could be converted to static ones.
+        M2MTLVDeserializer deserializer;
+
+        ret = is_obj_instance = deserializer.is_object_instance(coap_header->payload_ptr);
+        if (!is_obj_instance) {
+            ret = deserializer.is_resource(coap_header->payload_ptr);
+        }
+
+        if (ret) {
+            M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+            if (is_obj_instance) {
+                if (is_security_object) {
+                    error = deserializer.deserialise_object_instances(coap_header->payload_ptr,
+                                                               coap_header->payload_len,
+                                                               *_security,
+                                                               M2MTLVDeserializer::Put);
+                    }
+                else {
+                    error = deserializer.deserialise_object_instances(coap_header->payload_ptr,
+                                                               coap_header->payload_len,
+                                                               _server,
+                                                               M2MTLVDeserializer::Put);
+                }
+            }
+            else {
+                if (is_security_object) {
+                    instance_id = deserializer.instance_id(coap_header->payload_ptr);
+                    error = deserializer.deserialize_resources(coap_header->payload_ptr,
+                                                               coap_header->payload_len,
+                                                               *_security->object_instance(instance_id),
+                                                               M2MTLVDeserializer::Put);
+                }
+                else {
+                    instance_id = deserializer.instance_id(coap_header->payload_ptr);
+                    error = deserializer.deserialize_resources(coap_header->payload_ptr,
+                                                               coap_header->payload_len,
+                                                               *(_server.object_instance(instance_id)),
+                                                               M2MTLVDeserializer::Post);
+                }
+            }
+
+            if (error != M2MTLVDeserializer::None) {
+                tr_error("M2MNsdlInterface::parse_bootstrap_put_message - error %d", error);
+                ret = false;
+            }
+        }
+    }
+    return ret;
+#else
+    (void) coap_header;
+    (void) is_security_object;
+    return false;
+#endif
+}
+
+void M2MNsdlInterface::handle_bootstrap_finished(sn_coap_hdr_s *coap_header,sn_nsdl_addr_s *address)
+{
+#ifndef M2M_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    String object_name = coap_to_string(coap_header->uri_path_ptr,
+                                          coap_header->uri_path_len);
+    tr_debug("M2MNsdlInterface::handle_bootstrap_finished - path: %s", object_name.c_str());
+    sn_coap_hdr_s *coap_response = NULL;
+    uint8_t msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
+
+    // Accept only '/bs' path and check that needed data is in security object
+    if (object_name.size() != 2 ||
+            object_name.compare(0,2,BOOTSTRAP_URI) != 0 ||
+            !validate_security_object()) {
+        msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+    } else {
+        // Add short server id to server object
+        _server.set_resource_value(M2MServer::ShortServerID,
+                                    _security->resource_value_int(M2MSecurity::ShortServerID));
+    }
+
+    coap_response = sn_nsdl_build_response(_nsdl_handle,
+                                           coap_header,
+                                           msg_code);
+    if(coap_response) {
+        sn_nsdl_send_coap_message(_nsdl_handle, address, coap_response);
+        sn_nsdl_release_allocated_coap_msg_mem(_nsdl_handle, coap_response);
+    }
+    if (COAP_MSG_CODE_RESPONSE_CHANGED == msg_code) {
+        // Switch back to original ep name
+        if (_endpoint->endpoint_name_ptr) {
+            memory_free(_endpoint->endpoint_name_ptr);
+        }
+        _endpoint->endpoint_name_ptr = alloc_string_copy((uint8_t*)_endpoint_name.c_str(), _endpoint_name.length());
+        _endpoint->endpoint_name_len = _endpoint_name.length();
+        // Inform observer that bootstrap is finished but it should wait until nsdl has sent data.
+        // The final bootstrap_done callback is called in the observers data_sent callback.
+        _observer.bootstrap_wait(_security);
+    } else {
+        handle_bootstrap_error();
+    }
+#else
+    (void) coap_header;
+    (void) address;
+#endif
+}
+
+void M2MNsdlInterface::handle_bootstrap_delete(sn_coap_hdr_s *coap_header,sn_nsdl_addr_s *address)
+{
+#ifndef M2M_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    sn_coap_hdr_s *coap_response = NULL;
+    uint8_t msg_code = COAP_MSG_CODE_RESPONSE_DELETED;
+    String object_name = coap_to_string(coap_header->uri_path_ptr,
+                                          coap_header->uri_path_len);
+    tr_debug("M2MNsdlInterface::handle_bootstrap_delete - obj %s", object_name.c_str());
+    if(!_identity_accepted) {
+        msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+    }
+    // Only following paths are accepted, 0, 0/0
+    else if (object_name.size() == 2 || object_name.size() > 3) {
+        msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+    }
+    else if ((object_name.size() == 1 && object_name.compare(0,1,"0") != 0) ||
+            (object_name.size() == 3 && object_name.compare(0,3,"0/0") != 0)) {
+        msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+    }
+
+    coap_response = sn_nsdl_build_response(_nsdl_handle,
+                                           coap_header,
+                                           msg_code);
+
+    if(coap_response) {
+        sn_nsdl_send_coap_message(_nsdl_handle, address, coap_response);
+        sn_nsdl_release_allocated_coap_msg_mem(_nsdl_handle, coap_response);
+        if(_security) {
+            _security->clear_resources();
+        }
+    }
+    if (!coap_response || COAP_MSG_CODE_RESPONSE_DELETED != msg_code) {
+        handle_bootstrap_error();
+    }
+#else
+    (void) coap_header;
+    (void) address;
+#endif
+}
+
+bool M2MNsdlInterface::validate_security_object()
+{
+#ifndef M2M_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+    tr_debug("M2MNsdlInterface::validate_security_object");
+    if (_security) {
+        String address = _security->resource_value_string(M2MSecurity::M2MServerUri);
+        uint32_t sec_mode = _security->resource_value_int(M2MSecurity::SecurityMode);
+        bool is_bs_server = _security->resource_value_int(M2MSecurity::BootstrapServer);
+        uint32_t public_key_size = _security->get_resource(M2MSecurity::PublicKey)->value_length();
+        uint32_t server_key_size = _security->get_resource(M2MSecurity::ServerPublicKey)->value_length();
+        uint32_t pkey_size = _security->get_resource(M2MSecurity::Secretkey)->value_length();
+        tr_debug("M2MNsdlInterface::validate_security_object - Server URI /0/0: %s", address.c_str());
+        tr_debug("M2MNsdlInterface::validate_security_object - is bs server /0/1: %d", is_bs_server);
+        tr_debug("M2MNsdlInterface::validate_security_object - Security Mode /0/2: %" PRIu32, sec_mode);
+        tr_debug("M2MNsdlInterface::validate_security_object - Public key size /0/3: %" PRIu32, public_key_size);
+        tr_debug("M2MNsdlInterface::validate_security_object - Server Public key size /0/4: %" PRIu32, server_key_size);
+        tr_debug("M2MNsdlInterface::validate_security_object - Secret key size /0/5: %" PRIu32, pkey_size);
+        // Only NoSec and Certificate modes are supported
+        if (!address.empty() && !is_bs_server) {
+            if (M2MSecurity::Certificate == sec_mode) {
+                if (!public_key_size || !server_key_size || !pkey_size) {
+                    return false;
+                } else {
+                    return true;
+                }
+            } else if (M2MSecurity::NoSecurity == sec_mode){
+                return true;
+            } else {
+                return false;
+            }
+        } else {
+            return false;
+        }
+    }
+    return false;
+#else
+    return false;
+#endif
+}
+
+void M2MNsdlInterface::handle_bootstrap_error()
+{
+    tr_debug("M2MNsdlInterface::handle_bootstrap_error()");
+    _identity_accepted = false;
+    if (_security) {
+        delete _security;
+        _security = NULL;
+    }
+    _observer.bootstrap_error();
+}
+
+const String& M2MNsdlInterface::endpoint_name() const
+{
+    return _endpoint_name;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mobject.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,491 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobservationhandler.h"
+#include "mbed-client/m2mconstants.h"
+#include "include/m2mtlvserializer.h"
+#include "include/m2mtlvdeserializer.h"
+#include "include/m2mreporthandler.h"
+#include "mbed-trace/mbed_trace.h"
+#include "mbed-client/m2mstringbuffer.h"
+
+#include <stdlib.h>
+
+#define BUFFER_SIZE 10
+#define TRACE_GROUP "mClt"
+
+M2MObject::M2MObject(const String &object_name, char *path, bool external_blockwise_store)
+: M2MBase(object_name,
+          M2MBase::Dynamic,
+          "",
+          path,
+          external_blockwise_store),
+  _max_instance_count(MAX_UNINT_16_COUNT)
+{
+    M2MBase::set_base_type(M2MBase::Object);
+    if(M2MBase::name_id() != -1) {
+        M2MBase::set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+    }
+}
+
+M2MObject::M2MObject(const M2MBase::lwm2m_parameters_s* static_res)
+: M2MBase(static_res),
+  _max_instance_count(MAX_UNINT_16_COUNT)
+{
+    if(static_res->name_id != -1) {
+        M2MBase::set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+    }
+}
+
+M2MObject::~M2MObject()
+{
+    if(!_instance_list.empty()) {
+
+        M2MObjectInstanceList::const_iterator it;
+        it = _instance_list.begin();
+        M2MObjectInstance* obj = NULL;
+        uint16_t index = 0;
+        for (; it!=_instance_list.end(); it++, index++ ) {
+            //Free allocated memory for object instances.
+            obj = *it;
+            delete obj;
+        }
+
+        _instance_list.clear();
+    }
+}
+
+M2MObjectInstance* M2MObject::create_object_instance(uint16_t instance_id)
+{
+    tr_debug("M2MObject::create_object_instance - id: %d", instance_id);
+    M2MObjectInstance *instance = NULL;
+    if(!object_instance(instance_id)) {
+        char* path = create_path(*this, instance_id);
+        // Note: the object instance's name contains actually object's name.
+        instance = new M2MObjectInstance(*this, this->name(), "", path);
+        if(instance) {
+            instance->add_observation_level(observation_level());
+            instance->set_instance_id(instance_id);
+            if(M2MBase::name_id() != -1) {
+                instance->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+            }
+            _instance_list.push_back(instance);
+        }
+    }
+    return instance;
+}
+
+// KS: is this needed for object instance?? TODO!
+M2MObjectInstance* M2MObject::create_object_instance(const lwm2m_parameters_s* s)
+{
+    tr_debug("M2MObject::create_object_instance - id: %d", s->instance_id);
+    M2MObjectInstance *instance = NULL;
+    if(!object_instance(s->instance_id)) {
+
+        instance = new M2MObjectInstance(*this, s);
+        if(instance) {
+            instance->add_observation_level(observation_level());
+            //instance->set_instance_id(instance_id);
+            //if(M2MBase::name_id() != -1) {
+              //  instance->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+            //}
+            _instance_list.push_back(instance);
+        }
+    }
+    return instance;
+}
+
+bool M2MObject::remove_object_instance(uint16_t inst_id)
+{
+    tr_debug("M2MObject::remove_object_instance(inst_id %d)", inst_id);
+    bool success = false;
+    if(!_instance_list.empty()) {
+        M2MObjectInstance* obj = NULL;
+        M2MObjectInstanceList::const_iterator it;
+        it = _instance_list.begin();
+        int pos = 0;
+        for ( ; it != _instance_list.end(); it++, pos++ ) {
+            if((*it)->instance_id() == inst_id) {
+                // Instance found and deleted.
+                obj = *it;
+
+                _instance_list.erase(pos);
+                delete obj;
+                success = true;
+                break;
+            }
+        }
+    }
+    return success;
+}
+
+M2MObjectInstance* M2MObject::object_instance(uint16_t inst_id) const
+{
+    tr_debug("M2MObject::object_instance(inst_id %d)", inst_id);
+    M2MObjectInstance *obj = NULL;
+    if(!_instance_list.empty()) {
+        M2MObjectInstanceList::const_iterator it;
+        it = _instance_list.begin();
+        for ( ; it != _instance_list.end(); it++ ) {
+            if((*it)->instance_id() == inst_id) {
+                // Instance found.
+                obj = *it;
+                break;
+            }
+        }
+    }
+    return obj;
+}
+
+const M2MObjectInstanceList& M2MObject::instances() const
+{
+    return _instance_list;
+}
+
+uint16_t M2MObject::instance_count() const
+{
+    return (uint16_t)_instance_list.size();
+}
+
+M2MBase::BaseType M2MObject::base_type() const
+{
+    return M2MBase::base_type();
+}
+
+void M2MObject::add_observation_level(M2MBase::Observation observation_level)
+{
+    M2MBase::add_observation_level(observation_level);
+    if(!_instance_list.empty()) {
+         M2MObjectInstanceList::const_iterator it;
+         it = _instance_list.begin();
+         for ( ; it != _instance_list.end(); it++ ) {
+             (*it)->add_observation_level(observation_level);
+         }
+    }
+}
+
+void M2MObject::remove_observation_level(M2MBase::Observation observation_level)
+{
+    M2MBase::remove_observation_level(observation_level);
+    if(!_instance_list.empty()) {
+        M2MObjectInstanceList::const_iterator it;
+        it = _instance_list.begin();
+        for ( ; it != _instance_list.end(); it++ ) {
+            (*it)->remove_observation_level(observation_level);
+        }
+    }
+}
+
+sn_coap_hdr_s* M2MObject::handle_get_request(nsdl_s *nsdl,
+                                             sn_coap_hdr_s *received_coap_header,
+                                             M2MObservationHandler *observation_handler)
+{
+    tr_debug("M2MObject::handle_get_request()");
+    sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CONTENT;
+    sn_coap_hdr_s * coap_response = sn_nsdl_build_response(nsdl,
+                                                           received_coap_header,
+                                                           msg_code);
+    uint8_t * data = NULL;
+    uint32_t  data_length = 0;
+    if(received_coap_header) {
+        // process the GET if we have registered a callback for it
+        if ((operation() & SN_GRS_GET_ALLOWED) != 0) {
+            if(coap_response) {
+                uint16_t coap_content_type = 0;
+                bool content_type_present = false;
+                if(received_coap_header->content_format != COAP_CT_NONE) {
+                    content_type_present = true;
+                    coap_content_type = received_coap_header->content_format;
+                }
+                if(!content_type_present &&
+                   M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE) {
+                    coap_content_type = COAP_CONTENT_OMA_TLV_TYPE;
+                }
+
+                tr_debug("M2MObject::handle_get_request() - Request Content-Type %d", coap_content_type);
+                if (coap_response->content_format == COAP_CT_NONE) {
+                    coap_response->content_format = sn_coap_content_format_e(coap_content_type);
+
+                    if (coap_response->content_format != COAP_CT_NONE) {
+                        set_coap_content_type(coap_content_type);
+                    }
+                }
+                // fill in the CoAP response payload
+                if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type) {
+                    M2MTLVSerializer serializer;
+                    data = serializer.serialize(_instance_list, data_length);
+
+                } else { // TOD0: Implement JSON Format.
+                    msg_code = COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT; // Content format not supported
+                }
+
+                coap_response->payload_len = data_length;
+                coap_response->payload_ptr = data;
+
+                coap_response->options_list_ptr = sn_nsdl_alloc_options_list(nsdl, coap_response);
+
+                coap_response->options_list_ptr->max_age = max_age();
+
+                if(data){
+                    if(received_coap_header->options_list_ptr) {
+                        if(received_coap_header->options_list_ptr->observe != -1) {
+                            if (is_observable()) {
+                                uint32_t number = 0;
+                                uint8_t observe_option = 0;
+                                observe_option = received_coap_header->options_list_ptr->observe;
+
+                                if(START_OBSERVATION == observe_option) {
+                                    tr_debug("M2MObject::handle_get_request - Starts Observation");
+                                    // If the observe length is 0 means register for observation.
+                                    if(received_coap_header->options_list_ptr->observe != -1) {
+                                        number = received_coap_header->options_list_ptr->observe;
+                                    }
+                                    if(received_coap_header->token_ptr) {
+                                        tr_debug("M2MObject::handle_get_request - Sets Observation Token to resource");
+                                        set_observation_token(received_coap_header->token_ptr,
+                                                              received_coap_header->token_len);
+                                    }
+
+                                    // If the observe value is 0 means register for observation.
+                                    if(number == 0) {
+                                        tr_debug("M2MObject::handle_get_request - Put Resource under Observation");
+                                        set_under_observation(true,observation_handler);
+                                        add_observation_level(M2MBase::O_Attribute);
+                                        tr_debug("M2MObject::handle_get_request - Observation Number %d", observation_number());
+                                        coap_response->options_list_ptr->observe = observation_number();
+                                    }
+                                } else if (STOP_OBSERVATION == observe_option) {
+                                    tr_debug("M2MObject::handle_get_request - Stops Observation");
+                                    // If the observe options_list_ptr->observe value is 1 means de-register from observation.
+                                    set_under_observation(false,NULL);
+                                    remove_observation_level(M2MBase::O_Attribute);
+                                }
+                                msg_code = COAP_MSG_CODE_RESPONSE_CONTENT;
+                            }
+                            else {
+                                msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+                            }
+                        }
+                    }
+                } else {
+                    msg_code = COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT; // Content format not supported
+                }
+            }
+        }else {
+            tr_error("M2MResource::handle_get_request - Return COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+            // Operation is not allowed.
+            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+        }
+    } else {
+        msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+    }
+    if(coap_response) {
+        coap_response->msg_code = msg_code;
+    }
+    return coap_response;
+}
+
+sn_coap_hdr_s* M2MObject::handle_put_request(nsdl_s *nsdl,
+                                             sn_coap_hdr_s *received_coap_header,
+                                             M2MObservationHandler */*observation_handler*/,
+                                             bool &/*execute_value_updated*/)
+{
+    tr_debug("M2MObject::handle_put_request()");
+    sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; // 2.04
+    sn_coap_hdr_s *coap_response = sn_nsdl_build_response(nsdl,
+                                                          received_coap_header,
+                                                          msg_code);
+    if(received_coap_header) {
+        if(received_coap_header->options_list_ptr &&
+           received_coap_header->options_list_ptr->uri_query_ptr) {
+            char *query = (char*)alloc_string_copy(received_coap_header->options_list_ptr->uri_query_ptr,
+                                                    received_coap_header->options_list_ptr->uri_query_len);
+            if (query){
+                tr_debug("M2MObject::handle_put_request() - Query %s", query);
+                // if anything was updated, re-initialize the stored notification attributes
+                if (!handle_observation_attribute(query)){
+                    tr_debug("M2MObject::handle_put_request() - Invalid query");
+                    msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; // 4.00
+                }
+                free(query);
+            }
+        } else {
+            tr_error("M2MObject::handle_put_request() - COAP_MSG_CODE_RESPONSE_BAD_REQUEST - Empty URI_QUERY");
+            msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+        }
+    } else {
+        msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+    }
+    if(coap_response) {
+        coap_response->msg_code = msg_code;
+    }
+    return coap_response;
+}
+
+
+sn_coap_hdr_s* M2MObject::handle_post_request(nsdl_s *nsdl,
+                                              sn_coap_hdr_s *received_coap_header,
+                                              M2MObservationHandler *observation_handler,
+                                              bool &execute_value_updated,
+                                              sn_nsdl_addr_s *)
+{
+    tr_debug("M2MObject::handle_post_request()");
+    sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; // 2.04
+    // process the POST if we have registered a callback for it
+    sn_coap_hdr_s *coap_response = sn_nsdl_build_response(nsdl,
+                                      received_coap_header,
+                                      msg_code);
+
+    if(received_coap_header) {
+        if ((operation() & SN_GRS_POST_ALLOWED) != 0) {
+            if(received_coap_header->payload_ptr) {
+                tr_debug("M2MObject::handle_post_request() - Update Object with new values");
+                uint16_t coap_content_type = 0;
+                bool content_type_present = false;
+                if(received_coap_header->content_format != COAP_CT_NONE) {
+                    content_type_present = true;
+                    if(coap_response) {
+                        coap_content_type = received_coap_header->content_format;
+                    }
+                } // if(received_coap_header->content_format)
+                if(!content_type_present &&
+                   M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE) {
+                    coap_content_type = COAP_CONTENT_OMA_TLV_TYPE;
+                }
+
+                tr_debug("M2MObject::handle_post_request() - Request Content-Type %d", coap_content_type);
+
+                if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type) {
+                    uint16_t instance_id = 0;
+                    // Check next free instance id
+                    for(instance_id = 0; instance_id <= _max_instance_count; instance_id++) {
+                        if(NULL == object_instance(instance_id)) {
+                            break;
+                        }
+                        if(instance_id == _max_instance_count) {
+                            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+                            break;
+                        }
+                    }
+                    if(COAP_MSG_CODE_RESPONSE_CHANGED == msg_code) {
+                        M2MTLVDeserializer deserializer;
+                        bool is_obj_instance = false;
+                        bool obj_instance_exists = false;
+                        is_obj_instance = deserializer.is_object_instance(received_coap_header->payload_ptr);
+                        if (is_obj_instance) {
+                            instance_id = deserializer.instance_id(received_coap_header->payload_ptr);
+                            tr_debug("M2MObject::handle_post_request() - instance id in TLV: %d", instance_id);
+                            // Check if instance id already exists
+                            if (object_instance(instance_id)){
+                                obj_instance_exists = true;
+                            }
+                        }
+                        if (!obj_instance_exists) {
+                            M2MObjectInstance *obj_instance = create_object_instance(instance_id);
+                            if(obj_instance) {
+                                obj_instance->set_operation(M2MBase::GET_PUT_ALLOWED);
+                            }
+
+                            M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+                            if(is_obj_instance) {
+                                tr_debug("M2MObject::handle_post_request() - TLV data contains ObjectInstance");
+                                error = deserializer.deserialise_object_instances(received_coap_header->payload_ptr,
+                                                                           received_coap_header->payload_len,
+                                                                           *this,
+                                                                           M2MTLVDeserializer::Post);
+                            } else if(obj_instance &&
+                                        (deserializer.is_resource(received_coap_header->payload_ptr) ||
+                                         deserializer.is_multiple_resource(received_coap_header->payload_ptr))) {
+                                tr_debug("M2MObject::handle_post_request() - TLV data contains Resources");
+                                error = deserializer.deserialize_resources(received_coap_header->payload_ptr,
+                                                                            received_coap_header->payload_len,
+                                                                            *obj_instance,
+                                                                            M2MTLVDeserializer::Post);
+                            } else {
+                                error = M2MTLVDeserializer::NotValid;
+                            }
+                            switch(error) {
+                                case M2MTLVDeserializer::None:
+                                    if(observation_handler) {
+                                        execute_value_updated = true;
+                                    }
+                                    coap_response->options_list_ptr = sn_nsdl_alloc_options_list(nsdl, coap_response);
+
+                                    if (coap_response->options_list_ptr) {
+
+                                        StringBuffer<MAX_OBJECT_PATH_NAME> obj_name;
+
+                                        if (obj_name.ensure_space(M2MBase::resource_name_length() + (1 + 5 + 1))) {
+                                            obj_name.append(M2MBase::name());
+                                            obj_name.append('/');
+                                            obj_name.append_int(instance_id);
+
+                                            coap_response->options_list_ptr->location_path_len = obj_name.get_size();
+                                            coap_response->options_list_ptr->location_path_ptr =
+                                                    alloc_copy((uint8_t*)obj_name.c_str(), obj_name.get_size());
+                                            // todo: else return error
+                                        }
+                                    }
+                                    // todo: else return error
+                                    msg_code = COAP_MSG_CODE_RESPONSE_CREATED;
+                                    break;
+                                case M2MTLVDeserializer::NotAllowed:
+                                    msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+                                    break;
+                                case M2MTLVDeserializer::NotValid:
+                                    msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+                                    break;
+                                case M2MTLVDeserializer::NotFound:
+                                    msg_code = COAP_MSG_CODE_RESPONSE_NOT_FOUND;
+                                    break;
+                            }
+
+                        } else {
+                            tr_debug("M2MObject::handle_post_request() - COAP_MSG_CODE_RESPONSE_BAD_REQUEST");
+                            msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+                        }
+                    }
+                } else {
+                    msg_code =COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT;
+                } // if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type)
+            } else {
+                tr_error("M2MObject::handle_post_request - COAP_MSG_CODE_RESPONSE_BAD_REQUEST - Missing Payload");
+                msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; //
+            }
+        } else { // if ((object->operation() & SN_GRS_POST_ALLOWED) != 0)
+            tr_error("M2MObject::handle_post_request - COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED; // 4.05
+        }
+    } else { //if(received_coap_header)
+        tr_error("M2MObject::handle_post_request - COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+        msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED; // 4.05
+    }
+
+    if(coap_response) {
+        coap_response->msg_code = msg_code;
+    }
+    return coap_response;
+}
+
+void M2MObject::notification_update(uint16_t obj_instance_id)
+{
+    tr_debug("M2MObject::notification_update - id: %d", obj_instance_id);
+    M2MReportHandler *report_handler = M2MBase::report_handler();
+    if(report_handler && is_under_observation()) {
+        report_handler->set_notification_trigger(obj_instance_id);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mobjectinstance.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,720 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2mresource.h"
+#include "mbed-client/m2mresource.h"
+#include "mbed-client/m2mobservationhandler.h"
+#include "mbed-client/m2mstring.h"
+#include "mbed-client/m2mstringbuffer.h"
+#include "include/m2mtlvserializer.h"
+#include "include/m2mtlvdeserializer.h"
+#include "include/nsdllinker.h"
+#include "include/m2mreporthandler.h"
+#include "mbed-trace/mbed_trace.h"
+
+#include <stdlib.h>
+
+#define BUFFER_SIZE 10
+#define TRACE_GROUP "mClt"
+
+M2MObjectInstance::M2MObjectInstance(M2MObject& parent, const String &object_name,
+                                     const String &resource_type,
+                                     char *path,
+                                     bool external_blockwise_store)
+: M2MBase(object_name,
+          M2MBase::Dynamic,
+          resource_type,
+          path,
+          external_blockwise_store),
+  _parent(parent)
+{
+    M2MBase::set_base_type(M2MBase::ObjectInstance);
+    M2MBase::set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+}
+
+M2MObjectInstance::M2MObjectInstance(M2MObject& parent, const lwm2m_parameters_s* static_res)
+: M2MBase(static_res), _parent(parent)
+{
+    M2MBase::set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+}
+
+M2MObjectInstance::~M2MObjectInstance()
+{
+    if(!_resource_list.empty()) {
+        M2MResource* res = NULL;
+        M2MResourceList::const_iterator it;
+        it = _resource_list.begin();
+        for (; it!=_resource_list.end(); it++ ) {
+            //Free allocated memory for resources.
+            res = *it;
+            delete res;
+        }
+        _resource_list.clear();
+    }
+}
+
+// TBD, ResourceType to the base class struct?? TODO!
+M2MResource* M2MObjectInstance::create_static_resource(const lwm2m_parameters_s* static_res,
+                                                       M2MResourceInstance::ResourceType type)
+{
+    tr_debug("M2MObjectInstance::create_static_resource(lwm2m_parameters_s resource_name %s)", static_res->name);
+    M2MResource *res = NULL;
+    if (validate_string_length(static_res->name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
+        return res;
+    }
+    if(!resource(static_res->name)) {
+        res = new M2MResource(*this, static_res, type, (const uint16_t) M2MBase::instance_id());
+        if(res) {
+            res->add_observation_level(observation_level());
+            //if (multiple_instance) {
+                //res->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+            //}
+            _resource_list.push_back(res);
+        }
+    }
+    return res;
+}
+
+M2MResource* M2MObjectInstance::create_static_resource(const String &resource_name,
+                                                       const String &resource_type,
+                                                       M2MResourceInstance::ResourceType type,
+                                                       const uint8_t *value,
+                                                       const uint8_t value_length,
+                                                       bool multiple_instance,
+                                                       bool external_blockwise_store)
+{
+    tr_debug("M2MObjectInstance::create_static_resource(resource_name %s)",resource_name.c_str());
+    M2MResource *res = NULL;
+    if (validate_string_length(resource_name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
+        return res;
+    }
+    if(!resource(resource_name)) {
+        char *path = create_path(*this, resource_name.c_str());
+
+        if (path) {
+            res = new M2MResource(*this, resource_name, resource_type, type,
+                                  value, value_length, path, M2MBase::instance_id(),
+                                  multiple_instance, external_blockwise_store);
+            if(res) {
+                res->add_observation_level(observation_level());
+                if (multiple_instance) {
+                    res->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+                }
+                _resource_list.push_back(res);
+            }
+        }
+    }
+    return res;
+}
+
+M2MResource* M2MObjectInstance::create_dynamic_resource(const lwm2m_parameters_s* static_res,
+                                                        M2MResourceInstance::ResourceType type,
+                                                        bool observable)
+{
+    tr_debug("M2MObjectInstance::create_dynamic_resource(resource_name %s)", static_res->name);
+    M2MResource *res = NULL;
+
+    if (validate_string_length(static_res->name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
+        return res;
+    }
+    if(!resource(static_res->name)) {
+        res = new M2MResource(*this, static_res, type, M2MBase::instance_id());
+        if(res) {
+            //if (multiple_instance) { // TODO!
+              //  res->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+            //}
+            res->add_observation_level(observation_level());
+            _resource_list.push_back(res);
+        }
+    }
+    return res;
+}
+
+M2MResource* M2MObjectInstance::create_dynamic_resource(const String &resource_name,
+                                                const String &resource_type,
+                                                M2MResourceInstance::ResourceType type,
+                                                bool observable,
+                                                bool multiple_instance,
+                                                bool external_blockwise_store)
+{
+    tr_debug("M2MObjectInstance::create_dynamic_resource(resource_name %s)",resource_name.c_str());
+    M2MResource *res = NULL;
+    if (validate_string_length(resource_name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
+        return res;
+    }
+    if(!resource(resource_name)) {
+        char *path = create_path(*this, resource_name.c_str());
+        if (path) {
+            res = new M2MResource(*this, resource_name, resource_type, type,
+                                  observable, path, M2MBase::instance_id(),
+                                  multiple_instance, external_blockwise_store);
+            if(res) {
+                if (multiple_instance) {
+                    res->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
+                }
+                res->add_observation_level(observation_level());
+                _resource_list.push_back(res);
+            }
+        }
+    }
+    return res;
+}
+
+M2MResourceInstance* M2MObjectInstance::create_static_resource_instance(const String &resource_name,
+                                                                        const String &resource_type,
+                                                                        M2MResourceInstance::ResourceType type,
+                                                                        const uint8_t *value,
+                                                                        const uint8_t value_length,
+                                                                        uint16_t instance_id,
+                                                                        bool external_blockwise_store)
+{
+    tr_debug("M2MObjectInstance::create_static_resource_instance(resource_name %s)",resource_name.c_str());
+    M2MResourceInstance *instance = NULL;
+    if (validate_string_length(resource_name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
+
+        return instance;
+    }
+    M2MResource *res = resource(resource_name);
+    if(!res) {
+        char *path = create_path(*this, resource_name.c_str());
+        if (path) {
+            res = new M2MResource(*this, resource_name, resource_type, type,
+                                  value, value_length, path, M2MBase::instance_id(),
+                                  true, external_blockwise_store);
+            _resource_list.push_back(res);
+            res->set_operation(M2MBase::GET_ALLOWED);
+            res->set_observable(false);
+            res->set_register_uri(false);
+        }
+    }
+    if(res && res->supports_multiple_instances()&& (res->resource_instance(instance_id) == NULL)) {
+        char *path = M2MBase::create_path(*res, instance_id);
+        if (path) {
+            instance = new M2MResourceInstance(*res, resource_name, resource_type, type,
+                                               value, value_length,
+                                               M2MBase::instance_id(),
+                                               path, external_blockwise_store);
+            if(instance) {
+                instance->set_operation(M2MBase::GET_ALLOWED);
+                instance->set_instance_id(instance_id);
+                res->add_resource_instance(instance);
+            }
+        }
+    }
+    return instance;
+}
+
+M2MResourceInstance* M2MObjectInstance::create_dynamic_resource_instance(const String &resource_name,
+                                                                         const String &resource_type,
+                                                                         M2MResourceInstance::ResourceType type,
+                                                                         bool observable,
+                                                                         uint16_t instance_id,
+                                                                         bool external_blockwise_store)
+{
+    tr_debug("M2MObjectInstance::create_dynamic_resource_instance(resource_name %s)",resource_name.c_str());
+    M2MResourceInstance *instance = NULL;
+    if (validate_string_length(resource_name, 1, MAX_ALLOWED_STRING_LENGTH) == false) {
+        return instance;
+    }
+    M2MResource *res = resource(resource_name);
+    if(!res) {
+        char *path = create_path(*this, resource_name.c_str());
+        if (path) {
+            res = new M2MResource(*this, resource_name, resource_type, type,
+                                  false, path, M2MBase::instance_id(), true);
+            _resource_list.push_back(res);
+            res->set_register_uri(false);
+            res->set_operation(M2MBase::GET_ALLOWED);
+        }
+    }
+    if (res && res->supports_multiple_instances() && (res->resource_instance(instance_id) == NULL)) {
+        char *path = create_path(*res, instance_id);
+        if (path) {
+            instance = new M2MResourceInstance(*res, resource_name, resource_type, type,
+                                               M2MBase::instance_id(),
+                                               path, external_blockwise_store);
+            if(instance) {
+                instance->set_operation(M2MBase::GET_ALLOWED);
+                instance->set_observable(observable);
+                instance->set_instance_id(instance_id);
+                res->add_resource_instance(instance);
+            }
+        }
+    }
+    return instance;
+}
+
+bool M2MObjectInstance::remove_resource(const String &resource_name)
+{
+    return remove_resource(resource_name.c_str());
+}
+
+bool M2MObjectInstance::remove_resource(const char *resource_name)
+{
+    tr_debug("M2MObjectInstance::remove_resource(resource_name %s)", resource_name);
+
+    bool success = false;
+    if(!_resource_list.empty()) {
+         M2MResource* res = NULL;
+         M2MResourceList::const_iterator it;
+         it = _resource_list.begin();
+         int pos = 0;
+         for ( ; it != _resource_list.end(); it++, pos++ ) {
+             if(strcmp((*it)->name(), resource_name) == 0) {
+                // Resource found and deleted.
+                res = *it;
+                delete res;
+                res = NULL;
+                _resource_list.erase(pos);
+                success = true;
+                break;
+             }
+         }
+     }
+    return success;
+}
+
+bool M2MObjectInstance::remove_resource_instance(const String &resource_name,
+                                                 uint16_t inst_id)
+{
+    tr_debug("M2MObjectInstance::remove_resource_instance(resource_name %s inst_id %d)",
+             resource_name.c_str(), inst_id);
+    bool success = false;
+    M2MResource *res = resource(resource_name);
+    if(res) {
+        M2MResourceInstanceList list = res->resource_instances();
+        M2MResourceInstanceList::const_iterator it;
+        it = list.begin();
+        for ( ; it != list.end(); it++) {
+            if((*it)->instance_id() == inst_id) {
+                success = res->remove_resource_instance(inst_id);
+                if(res->resource_instance_count() == 0) {
+                    M2MResourceList::const_iterator itr;
+                    itr = _resource_list.begin();
+                    int pos = 0;
+                    for ( ; itr != _resource_list.end(); itr++, pos++ ) {
+                        if(strcmp((*itr)->name(),resource_name.c_str()) == 0) {
+                            delete res;
+                            res = NULL;
+                            _resource_list.erase(pos);
+                            break;
+                        }
+                    }
+                }
+                break;
+            }
+        }
+    }
+    return success;
+}
+
+M2MResource* M2MObjectInstance::resource(const String &resource_name) const
+{
+    return resource(resource_name.c_str());
+}
+
+M2MResource* M2MObjectInstance::resource(const char *resource_name) const
+{
+    M2MResource *res = NULL;
+    if(!_resource_list.empty()) {
+        M2MResourceList::const_iterator it;
+        it = _resource_list.begin();
+        for (; it!=_resource_list.end(); it++ ) {
+            if(strcmp((*it)->name(), resource_name) == 0) {
+                res = *it;
+                break;
+            }
+        }
+    }
+    return res;
+}
+
+const M2MResourceList& M2MObjectInstance::resources() const
+{
+    return _resource_list;
+}
+
+uint16_t M2MObjectInstance::resource_count() const
+{
+    uint16_t count = 0;
+    if(!_resource_list.empty()) {
+        M2MResourceList::const_iterator it;
+        it = _resource_list.begin();
+        for ( ; it != _resource_list.end(); it++ ) {
+            if((*it)->supports_multiple_instances()) {
+                count += (*it)->resource_instance_count();
+            } else {
+                count++;
+            }
+        }
+    }
+    return count;
+}
+
+uint16_t M2MObjectInstance::resource_count(const String& resource) const
+{
+
+    return resource_count(resource.c_str());
+}
+
+uint16_t M2MObjectInstance::resource_count(const char *resource) const
+{
+    uint16_t count = 0;
+    if(!_resource_list.empty()) {
+        M2MResourceList::const_iterator it;
+        it = _resource_list.begin();
+        for ( ; it != _resource_list.end(); it++ ) {
+            if(strcmp((*it)->name(), resource) == 0) {
+                if((*it)->supports_multiple_instances()) {
+                    count += (*it)->resource_instance_count();
+                } else {
+                    count++;
+                }
+            }
+        }
+    }
+    return count;
+}
+
+M2MBase::BaseType M2MObjectInstance::base_type() const
+{
+    return M2MBase::base_type();
+}
+
+void M2MObjectInstance::add_observation_level(M2MBase::Observation observation_level)
+{
+    M2MBase::add_observation_level(observation_level);
+    if(!_resource_list.empty()) {
+        M2MResourceList::const_iterator it;
+        it = _resource_list.begin();
+        for ( ; it != _resource_list.end(); it++ ) {
+            (*it)->add_observation_level(observation_level);
+        }
+    }
+}
+
+void M2MObjectInstance::remove_observation_level(M2MBase::Observation observation_level)
+{
+    M2MBase::remove_observation_level(observation_level);
+    if(!_resource_list.empty()) {
+        M2MResourceList::const_iterator it;
+        it = _resource_list.begin();
+        for ( ; it != _resource_list.end(); it++ ) {
+           (*it)->remove_observation_level(observation_level);
+        }
+    }
+}
+
+sn_coap_hdr_s* M2MObjectInstance::handle_get_request(nsdl_s *nsdl,
+                                                     sn_coap_hdr_s *received_coap_header,
+                                                     M2MObservationHandler *observation_handler)
+{
+    tr_debug("M2MObjectInstance::handle_get_request()");
+    sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CONTENT;
+    sn_coap_hdr_s * coap_response = sn_nsdl_build_response(nsdl,
+                                                           received_coap_header,
+                                                           msg_code);
+    uint8_t * data = NULL;
+    uint32_t  data_length = 0;
+    if(received_coap_header) {
+        // process the GET if we have registered a callback for it
+        if ((operation() & SN_GRS_GET_ALLOWED) != 0) {
+            if(coap_response) {
+                uint16_t coap_content_type = 0;
+                bool content_type_present = false;
+
+                if(received_coap_header->content_format != COAP_CT_NONE) {
+                    content_type_present = true;
+                    coap_content_type = received_coap_header->content_format;
+                }
+                if(!content_type_present &&
+                   M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE) {
+                    coap_content_type = COAP_CONTENT_OMA_TLV_TYPE;
+                }
+
+                tr_debug("M2MObjectInstance::handle_get_request() - Request Content-Type %d", coap_content_type);
+                if (coap_response->content_format == COAP_CT_NONE) {
+                    coap_response->content_format = sn_coap_content_format_e(coap_content_type);
+
+                    if (coap_response->content_format != COAP_CT_NONE) {
+                        set_coap_content_type(coap_content_type);
+                    }
+                }
+                // fill in the CoAP response payload
+                if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type) {
+                    M2MTLVSerializer serializer;
+                    data = serializer.serialize(_resource_list, data_length);
+                } else {
+                    msg_code = COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT; // Content format not supported
+                }
+
+                coap_response->payload_len = data_length;
+                coap_response->payload_ptr = data;
+
+                if(data) {
+                    coap_response->options_list_ptr = sn_nsdl_alloc_options_list(nsdl, coap_response);
+
+                    coap_response->options_list_ptr->max_age = max_age();
+
+                    if(received_coap_header->options_list_ptr) {
+                        if(received_coap_header->options_list_ptr->observe != -1) {
+                            if (is_observable()) {
+                                uint32_t number = 0;
+                                uint8_t observe_option = 0;
+                                observe_option = received_coap_header->options_list_ptr->observe;
+                                if(START_OBSERVATION == observe_option) {
+                                    tr_debug("M2MObjectInstance::handle_get_request - Starts Observation");
+                                    // If the observe length is 0 means register for observation.
+                                    if(received_coap_header->options_list_ptr->observe != -1) {
+                                        number = received_coap_header->options_list_ptr->observe;
+                                    }
+                                    if(received_coap_header->token_ptr) {
+                                        tr_debug("M2MObjectInstance::handle_get_request - Sets Observation Token to resource");
+                                        set_observation_token(received_coap_header->token_ptr,
+                                                              received_coap_header->token_len);
+                                    }
+
+                                    // If the observe value is 0 means register for observation.
+                                    if(number == 0) {
+                                        tr_debug("M2MObjectInstance::handle_get_request - Put Resource under Observation");
+                                        set_under_observation(true,observation_handler);
+                                        add_observation_level(M2MBase::OI_Attribute);
+                                        coap_response->options_list_ptr->observe = observation_number();
+                                    }
+                                } else if (STOP_OBSERVATION == observe_option) {
+                                    tr_debug("M2MObjectInstance::handle_get_request - Stops Observation");
+                                    set_under_observation(false,NULL);
+                                    remove_observation_level(M2MBase::OI_Attribute);
+
+                                }
+                                msg_code = COAP_MSG_CODE_RESPONSE_CONTENT;
+                            }
+                            else {
+                                msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+                            }
+                        }
+                    }
+                } else {
+                    msg_code = COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT; // Content format not supported
+                }
+            }
+        }else {
+            tr_error("M2MObjectInstance::handle_get_request - Return COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+            // Operation is not allowed.
+            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+        }
+    } else {
+        msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+    }
+    if(coap_response) {
+        coap_response->msg_code = msg_code;
+    }
+    return coap_response;
+}
+
+sn_coap_hdr_s* M2MObjectInstance::handle_put_request(nsdl_s *nsdl,
+                                                     sn_coap_hdr_s *received_coap_header,
+                                                     M2MObservationHandler *observation_handler,
+                                                     bool &/*execute_value_updated*/)
+{
+    tr_debug("M2MObjectInstance::handle_put_request()");
+    sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; // 2.04
+    sn_coap_hdr_s * coap_response = sn_nsdl_build_response(nsdl,
+                                                           received_coap_header,
+                                                           msg_code);;
+    if(received_coap_header) {
+        uint16_t coap_content_type = 0;
+        bool content_type_present = false;
+        if(received_coap_header->content_format != COAP_CT_NONE) {
+            content_type_present = true;
+            if(coap_response) {
+                coap_content_type = received_coap_header->content_format;
+            }
+        }
+        if(received_coap_header->options_list_ptr &&
+           received_coap_header->options_list_ptr->uri_query_ptr) {
+            char *query = (char*)alloc_string_copy(received_coap_header->options_list_ptr->uri_query_ptr,
+                                                    received_coap_header->options_list_ptr->uri_query_len);
+            if (query){
+                tr_debug("M2MObjectInstance::handle_put_request() - Query %s", query);
+                // if anything was updated, re-initialize the stored notification attributes
+                if (!handle_observation_attribute(query)){
+                    tr_debug("M2MObjectInstance::handle_put_request() - Invalid query");
+                    msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; // 4.00
+                } else {
+                    msg_code =COAP_MSG_CODE_RESPONSE_CHANGED;
+                }
+                free(query);
+            }
+        } else if ((operation() & SN_GRS_PUT_ALLOWED) != 0) {
+            if(!content_type_present &&
+               M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE) {
+                coap_content_type = COAP_CONTENT_OMA_TLV_TYPE;
+            }
+
+            tr_debug("M2MObjectInstance::handle_put_request() - Request Content-Type %d", coap_content_type);
+
+            if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type) {
+                M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+                M2MTLVDeserializer deserializer;
+                if(received_coap_header->payload_ptr) {
+                    error = deserializer.deserialize_resources(received_coap_header->payload_ptr,
+                                                                received_coap_header->payload_len,
+                                                                *this,
+                                                                M2MTLVDeserializer::Put);
+                    switch(error) {
+                        case M2MTLVDeserializer::None:
+                            if(observation_handler) {
+                                observation_handler->value_updated(this);
+                            }
+                            msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
+                            break;
+                        case M2MTLVDeserializer::NotFound:
+                            msg_code = COAP_MSG_CODE_RESPONSE_NOT_FOUND;
+                            break;
+                        case M2MTLVDeserializer::NotAllowed:
+                            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+                            break;
+                        case M2MTLVDeserializer::NotValid:
+                            msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+                            break;
+                    }
+                }
+            } else {
+                msg_code =COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT;
+            } // if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type)
+        } else {
+            // Operation is not allowed.
+            tr_error("M2MObjectInstance::handle_put_request() - COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+        }
+    } else {
+       msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+    }
+    if(coap_response) {
+        coap_response->msg_code = msg_code;
+    }
+    return coap_response;
+}
+
+
+
+
+sn_coap_hdr_s* M2MObjectInstance::handle_post_request(nsdl_s *nsdl,
+                                                      sn_coap_hdr_s *received_coap_header,
+                                                      M2MObservationHandler *observation_handler,
+                                                      bool &execute_value_updated,
+                                                      sn_nsdl_addr_s *)
+{
+    tr_debug("M2MObjectInstance::handle_post_request()");
+    sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; // 2.04
+    sn_coap_hdr_s * coap_response = sn_nsdl_build_response(nsdl,
+                                                           received_coap_header,
+                                                           msg_code);
+    if(received_coap_header) {
+        if ((operation() & SN_GRS_POST_ALLOWED) != 0) {
+            uint16_t coap_content_type = 0;
+            bool content_type_present = false;
+            if(received_coap_header->content_format != COAP_CT_NONE) {
+                content_type_present = true;
+                if(coap_response) {
+                    coap_content_type = received_coap_header->content_format;
+                }
+            }
+            if(!content_type_present &&
+               M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE) {
+                coap_content_type = COAP_CONTENT_OMA_TLV_TYPE;
+            }
+
+            tr_debug("M2MObjectInstance::handle_post_request() - Request Content-Type %d", coap_content_type);
+
+            if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type) {
+                M2MTLVDeserializer deserializer;
+                M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+                error = deserializer.deserialize_resources(received_coap_header->payload_ptr,
+                                                            received_coap_header->payload_len,
+                                                            *this,
+                                                            M2MTLVDeserializer::Post);
+
+                uint16_t instance_id = deserializer.instance_id(received_coap_header->payload_ptr);
+                switch(error) {
+                    case M2MTLVDeserializer::None:
+                        if(observation_handler) {
+                            execute_value_updated = true;
+                        }
+                        coap_response->options_list_ptr = sn_nsdl_alloc_options_list(nsdl, coap_response);
+
+                        if (coap_response->options_list_ptr) {
+
+                              StringBuffer<MAX_PATH_SIZE_3> obj_name;
+                              if(!build_path(obj_name, M2MBase::name(), M2MBase::instance_id(), instance_id))
+                              {
+                                  msg_code = COAP_MSG_CODE_RESPONSE_INTERNAL_SERVER_ERROR;
+                                  break;
+                              }
+
+                              coap_response->options_list_ptr->location_path_len = obj_name.get_size();
+                              coap_response->options_list_ptr->location_path_ptr =
+                                  alloc_string_copy((uint8_t*)obj_name.c_str(),
+                                                    coap_response->options_list_ptr->location_path_len);
+                              // todo: handle allocation error
+                        }
+                        msg_code = COAP_MSG_CODE_RESPONSE_CREATED;
+                        break;
+                    case M2MTLVDeserializer::NotAllowed:
+                        msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+                        break;
+                    case M2MTLVDeserializer::NotValid:
+                        msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+                        break;
+                    default:
+                        break;
+                }
+            } else {
+                msg_code =COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT;
+            } // if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type)
+        } else {
+            // Operation is not allowed.
+            tr_error("M2MObjectInstance::handle_post_request() - COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+        }
+    } else {
+        msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+    }
+    if(coap_response) {
+        coap_response->msg_code = msg_code;
+    }
+    return coap_response;
+}
+
+void M2MObjectInstance::notification_update(M2MBase::Observation observation_level)
+{
+    tr_debug("M2MObjectInstance::notification_update() - level(%d)", observation_level);
+    if((M2MBase::O_Attribute & observation_level) == M2MBase::O_Attribute) {
+        tr_debug("M2MObjectInstance::notification_update() - object callback");
+        _parent.notification_update(instance_id());
+    }
+    if((M2MBase::OI_Attribute & observation_level) == M2MBase::OI_Attribute) {
+        tr_debug("M2MObjectInstance::notification_update() - object instance callback");
+        M2MReportHandler *report_handler = M2MBase::report_handler();
+        if(report_handler && is_under_observation()) {
+            report_handler->set_notification_trigger();
+        }
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mreporthandler.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,468 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2mreportobserver.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2mtimer.h"
+#include "include/m2mreporthandler.h"
+#include "mbed-trace/mbed_trace.h"
+#include <string.h>
+#include <stdlib.h>
+
+#define TRACE_GROUP "mClt"
+
+M2MReportHandler::M2MReportHandler(M2MReportObserver &observer)
+: _observer(observer),
+  _attribute_state(0),
+  _notify(false),
+  _pmin_exceeded(false),
+  _pmax_exceeded(false),
+  _pmin_timer(*this),
+  _pmax_timer(*this),
+  _pmax(-1.0f),
+  _pmin(1.0f),
+  _current_value(0.0f),
+  _gt(0.0f),
+  _lt(0.0f),
+  _st(0.0f),
+  _high_step(0.0f),
+  _low_step(0.0f),
+  _last_value(-1.0f)
+{
+    tr_debug("M2MReportHandler::M2MReportHandler()");
+}
+
+M2MReportHandler::~M2MReportHandler()
+{
+    tr_debug("M2MReportHandler::~M2MReportHandler()");
+}
+
+void M2MReportHandler::set_under_observation(bool observed)
+{
+    tr_debug("M2MReportHandler::set_under_observation(observed %d)", (int)observed);
+    stop_timers();
+    if(observed) {
+        handle_timers();
+    }
+    else {
+        set_default_values();
+    }
+}
+
+void M2MReportHandler::set_value(float value)
+{
+    tr_debug("M2MReportHandler::set_value() - current %f, last %f", value, _last_value);
+    _current_value = value;
+    if(_current_value != _last_value) {
+        tr_debug("M2MReportHandler::set_value() - UNDER OBSERVATION");
+        if (check_threshold_values()) {
+            schedule_report();
+        }
+        else {
+            tr_debug("M2MReportHandler::set_value - value not in range");
+            _notify = false;
+            _last_value = _current_value;
+            if ((_attribute_state & M2MReportHandler::Lt) == M2MReportHandler::Lt ||
+                    (_attribute_state & M2MReportHandler::Gt) == M2MReportHandler::Gt ||
+                    (_attribute_state & M2MReportHandler::St) == M2MReportHandler::St) {
+                tr_debug("M2MReportHandler::set_value - stop pmin timer");
+                _pmin_timer.stop_timer();
+                _pmin_exceeded = true;
+            }
+        }
+        _high_step = _current_value + _st;
+        _low_step = _current_value - _st;
+    }
+}
+
+void M2MReportHandler::set_notification_trigger(uint16_t obj_instance_id)
+{
+    tr_debug("M2MReportHandler::set_notification_trigger(): %d", obj_instance_id);
+    // Add to array if not there yet
+    m2m::Vector<uint16_t>::const_iterator it;
+    it = _changed_instance_ids.begin();
+    bool found = false;
+    for ( ; it != _changed_instance_ids.end(); it++) {
+        if ((*it) == obj_instance_id) {
+            found = true;
+            break;
+        }
+    }
+    if (!found) {
+        _changed_instance_ids.push_back(obj_instance_id);
+    }
+
+    _current_value = 0.0f;
+    _last_value = 1.0f;
+    schedule_report();
+}
+
+bool M2MReportHandler::parse_notification_attribute(const char *query,
+                                                    M2MBase::BaseType type,
+                                                    M2MResourceInstance::ResourceType resource_type)
+{
+    tr_debug("M2MReportHandler::parse_notification_attribute(Query %s, Base type %d)", query, (int)type);
+    bool success = false;
+    const char* sep_pos = strchr(query, '&');
+    const char* rest = query;
+    if( sep_pos != NULL ){
+        char query_options[5][20];
+        float pmin = _pmin;
+        float pmax = _pmax;
+        float lt = _lt;
+        float gt = _gt;
+        float st = _st;
+        float high = _high_step;
+        float low = _low_step;
+        uint8_t attr = _attribute_state;
+
+        memset(query_options, 0, sizeof(query_options[0][0]) * 5 * 20);
+        uint8_t num_options = 0;
+        while( sep_pos != NULL && num_options < 5){
+            size_t len = (size_t)(sep_pos-rest);
+            if( len > 19 ){
+                len = 19;
+            }
+            memcpy(query_options[num_options], rest, len);
+            sep_pos++;
+            rest = sep_pos;
+            sep_pos = strchr(rest, '&');
+            num_options++;
+        }
+        if( num_options < 5 && strlen(rest) > 0){
+            size_t len = (size_t)strlen(rest);
+            if( len > 19 ){
+                len = 19;
+            }
+            memcpy(query_options[num_options++], rest, len);
+        }
+
+        for (int option = 0; option < num_options; option++) {
+            success = set_notification_attribute(query_options[option],type, resource_type);
+            if (!success) {
+                tr_debug("M2MReportHandler::parse_notification_attribute - break");
+                break;
+            }
+        }
+
+        if(success) {
+             success = check_attribute_validity();
+        }
+        else {
+            tr_debug("M2MReportHandler::parse_notification_attribute - not valid query");
+            _pmin = pmin;
+            _pmax = pmax;
+            _st = st;
+            _lt = lt;
+            _gt = gt;
+            _high_step = high;
+            _low_step = low;
+            _attribute_state = attr;
+        }
+    }
+    else {
+        if(set_notification_attribute(query, type, resource_type)) {
+            success = check_attribute_validity();
+        }
+    }
+
+    return success;
+}
+
+void M2MReportHandler::timer_expired(M2MTimerObserver::Type type)
+{
+    switch(type) {
+        case M2MTimerObserver::PMinTimer: {
+            tr_debug("M2MReportHandler::timer_expired - PMIN");
+            if (_notify ||
+                    (_pmin > 0 &&
+                     (_attribute_state & M2MReportHandler::Pmax) != M2MReportHandler::Pmax)){
+                report();
+            }
+            else{
+                _pmin_exceeded = true;
+            }
+        }
+        break;
+        case M2MTimerObserver::PMaxTimer: {
+            tr_debug("M2MReportHandler::timer_expired - PMAX");
+            _pmax_exceeded = true;
+            if (_pmin_exceeded ||
+                    (_attribute_state & M2MReportHandler::Pmin) != M2MReportHandler::Pmin ) {
+                report();
+            }
+        }
+        break;
+        default:
+            break;
+    }
+}
+
+bool M2MReportHandler::set_notification_attribute(const char* option,
+                                                  M2MBase::BaseType type,
+                                                  M2MResourceInstance::ResourceType resource_type)
+{
+    tr_debug("M2MReportHandler::set_notification_attribute()");
+    bool success = false;
+    char attribute[20];
+    char value[20];
+    memset(&attribute, 0, 20);
+    memset(&value, 0, 20);
+
+    const char* pos = strstr(option, EQUAL);
+    if( pos != NULL ){
+        memcpy(attribute, option, (size_t)(pos-option));
+        pos++;
+        memcpy(value, pos, strlen(pos));
+    }else{
+        memcpy(attribute, option, (size_t)strlen(option) + 1);
+    }
+
+    if (strlen(value)) {
+        if (strcmp(attribute, PMIN) == 0) {
+           _pmin = atoi(value);
+            success = true;
+            _attribute_state |= M2MReportHandler::Pmin;
+            tr_debug("M2MReportHandler::set_notification_attribute %s to %d", attribute, _pmin);
+        }
+        else if(strcmp(attribute, PMAX) == 0) {
+            _pmax = atoi(value);
+            success = true;
+            _attribute_state |= M2MReportHandler::Pmax;
+            tr_debug("M2MReportHandler::set_notification_attribute %s to %d", attribute, _pmax);
+        }
+        else if(strcmp(attribute, GT) == 0 &&
+                (M2MBase::Resource == type)){
+            _gt = atof(value);
+            success = true;
+            _attribute_state |= M2MReportHandler::Gt;
+            tr_debug("M2MReportHandler::set_notification_attribute %s to %f", attribute, _gt);
+        }
+        else if(strcmp(attribute, LT) == 0 &&
+                (M2MBase::Resource == type)){
+            _lt = atof(value);
+            success = true;
+            _attribute_state |= M2MReportHandler::Lt;
+            tr_debug("M2MReportHandler::set_notification_attribute %s to %f", attribute, _lt);
+        }
+        else if((strcmp(attribute, ST_SIZE) == 0 || (strcmp(attribute, STP) == 0))
+                && (M2MBase::Resource == type)){
+            _st = atof(value);
+            success = true;
+            _high_step = _current_value + _st;
+            _low_step = _current_value - _st;
+            _attribute_state |= M2MReportHandler::St;
+            tr_debug("M2MReportHandler::set_notification_attribute %s to %f", attribute, _st);
+        }
+        // Return false if try to set gt,lt or st when the resource type is something else than numerical
+        if ((resource_type != M2MResourceInstance::INTEGER &&
+                resource_type != M2MResourceInstance::FLOAT) &&
+                ((_attribute_state & M2MReportHandler::Gt) == M2MReportHandler::Gt ||
+                (_attribute_state & M2MReportHandler::Lt) == M2MReportHandler::Lt ||
+                (_attribute_state & M2MReportHandler::St) == M2MReportHandler::St)) {
+            tr_debug("M2MReportHandler::set_notification_attribute - not numerical resource");
+            success = false;
+        }
+    }
+    return success;
+}
+
+void M2MReportHandler::schedule_report()
+{
+    tr_debug("M2MReportHandler::schedule_report()");
+    _notify = true;
+    if ((_attribute_state & M2MReportHandler::Pmin) != M2MReportHandler::Pmin ||
+         _pmin_exceeded) {
+        report();
+    }
+}
+
+void M2MReportHandler::report()
+{
+    tr_debug("M2MReportHandler::report()");
+    if(_current_value != _last_value && _notify) {
+        tr_debug("M2MReportHandler::report()- send with PMIN");
+        _pmin_exceeded = false;
+        _pmax_exceeded = false;
+        _notify = false;
+        _observer.observation_to_be_sent(_changed_instance_ids);
+        _changed_instance_ids.clear();
+        _pmax_timer.stop_timer();
+    }
+    else {
+        if (_pmax_exceeded) {
+            tr_debug("M2MReportHandler::report()- send with PMAX");
+            _observer.observation_to_be_sent(_changed_instance_ids, true);
+            _changed_instance_ids.clear();
+        }
+        else {
+            tr_debug("M2MReportHandler::report()- no need to send");
+        }
+    }
+    handle_timers();
+    _last_value = _current_value;
+}
+
+void M2MReportHandler::handle_timers()
+{
+    tr_debug("M2MReportHandler::handle_timers()");
+    uint64_t time_interval = 0;
+    if ((_attribute_state & M2MReportHandler::Pmin) == M2MReportHandler::Pmin) {
+        if (_pmin == _pmax) {
+            _pmin_exceeded = true;
+        } else {
+            _pmin_exceeded = false;
+            time_interval = (uint64_t) ((uint64_t)_pmin * 1000);
+            tr_debug("M2MReportHandler::handle_timers() - Start PMIN interval: %d", (int)time_interval);
+            _pmin_timer.start_timer(time_interval,
+                                     M2MTimerObserver::PMinTimer,
+                                     true);
+        }
+    }
+    if ((_attribute_state & M2MReportHandler::Pmax) == M2MReportHandler::Pmax) {
+        if (_pmax > 0) {
+            time_interval = (uint64_t) ((uint64_t)_pmax * 1000);
+            tr_debug("M2MReportHandler::handle_timers() - Start PMAX interval: %d", (int)time_interval);
+            _pmax_timer.start_timer(time_interval,
+                                     M2MTimerObserver::PMaxTimer,
+                                     true);
+        }
+    }
+}
+
+bool M2MReportHandler::check_attribute_validity()
+{
+    bool success = true;
+    if ((_attribute_state & M2MReportHandler::Pmax) == M2MReportHandler::Pmax &&
+            ((_pmax >= -1.0) && (_pmin > _pmax))) {
+        success = false;
+    }
+    float low = _lt + 2 * _st;
+    if ((_attribute_state & M2MReportHandler::Gt) == M2MReportHandler::Gt &&
+            (low >= _gt)) {
+        success = false;
+    }
+    return success;
+}
+
+void M2MReportHandler::stop_timers()
+{
+    tr_debug("M2MReportHandler::stop_timers()");
+
+    _pmin_exceeded = false;
+    _pmin_timer.stop_timer();
+
+    _pmax_exceeded = false;
+    _pmax_timer.stop_timer();
+
+    tr_debug("M2MReportHandler::stop_timers() - out");
+}
+
+void M2MReportHandler::set_default_values()
+{
+    tr_debug("M2MReportHandler::set_default_values");
+    _pmax = -1.0;
+    _pmin = 1.0;
+    _gt = 0.0f;
+    _lt = 0.0f;
+    _st = 0.0f;
+    _high_step = 0.0f;
+    _low_step = 0.0f;
+    _pmin_exceeded = false;
+    _pmax_exceeded = false;
+    _last_value = -1.0f;
+    _attribute_state = 0;
+    _changed_instance_ids.clear();
+}
+
+bool M2MReportHandler::check_threshold_values()
+{
+    tr_debug("M2MReportHandler::check_threshold_values");
+    tr_debug("Current value: %f", _current_value);
+    tr_debug("High step: %f", _high_step);
+    tr_debug("Low step: %f", _low_step);
+    tr_debug("Less than: %f", _lt);
+    tr_debug("Greater than: %f", _gt);
+    tr_debug("Step: %f", _st);
+    bool can_send = false;
+    // Check step condition
+    if ((_attribute_state & M2MReportHandler::St) == M2MReportHandler::St) {
+        if ((_current_value >= _high_step ||
+            _current_value <= _low_step)) {
+            can_send = true;
+        }
+        else {
+            if ((_attribute_state & M2MReportHandler::Lt) == M2MReportHandler::Lt ||
+                    (_attribute_state & M2MReportHandler::Gt) == M2MReportHandler::Gt ) {
+                can_send = check_gt_lt_params();
+            }
+            else {
+                can_send = false;
+            }
+        }
+    }
+    else {
+        can_send = check_gt_lt_params();
+    }
+    tr_debug("M2MReportHandler::check_threshold_values - value in range = %d", (int)can_send);
+    return can_send;
+}
+
+bool M2MReportHandler::check_gt_lt_params()
+{
+    tr_debug("M2MReportHandler::check_gt_lt_params");
+    bool can_send = false;
+    // GT & LT set.
+    if ((_attribute_state & (M2MReportHandler::Lt | M2MReportHandler::Gt))
+             == (M2MReportHandler::Lt | M2MReportHandler::Gt)) {
+        if (_current_value > _gt || _current_value < _lt) {
+            can_send = true;
+        }
+        else {
+            can_send = false;
+        }
+    }
+    // Only LT
+    else if ((_attribute_state & M2MReportHandler::Lt) == M2MReportHandler::Lt &&
+           (_attribute_state & M2MReportHandler::Gt) == 0 ) {
+        if (_current_value < _lt) {
+            can_send = true;
+        }
+        else {
+            can_send = false;
+        }
+    }
+    // Only GT
+    else if ((_attribute_state & M2MReportHandler::Gt) == M2MReportHandler::Gt &&
+           (_attribute_state & M2MReportHandler::Lt) == 0 ) {
+        if (_current_value > _gt) {
+            can_send = true;
+        }
+        else {
+            can_send = false;
+        }
+    }
+    // GT & LT not set.
+    else {
+        can_send = true;
+    }
+    tr_debug("M2MReportHandler::check_gt_lt_params - value in range = %d", (int)can_send);
+    return can_send;
+}
+
+uint8_t M2MReportHandler::attribute_flags()
+{
+    return _attribute_state;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mresource.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,619 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2mresource.h"
+#include "mbed-client/m2mobservationhandler.h"
+#include "include/m2mreporthandler.h"
+#include "include/m2mtlvserializer.h"
+#include "include/m2mtlvdeserializer.h"
+#include "mbed-trace/mbed_trace.h"
+
+#include <stdlib.h>
+
+#define TRACE_GROUP "mClt"
+
+M2MResource::M2MResource(M2MObjectInstance &parent,
+                         const String &resource_name,
+                         const String &resource_type,
+                         M2MResourceInstance::ResourceType type,
+                         const uint8_t *value,
+                         const uint8_t value_length,
+                         char *path,
+                         const uint16_t object_instance_id,
+                         bool multiple_instance,
+                         bool external_blockwise_store)
+: M2MResourceInstance(*this, resource_name, resource_type, type, value, value_length,
+                      object_instance_id,
+                      path, external_blockwise_store),
+  _parent(parent),
+  _delayed_token(NULL),
+  _delayed_token_len(0),
+  _has_multiple_instances(multiple_instance),
+  _delayed_response(false)
+{
+    M2MBase::set_base_type(M2MBase::Resource);
+    M2MBase::set_operation(M2MBase::GET_ALLOWED);
+    M2MBase::set_observable(false);
+
+}
+
+M2MResource::M2MResource(M2MObjectInstance &parent,
+                         const lwm2m_parameters_s* s,
+                          M2MResourceInstance::ResourceType type,
+                         const uint16_t object_instance_id)
+: M2MResourceInstance(*this, s, type, object_instance_id),
+  _parent(parent),
+  _delayed_token(NULL),
+  _delayed_token_len(0),
+  _has_multiple_instances(false),
+  _delayed_response(false)
+{
+    // tbd: _has_multiple_instances could be in flash, but no real benefit, because of current alignment.
+}
+
+M2MResource::M2MResource(M2MObjectInstance &parent,
+                         const String &resource_name,
+                         const String &resource_type,
+                         M2MResourceInstance::ResourceType type,
+                         bool observable,
+                         char *path,
+                         const uint16_t object_instance_id,
+                         bool multiple_instance,
+                         bool external_blockwise_store)
+: M2MResourceInstance(*this, resource_name, resource_type, type,
+                      object_instance_id,
+                      path,
+                      external_blockwise_store),
+  _parent(parent),
+  _delayed_token(NULL),
+  _delayed_token_len(0),
+  _has_multiple_instances(multiple_instance),
+  _delayed_response(false)
+{
+    M2MBase::set_base_type(M2MBase::Resource);
+    M2MBase::set_operation(M2MBase::GET_PUT_ALLOWED);
+    M2MBase::set_observable(observable);
+}
+
+
+M2MResource::~M2MResource()
+{
+    if(!_resource_instance_list.empty()) {
+        M2MResourceInstance* res = NULL;
+        M2MResourceInstanceList::const_iterator it;
+        it = _resource_instance_list.begin();
+        for (; it!=_resource_instance_list.end(); it++ ) {
+            //Free allocated memory for resources.
+            res = *it;
+            delete res;
+        }
+        _resource_instance_list.clear();
+    }
+    free(_delayed_token);
+}
+
+bool M2MResource::supports_multiple_instances() const
+{
+    return _has_multiple_instances;
+}
+
+void M2MResource::set_delayed_response(bool delayed_response)
+{
+    _delayed_response = delayed_response;
+}
+
+bool M2MResource::send_delayed_post_response()
+{
+    bool success = false;
+    if(_delayed_response) {
+        success = true;
+        observation_handler()->send_delayed_response(this);
+    }
+    return success;
+}
+
+void M2MResource::get_delayed_token(uint8_t *&token, uint8_t &token_length)
+{
+    token_length = 0;
+    if(token) {
+        free(token);
+        token = NULL;
+    }
+    if(_delayed_token && _delayed_token_len > 0) {
+        token = alloc_copy(_delayed_token, _delayed_token_len);
+        if(token) {
+            token_length = _delayed_token_len;
+        }
+    }
+}
+
+bool M2MResource::remove_resource_instance(uint16_t inst_id)
+{
+    tr_debug("M2MResource::remove_resource(inst_id %d)", inst_id);
+    bool success = false;
+    if(!_resource_instance_list.empty()) {
+        M2MResourceInstance* res = NULL;
+        M2MResourceInstanceList::const_iterator it;
+        it = _resource_instance_list.begin();
+        int pos = 0;
+        for ( ; it != _resource_instance_list.end(); it++, pos++ ) {
+            if(((*it)->instance_id() == inst_id)) {
+                // Resource found and deleted.
+                res = *it;
+                delete res;
+                _resource_instance_list.erase(pos);
+                success = true;
+                break;
+            }
+        }
+    }
+    return success;
+}
+
+M2MResourceInstance* M2MResource::resource_instance(uint16_t inst_id) const
+{
+    tr_debug("M2MResource::resource(resource_name inst_id %d)", inst_id);
+    M2MResourceInstance *res = NULL;
+    if(!_resource_instance_list.empty()) {
+        M2MResourceInstanceList::const_iterator it;
+        it = _resource_instance_list.begin();
+        for ( ; it != _resource_instance_list.end(); it++ ) {
+            if(((*it)->instance_id() == inst_id)) {
+                // Resource found.
+                res = *it;
+                break;
+            }
+        }
+    }
+    return res;
+}
+
+const M2MResourceInstanceList& M2MResource::resource_instances() const
+{
+    return _resource_instance_list;
+}
+
+uint16_t M2MResource::resource_instance_count() const
+{
+    return (uint16_t)_resource_instance_list.size();
+}
+
+bool M2MResource::delayed_response() const
+{
+    return _delayed_response;
+}
+
+bool M2MResource::handle_observation_attribute(const char *query)
+{
+    tr_debug("M2MResource::handle_observation_attribute - is_under_observation(%d)", is_under_observation());
+    bool success = false;
+    M2MReportHandler *handler = M2MBase::report_handler();
+    if (!handler) {
+        handler = M2MBase::create_report_handler();
+    }
+
+    if (handler) {
+        success = handler->parse_notification_attribute(query,
+                M2MBase::base_type(), _resource_type);
+        if (success) {
+            if (is_under_observation()) {
+                handler->set_under_observation(true);
+            }
+        }
+        else {
+            handler->set_default_values();
+        }
+
+        if (success) {
+            if(!_resource_instance_list.empty()) {
+                M2MResourceInstanceList::const_iterator it;
+                it = _resource_instance_list.begin();
+                for ( ; it != _resource_instance_list.end(); it++ ) {
+                    M2MReportHandler *report_handler = (*it)->report_handler();
+                    if(report_handler && is_under_observation()) {
+                        report_handler->set_notification_trigger();
+                    }
+                }
+            }
+        }
+    }
+    return success;
+}
+
+void M2MResource::add_observation_level(M2MBase::Observation observation_level)
+{
+    M2MBase::add_observation_level(observation_level);
+    if(!_resource_instance_list.empty()) {
+        M2MResourceInstanceList::const_iterator inst;
+        inst = _resource_instance_list.begin();
+        for ( ; inst != _resource_instance_list.end(); inst++ ) {
+            (*inst)->add_observation_level(observation_level);
+        }
+    }
+}
+
+void M2MResource::remove_observation_level(M2MBase::Observation observation_level)
+{
+    M2MBase::remove_observation_level(observation_level);
+    if(!_resource_instance_list.empty()) {
+        M2MResourceInstanceList::const_iterator inst;
+        inst = _resource_instance_list.begin();
+        for ( ; inst != _resource_instance_list.end(); inst++ ) {
+            (*inst)->remove_observation_level(observation_level);
+        }
+    }
+}
+
+void M2MResource::add_resource_instance(M2MResourceInstance *res)
+{
+    tr_debug("M2MResource::add_resource_instance()");
+    if(res) {
+        _resource_instance_list.push_back(res);
+    }
+}
+
+sn_coap_hdr_s* M2MResource::handle_get_request(nsdl_s *nsdl,
+                                               sn_coap_hdr_s *received_coap_header,
+                                               M2MObservationHandler *observation_handler)
+{
+    tr_debug("M2MResource::handle_get_request()");
+    sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CONTENT;
+    sn_coap_hdr_s * coap_response = NULL;
+    if(_has_multiple_instances) {
+        coap_response = sn_nsdl_build_response(nsdl,
+                                               received_coap_header,
+                                               msg_code);
+        if(received_coap_header) {
+            // process the GET if we have registered a callback for it
+            if ((operation() & SN_GRS_GET_ALLOWED) != 0) {
+                if(coap_response) {
+                    uint16_t coap_content_type = 0;
+                    bool content_type_present = false;
+                    if(received_coap_header->content_format != COAP_CT_NONE){
+                        content_type_present = true;
+                        coap_content_type = received_coap_header->content_format;
+                    }
+
+                    if(!content_type_present &&
+                       M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE) {
+                        coap_content_type = COAP_CONTENT_OMA_TLV_TYPE;
+                    }
+
+                    tr_debug("M2MResource::handle_get_request() - Request Content-Type %d", coap_content_type);
+                    if (coap_response->content_format == COAP_CT_NONE) {
+                        coap_response->content_format = sn_coap_content_format_e(coap_content_type);
+                        if (coap_response->content_format != COAP_CT_NONE) {
+                            set_coap_content_type(coap_content_type);
+                        }
+                    }
+                    uint8_t *data = NULL;
+                    uint32_t data_length = 0;
+                    // fill in the CoAP response payload
+                    if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type) {
+                        M2MTLVSerializer serializer;
+                        data = serializer.serialize(this, data_length);
+                    } else {
+                        msg_code = COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT; // Content format not supported
+                    }
+
+                    coap_response->payload_len = data_length;
+                    coap_response->payload_ptr = data;
+
+                    coap_response->options_list_ptr = sn_nsdl_alloc_options_list(nsdl, coap_response);
+
+                    coap_response->options_list_ptr->max_age = max_age();
+
+                    if(received_coap_header->options_list_ptr) {
+                        if(received_coap_header->options_list_ptr->observe != -1) {
+                            if (is_observable()) {
+                                uint32_t number = 0;
+                                uint8_t observe_option = 0;
+                                observe_option = received_coap_header->options_list_ptr->observe;
+                                if(START_OBSERVATION == observe_option) {
+                                    tr_debug("M2MResource::handle_get_request - Starts Observation");
+                                    // If the observe length is 0 means register for observation.
+                                    if(received_coap_header->options_list_ptr->observe != -1) {
+                                        number = received_coap_header->options_list_ptr->observe;
+                                    }
+                                    if(received_coap_header->token_ptr) {
+                                        tr_debug("M2MResource::handle_get_request - Sets Observation Token to resource");
+                                        set_observation_token(received_coap_header->token_ptr,
+                                                              received_coap_header->token_len);
+                                    }
+
+                                    // If the observe value is 0 means register for observation.
+                                    if(number == 0) {
+                                        tr_debug("M2MResource::handle_get_request - Put Resource under Observation");
+                                        M2MResourceInstanceList::const_iterator it;
+                                        it = _resource_instance_list.begin();
+                                        for (; it!=_resource_instance_list.end(); it++ ) {
+                                            tr_debug("M2MResource::handle_get_request - set_resource_observer");
+                                            (*it)->set_resource_observer(this);
+                                            (*it)->add_observation_level(M2MBase::R_Attribute);
+                                        }
+                                        set_under_observation(true,observation_handler);
+                                        M2MBase::add_observation_level(M2MBase::R_Attribute);
+                                        coap_response->options_list_ptr->observe = observation_number();
+                                    }
+                                } else if (STOP_OBSERVATION == observe_option) {
+                                    tr_debug("M2MResource::handle_get_request - Stops Observation");
+                                    set_under_observation(false,NULL);
+                                    M2MBase::remove_observation_level(M2MBase::R_Attribute);
+                                    M2MResourceInstanceList::const_iterator it;
+                                    it = _resource_instance_list.begin();
+                                    for (; it!=_resource_instance_list.end(); it++ ) {
+                                        (*it)->set_resource_observer(NULL);
+                                    }
+                                }
+                                msg_code = COAP_MSG_CODE_RESPONSE_CONTENT;
+                            }
+                            else {
+                                msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+                            }
+                        }
+                    }
+                }
+            } else {
+                tr_error("M2MResource::handle_get_request - Return COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+                // Operation is not allowed.
+                msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+            }
+        }
+        if(coap_response) {
+            coap_response->msg_code = msg_code;
+        }
+    } else {
+        coap_response = M2MResourceInstance::handle_get_request(nsdl,
+                            received_coap_header,
+                            observation_handler);
+    }
+    return coap_response;
+}
+
+sn_coap_hdr_s* M2MResource::handle_put_request(nsdl_s *nsdl,
+                                               sn_coap_hdr_s *received_coap_header,
+                                               M2MObservationHandler *observation_handler,
+                                               bool &execute_value_updated)
+{
+    tr_debug("M2MResource::handle_put_request()");
+    sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; // 2.04
+    sn_coap_hdr_s * coap_response = NULL;
+    if(_has_multiple_instances) {
+        coap_response = sn_nsdl_build_response(nsdl,
+                                               received_coap_header,
+                                               msg_code);
+        // process the PUT if we have registered a callback for it
+        if(received_coap_header) {
+            uint16_t coap_content_type = 0;
+            bool content_type_present = false;
+            if(received_coap_header->content_format != COAP_CT_NONE && coap_response) {
+                content_type_present = true;
+                coap_content_type = received_coap_header->content_format;
+            }
+            if(received_coap_header->options_list_ptr &&
+               received_coap_header->options_list_ptr->uri_query_ptr) {
+                char *query = (char*)alloc_string_copy(received_coap_header->options_list_ptr->uri_query_ptr,
+                                                        received_coap_header->options_list_ptr->uri_query_len);
+                if (query){
+                    msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
+                    tr_debug("M2MResource::handle_put_request() - Query %s", query);
+                    // if anything was updated, re-initialize the stored notification attributes
+                    if (!handle_observation_attribute(query)){
+                        tr_debug("M2MResource::handle_put_request() - Invalid query");
+                        msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; // 4.00
+                    }
+                    free(query);
+                }
+            } else if ((operation() & SN_GRS_PUT_ALLOWED) != 0) {
+                if(!content_type_present &&
+                   M2MBase::coap_content_type() == COAP_CONTENT_OMA_TLV_TYPE) {
+                    coap_content_type = COAP_CONTENT_OMA_TLV_TYPE;
+                }
+
+                tr_debug("M2MResource::handle_put_request() - Request Content-Type %d", coap_content_type);
+
+                if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type) {
+                    M2MTLVDeserializer deserializer;
+                    M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+                    error = deserializer.deserialize_resource_instances(received_coap_header->payload_ptr,
+                                                                         received_coap_header->payload_len,
+                                                                         *this,
+                                                                         M2MTLVDeserializer::Put);
+                    switch(error) {
+                        case M2MTLVDeserializer::None:
+                            if(observation_handler) {
+                                String value = "";
+                                if (received_coap_header->uri_path_ptr != NULL &&
+                                    received_coap_header->uri_path_len > 0) {
+
+                                    value.append_raw((char*)received_coap_header->uri_path_ptr,received_coap_header->uri_path_len);
+                                }
+                                execute_value_updated = true;
+                            }
+                            msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
+                            break;
+                        case M2MTLVDeserializer::NotFound:
+                            msg_code = COAP_MSG_CODE_RESPONSE_NOT_FOUND;
+                            break;
+                        case M2MTLVDeserializer::NotAllowed:
+                            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+                            break;
+                        case M2MTLVDeserializer::NotValid:
+                            msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+                            break;
+                    }
+                } else {
+                    msg_code =COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT;
+                } // if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type)
+            } else {
+                // Operation is not allowed.
+                tr_error("M2MResource::handle_put_request() - COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+                msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+            }
+        } else {
+            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+        }
+        if(coap_response) {
+            coap_response->msg_code = msg_code;
+        }
+    } else {
+        coap_response = M2MResourceInstance::handle_put_request(nsdl,
+                            received_coap_header,
+                            observation_handler,
+                            execute_value_updated);
+    }
+    return coap_response;
+}
+
+sn_coap_hdr_s* M2MResource::handle_post_request(nsdl_s *nsdl,
+                                                sn_coap_hdr_s *received_coap_header,
+                                                M2MObservationHandler */*observation_handler*/,
+                                                bool &/*execute_value_updated*/,
+                                                sn_nsdl_addr_s *address)
+{
+    tr_debug("M2MResource::handle_post_request()");
+    sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; // 2.04
+    sn_coap_hdr_s * coap_response = sn_nsdl_build_response(nsdl,
+                                                           received_coap_header,
+                                                           msg_code);
+    // process the POST if we have registered a callback for it
+    if(received_coap_header) {
+        if ((operation() & SN_GRS_POST_ALLOWED) != 0) {
+            M2MResource::M2MExecuteParameter *exec_params = new M2MResource::M2MExecuteParameter();
+            if (exec_params) {
+                exec_params->_object_name = object_name();
+                exec_params->_resource_name = name();
+                exec_params->_object_instance_id = object_instance_id();
+            }
+            uint16_t coap_content_type = 0;
+            if(received_coap_header->payload_ptr) {
+                if(received_coap_header->content_format != COAP_CT_NONE) {
+                    coap_content_type = received_coap_header->content_format;
+                }
+                if(coap_content_type == 0) {
+                    if (exec_params){
+                        exec_params->_value = alloc_string_copy(received_coap_header->payload_ptr,
+                                                                received_coap_header->payload_len);
+                        if (exec_params->_value) {
+                            exec_params->_value_length = received_coap_header->payload_len;
+                        }
+                    }
+                } else {
+                    msg_code = COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT;
+                }
+            }
+            if(COAP_MSG_CODE_RESPONSE_CHANGED == msg_code) {
+                tr_debug("M2MResource::handle_post_request - Execute resource function");
+                if(_delayed_response) {
+                    msg_code = COAP_MSG_CODE_EMPTY;
+                    coap_response->msg_type = COAP_MSG_TYPE_ACKNOWLEDGEMENT;
+                    coap_response->msg_code = msg_code;
+                    coap_response->msg_id = received_coap_header->msg_id;
+                    if(received_coap_header->token_len) {
+                        free(_delayed_token);
+                        _delayed_token = NULL;
+                        _delayed_token_len = 0;
+                        _delayed_token = alloc_copy(received_coap_header->token_ptr, received_coap_header->token_len);
+                        if(_delayed_token) {
+                            _delayed_token_len = received_coap_header->token_len;
+                        }
+                        sn_nsdl_send_coap_message(nsdl, address, coap_response);
+                    }
+                } else {
+                    uint32_t length = 0;
+                    get_value(coap_response->payload_ptr, length);
+                    coap_response->payload_len = length;
+                }
+                execute(exec_params);
+            }
+            delete exec_params;
+        } else { // if ((object->operation() & SN_GRS_POST_ALLOWED) != 0)
+            tr_error("M2MResource::handle_post_request - COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED; // 4.05
+        }
+    } else { //if(object && received_coap_header)
+        tr_error("M2MResource::handle_post_request - COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+        msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED; // 4.01
+    }
+    if(coap_response) {
+        coap_response->msg_code = msg_code;
+    }
+    return coap_response;
+}
+
+void M2MResource::notification_update()
+{
+    tr_debug("M2MResource::notification_update()");
+    M2MReportHandler *report_handler = M2MBase::report_handler();
+    if(report_handler && is_observable()) {
+        report_handler->set_notification_trigger();
+    }
+}
+
+M2MObjectInstance& M2MResource::get_parent_object_instance() const
+{
+    return _parent;
+}
+
+const char* M2MResource::object_name() const
+{
+    const M2MObjectInstance& parent_object_instance = _parent;
+    const M2MObject& parent_object = parent_object_instance.get_parent_object();
+
+    return parent_object.name();
+}
+
+
+M2MResource::M2MExecuteParameter::M2MExecuteParameter()
+{
+    _value = NULL;
+    _value_length = 0;
+    _object_name = "";
+    _resource_name = "";
+    _object_instance_id = 0;
+}
+
+M2MResource::M2MExecuteParameter::~M2MExecuteParameter()
+{
+    free(_value);
+}
+
+uint8_t *M2MResource::M2MExecuteParameter::get_argument_value() const
+{
+    return _value;
+}
+
+uint16_t M2MResource::M2MExecuteParameter::get_argument_value_length() const
+{
+    return _value_length;
+}
+
+const String& M2MResource::M2MExecuteParameter::get_argument_object_name() const
+{
+    return _object_name;
+}
+
+const String& M2MResource::M2MExecuteParameter::get_argument_resource_name() const
+{
+    return _resource_name;
+}
+
+uint16_t M2MResource::M2MExecuteParameter::get_argument_object_instance_id() const
+{
+    return _object_instance_id;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mresourceinstance.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,621 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <stdlib.h>
+#include "mbed-client/m2mresource.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2mobservationhandler.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "include/m2mreporthandler.h"
+#include "include/nsdllinker.h"
+#include "mbed-client/m2mblockmessage.h"
+#include "mbed-trace/mbed_trace.h"
+
+#define TRACE_GROUP "mClt"
+
+M2MResourceInstance::M2MResourceInstance(M2MResource &parent,
+                                         const String &res_name,
+                                         const String &resource_type,
+                                         M2MResourceInstance::ResourceType type,
+                                         const uint16_t object_instance_id,
+                                         char* path,
+                                         bool external_blockwise_store)
+: M2MBase(res_name,
+          M2MBase::Dynamic,
+          resource_type,
+          path,
+          external_blockwise_store),
+ _parent_resource(parent),
+ _value(NULL),
+ _value_length(0),
+ _block_message_data(NULL),
+ _execute_callback(NULL),
+ _resource_callback(NULL),
+ _execute_function_pointer(NULL),
+ _notification_sent_function_pointer(NULL),
+ _incoming_block_message_cb(NULL),
+ _outgoing_block_message_cb(NULL),
+ _notification_sent_callback(NULL),
+ _object_instance_id(object_instance_id),
+ _resource_type(type)
+{
+    M2MBase::set_base_type(M2MBase::ResourceInstance);
+}
+
+M2MResourceInstance::M2MResourceInstance(M2MResource &parent,
+                                         const String &res_name,
+                                         const String &resource_type,
+                                         M2MResourceInstance::ResourceType type,
+                                         const uint8_t *value,
+                                         const uint8_t value_length,
+                                         const uint16_t object_instance_id,
+                                         char* path,
+                                         bool external_blockwise_store)
+: M2MBase(res_name,
+          M2MBase::Static,
+          resource_type,
+          path,
+          external_blockwise_store),
+ _parent_resource(parent),
+ _value(NULL),
+ _value_length(0),
+ _block_message_data(NULL),
+ _execute_callback(NULL),
+ _resource_callback(NULL),
+ _execute_function_pointer(NULL),
+ _notification_sent_function_pointer(NULL),
+ _incoming_block_message_cb(NULL),
+ _outgoing_block_message_cb(NULL),
+ _notification_sent_callback(NULL),
+ _object_instance_id(object_instance_id),
+  _resource_type(type)
+{
+    M2MBase::set_base_type(M2MBase::Resource);
+    if (mode() == M2MBase::Dynamic) {
+        if( value != NULL && value_length > 0 ) {
+            _value = alloc_string_copy(value, value_length);
+            if(_value) {
+                _value_length = value_length;
+            }
+        }
+    }
+    // Copy resource value to struct since static resources are handled in mbed-client-c
+    else if (mode() == M2MBase::Static) {
+       sn_nsdl_dynamic_resource_parameters_s* res = get_nsdl_resource();
+       sn_nsdl_static_resource_parameters_s* params = (sn_nsdl_static_resource_parameters_s*)res->static_resource_parameters;
+       params->resource = alloc_string_copy(value, value_length);
+       params->resourcelen = value_length;
+    }
+    else {
+        // Directory, not supported
+    }
+}
+
+M2MResourceInstance::M2MResourceInstance(M2MResource &parent,
+                                         const lwm2m_parameters_s* s,
+                                         M2MResourceInstance::ResourceType type,
+                                         const uint16_t object_instance_id)
+: M2MBase(s),
+  _parent_resource(parent),
+  _value(NULL),
+  _value_length(0),
+  _block_message_data(NULL),
+  _execute_callback(NULL),
+  _resource_callback(NULL),
+  _execute_function_pointer(NULL),
+  _notification_sent_function_pointer(NULL),
+  _incoming_block_message_cb(NULL),
+  _outgoing_block_message_cb(NULL),
+  _notification_sent_callback(NULL),
+  _object_instance_id(object_instance_id),
+  _resource_type(type)
+{
+    //TBD: put to flash, or parse from the uri_path!!!!
+    //same for the _object_instance_id.
+    // TBD: we dont need _value here, because in c-struct there is resource field!!!!
+    if( s->dynamic_resource_params->static_resource_parameters->resource != NULL &&
+            s->dynamic_resource_params->static_resource_parameters->resourcelen > 0 ) {
+        _value = alloc_string_copy(s->dynamic_resource_params->static_resource_parameters->resource,
+                                   s->dynamic_resource_params->static_resource_parameters->resourcelen);
+        if(_value) {
+            _value_length = s->dynamic_resource_params->static_resource_parameters->resourcelen;
+        }
+    }
+    //M2MBase::set_base_type(M2MBase::ResourceInstance);
+}
+
+M2MResourceInstance::~M2MResourceInstance()
+{
+    free(_value);
+    delete _execute_function_pointer;
+    delete _execute_callback;
+    delete _notification_sent_function_pointer;
+    delete _incoming_block_message_cb;
+    delete _outgoing_block_message_cb;
+    delete _notification_sent_callback;
+    delete _block_message_data;
+}
+
+M2MBase::BaseType M2MResourceInstance::base_type() const
+{
+    return M2MBase::base_type();
+}
+
+M2MResourceInstance::ResourceType M2MResourceInstance::resource_instance_type() const
+{
+    return _resource_type;
+}
+
+bool M2MResourceInstance::handle_observation_attribute(const char *query)
+{
+    tr_debug("M2MResourceInstance::handle_observation_attribute - is_under_observation(%d)", is_under_observation());
+    bool success = false;
+
+    M2MReportHandler *handler = M2MBase::report_handler();
+    if (!handler) {
+        handler = M2MBase::create_report_handler();
+    }
+
+    if (handler) {
+        success = handler->parse_notification_attribute(query,
+                M2MBase::base_type(), _resource_type);
+        if(success) {
+            if (is_under_observation()) {
+                handler->set_under_observation(true);
+            }
+        } else {
+            handler->set_default_values();
+        }
+    }
+    return success;
+}
+
+void M2MResourceInstance::set_execute_function(execute_callback callback)
+{
+    delete _execute_callback;
+    _execute_callback = new execute_callback(callback);
+}
+
+void M2MResourceInstance::set_execute_function(execute_callback_2 callback)
+{
+    delete _execute_function_pointer;
+
+    _execute_function_pointer = new FP1<void, void*>(callback);
+    set_execute_function(execute_callback(_execute_function_pointer, &FP1<void, void*>::call));
+}
+
+void M2MResourceInstance::clear_value()
+{
+    tr_debug("M2MResourceInstance::clear_value");
+
+     free(_value);
+     _value = NULL;
+     _value_length = 0;
+
+    report();
+}
+
+bool M2MResourceInstance::set_value(int64_t value)
+{
+    bool success;
+    // max len of "-9223372036854775808" plus zero termination
+    char buffer[20+1];
+    uint32_t size = m2m::itoa_c(value, buffer);
+
+    success = set_value((const uint8_t*)buffer, size);
+
+    return success;
+}
+
+bool M2MResourceInstance::set_value(const uint8_t *value,
+                                    const uint32_t value_length)
+{
+    tr_debug("M2MResourceInstance::set_value()");
+    bool success = false;
+    bool value_changed = false;
+    if(is_value_changed(value,value_length)) {
+        value_changed = true;
+    }
+    if( value != NULL && value_length > 0 ) {
+        success = true;
+
+        free(_value);
+        _value_length = 0;
+
+        _value = alloc_string_copy(value, value_length);
+        if(_value) {
+            _value_length = value_length;
+            if( value_changed ) { //
+                if (_resource_type == M2MResourceInstance::STRING) {
+                    M2MReportHandler *report_handler = M2MBase::report_handler();
+                    if(report_handler && is_under_observation()) {
+                        report_handler->set_notification_trigger();
+                    }
+                }
+                else {
+                    report();
+                }
+            }
+        }
+    }
+    return success;
+}
+
+void M2MResourceInstance::report()
+{
+    tr_debug("M2MResourceInstance::report()");
+    M2MBase::Observation  observation_level = M2MBase::observation_level();
+    tr_debug("M2MResourceInstance::report() - level %d", observation_level);
+    if((M2MBase::O_Attribute & observation_level) == M2MBase::O_Attribute ||
+       (M2MBase::OI_Attribute & observation_level) == M2MBase::OI_Attribute) {
+        tr_debug("M2MResourceInstance::report() -- object/instance level");
+        M2MObjectInstance& object_instance = get_parent_resource().get_parent_object_instance();
+        object_instance.notification_update(observation_level);
+    }
+
+    if(M2MBase::Dynamic == mode() &&
+       (M2MBase::R_Attribute & observation_level) == M2MBase::R_Attribute) {
+        tr_debug("M2MResourceInstance::report() - resource level");
+        if(!_resource_callback && _resource_type != M2MResourceInstance::STRING) {
+            M2MReportHandler *report_handler = M2MBase::report_handler();
+            if (report_handler && is_observable()) {
+                if(_value) {
+                    report_handler->set_value(atof((const char*)_value));
+                } else {
+                    report_handler->set_value(0);
+                }
+            }
+        }
+        else {
+            if (_resource_callback && base_type() == M2MBase::ResourceInstance) {
+                _resource_callback->notification_update();
+            }
+        }
+    } else if(M2MBase::Static == mode()) {
+        M2MObservationHandler *observation_handler = M2MBase::observation_handler();
+        if(observation_handler) {
+            observation_handler->value_updated(this);
+        }
+    } else {
+        tr_debug("M2MResourceInstance::report() - mode = %d, is_observable = %d", mode(), is_observable());
+    }
+}
+
+bool M2MResourceInstance::is_value_changed(const uint8_t* value, const uint32_t value_len)
+{
+    bool changed = false;
+    if(value_len != _value_length) {
+        changed = true;
+    } else if(value && !_value) {
+        changed = true;
+    } else if(_value && !value) {
+        changed = true;
+    } else {
+        if (_value) {
+            if (strcmp((char*)value, (char*)_value) != 0) {
+                changed = true;
+            }
+        }
+    }
+    tr_debug("M2MResourceInstance::is_value_changed() -- %s", changed ? "true" : "false");
+    return changed;
+}
+
+void M2MResourceInstance::execute(void *arguments)
+{
+    tr_debug("M2MResourceInstance::execute");
+    if(_execute_callback) {
+        (*_execute_callback)(arguments);
+    }
+}
+
+void M2MResourceInstance::get_value(uint8_t *&value, uint32_t &value_length)
+{
+    value_length = 0;
+    if(value) {
+        free(value);
+        value = NULL;
+    }
+    if(_value && _value_length > 0) {
+        value = alloc_string_copy(_value, _value_length);
+        if(value) {
+            value_length = _value_length;
+        }
+    }
+}
+
+int M2MResourceInstance::get_value_int()
+{
+    int value_int = 0;
+    // Get the value and convert it into integer. This is not the most
+    // efficient way, as it takes pointless heap copy to get the zero termination.
+    uint8_t* buffer = NULL;
+    uint32_t length;
+    get_value(buffer,length);
+    if(buffer) {
+        value_int = atoi((const char*)buffer);
+        free(buffer);
+    }
+    return value_int;
+}
+
+String M2MResourceInstance::get_value_string() const
+{
+    // XXX: do a better constructor to avoid pointless malloc
+    String value;
+    if (_value) {
+        value.append_raw((char*)_value, _value_length);
+    }
+
+    return value;
+}
+
+uint8_t* M2MResourceInstance::value() const
+{
+    return _value;
+}
+
+uint32_t M2MResourceInstance::value_length() const
+{
+    return _value_length;
+}
+
+sn_coap_hdr_s* M2MResourceInstance::handle_get_request(nsdl_s *nsdl,
+                                               sn_coap_hdr_s *received_coap_header,
+                                               M2MObservationHandler *observation_handler)
+{
+    tr_debug("M2MResourceInstance::handle_get_request()");
+    sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CONTENT;
+    sn_coap_hdr_s *coap_response = sn_nsdl_build_response(nsdl,
+                                                          received_coap_header,
+                                                          msg_code);
+    if(received_coap_header) {
+        // process the GET if we have registered a callback for it
+        if ((operation() & SN_GRS_GET_ALLOWED) != 0) {
+            if(coap_response) {
+                if(_resource_type == M2MResourceInstance::OPAQUE) {
+                    coap_response->content_format = sn_coap_content_format_e(COAP_CONTENT_OMA_OPAQUE_TYPE);
+                } else {
+                    coap_response->content_format = sn_coap_content_format_e(0);
+                }
+                // fill in the CoAP response payload
+                coap_response->payload_ptr = NULL;
+                uint32_t payload_len = 0;
+
+                //If handler exists it means that resource value is stored in application side
+                if (block_message() && block_message()->is_block_message()) {
+                    if(_outgoing_block_message_cb) {
+                        String name = "";
+                        if (received_coap_header->uri_path_ptr != NULL &&
+                                received_coap_header->uri_path_len > 0) {
+                            name.append_raw((char *)received_coap_header->uri_path_ptr,
+                                             received_coap_header->uri_path_len);
+                        }
+                        (*_outgoing_block_message_cb)(name, coap_response->payload_ptr, payload_len);
+                    }
+                } else {
+                    get_value(coap_response->payload_ptr,payload_len);
+                }
+
+                coap_response->payload_len = payload_len;
+                coap_response->options_list_ptr = sn_nsdl_alloc_options_list(nsdl, coap_response);
+
+                coap_response->options_list_ptr->max_age = max_age();
+
+                if(received_coap_header->options_list_ptr) {
+                    if(received_coap_header->options_list_ptr->observe != -1) {
+                        if (is_observable()) {
+                            uint32_t number = 0;
+                            uint8_t observe_option = 0;
+                            observe_option = received_coap_header->options_list_ptr->observe;
+
+                            if(START_OBSERVATION == observe_option) {
+                                tr_debug("M2MResourceInstance::handle_get_request - Starts Observation");
+                                // If the observe length is 0 means register for observation.
+                                if(received_coap_header->options_list_ptr->observe != -1) {
+                                    number = received_coap_header->options_list_ptr->observe;
+                                }
+                                if(received_coap_header->token_ptr) {
+                                    tr_debug("M2MResourceInstance::handle_get_request - Sets Observation Token to resource");
+                                    set_observation_token(received_coap_header->token_ptr,
+                                                          received_coap_header->token_len);
+                                }
+                                // If the observe value is 0 means register for observation.
+                                if(number == 0) {
+                                    tr_debug("M2MResourceInstance::handle_get_request - Put Resource under Observation");
+                                    set_under_observation(true,observation_handler);
+                                    M2MBase::add_observation_level(M2MBase::R_Attribute);
+                                    coap_response->options_list_ptr->observe = observation_number();
+                                }
+                            } else if (STOP_OBSERVATION == observe_option) {
+                                tr_debug("M2MResourceInstance::handle_get_request - Stops Observation");
+                                set_under_observation(false,NULL);
+                                M2MBase::remove_observation_level(M2MBase::R_Attribute);
+                            }
+                        } else {
+                            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+                        }
+                    }
+                }
+            }
+        }else {
+            tr_error("M2MResourceInstance::handle_get_request - Return COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+            // Operation is not allowed.
+            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+        }
+    } else {
+        msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+    }
+    if(coap_response) {
+        coap_response->msg_code = msg_code;
+    }
+    return coap_response;
+}
+
+sn_coap_hdr_s* M2MResourceInstance::handle_put_request(nsdl_s *nsdl,
+                                               sn_coap_hdr_s *received_coap_header,
+                                               M2MObservationHandler *observation_handler,
+                                               bool &execute_value_updated)
+{
+    tr_debug("M2MResourceInstance::handle_put_request()");
+
+
+        sn_coap_msg_code_e msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; // 2.04
+        sn_coap_hdr_s *coap_response = sn_nsdl_build_response(nsdl,
+                                                               received_coap_header,
+                                                               msg_code);
+        // process the PUT if we have registered a callback for it
+        if(received_coap_header && coap_response) {
+            uint16_t coap_content_type = 0;
+            if(received_coap_header->content_format != COAP_CT_NONE) {
+                coap_content_type = received_coap_header->content_format;
+            }
+            if(received_coap_header->options_list_ptr &&
+               received_coap_header->options_list_ptr->uri_query_ptr) {
+                char *query = (char*)alloc_string_copy(received_coap_header->options_list_ptr->uri_query_ptr,
+                                                        received_coap_header->options_list_ptr->uri_query_len);
+                if (query){
+                    tr_debug("M2MResourceInstance::handle_put_request() - Query %s", query);
+
+                    // if anything was updated, re-initialize the stored notification attributes
+                    if (!handle_observation_attribute(query)){
+                        tr_debug("M2MResourceInstance::handle_put_request() - Invalid query");
+                        msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; // 4.00
+                    }
+                    free(query);
+                }
+            } else if ((operation() & SN_GRS_PUT_ALLOWED) != 0) {
+                tr_debug("M2MResourceInstance::handle_put_request() - Request Content-Type %d", coap_content_type);
+
+                if(COAP_CONTENT_OMA_TLV_TYPE == coap_content_type) {
+                    msg_code = COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT;
+                } else {
+                    bool external_block_store = false;
+                    if (block_message()) {
+                        block_message()->set_message_info(received_coap_header);
+                        if (block_message()->is_block_message()) {
+                            external_block_store = true;
+                            if(_incoming_block_message_cb) {
+                                (*_incoming_block_message_cb)(_block_message_data);
+                            }
+                            if (block_message()->is_last_block()) {
+                                block_message()->clear_values();
+                                coap_response->coap_status = COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVED;
+                            } else {
+                                coap_response->coap_status = COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVING;
+                            }
+                            if (block_message()->error_code() != M2MBlockMessage::ErrorNone) {
+                                block_message()->clear_values();
+                            }
+                        }
+                    }
+                    if (!external_block_store) {
+                        set_value(received_coap_header->payload_ptr, received_coap_header->payload_len);
+                    }
+                    if(received_coap_header->payload_ptr) {
+                       tr_debug("M2MResourceInstance::handle_put_request() - Update Resource with new values");
+                        if(observation_handler) {
+                            String value = "";
+                            if (received_coap_header->uri_path_ptr != NULL &&
+                                received_coap_header->uri_path_len > 0) {
+                                value.append_raw((char*)received_coap_header->uri_path_ptr, received_coap_header->uri_path_len);
+                            }
+                            execute_value_updated = true;
+                        }
+                    }
+                }
+            } else {
+                // Operation is not allowed.
+                tr_error("M2MResourceInstance::handle_put_request() - COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED");
+                msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+            }
+        } else {
+            msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+        }
+        if(coap_response) {
+            coap_response->msg_code = msg_code;
+        }
+
+    return coap_response;
+}
+
+void M2MResourceInstance::set_resource_observer(M2MResourceCallback *resource)
+{
+    _resource_callback = resource;
+}
+
+uint16_t M2MResourceInstance::object_instance_id() const
+{
+    return _object_instance_id;
+}
+
+M2MBlockMessage* M2MResourceInstance::block_message() const
+{
+    return _block_message_data;
+}
+
+void M2MResourceInstance::set_incoming_block_message_callback(incoming_block_message_callback callback)
+{
+    // copy the callback object. This will change on next version to be a direct pointer to a interface class,
+    // this FPn<> is just too heavy for this usage.
+    delete _incoming_block_message_cb;
+    _incoming_block_message_cb = new incoming_block_message_callback(callback);
+
+    delete _block_message_data;
+    _block_message_data = NULL;
+    _block_message_data = new M2MBlockMessage();
+}
+
+void M2MResourceInstance::set_outgoing_block_message_callback(outgoing_block_message_callback callback)
+{
+    delete _outgoing_block_message_cb;
+    _outgoing_block_message_cb = new outgoing_block_message_callback(callback);
+}
+
+void M2MResourceInstance::set_notification_sent_callback(notification_sent_callback callback)
+{
+    delete _notification_sent_callback;
+    _notification_sent_callback = new notification_sent_callback(callback);
+}
+
+void M2MResourceInstance::set_notification_sent_callback(notification_sent_callback_2 callback)
+{
+    delete _notification_sent_function_pointer;
+
+    _notification_sent_function_pointer = new FP0<void>(callback);
+    set_notification_sent_callback(
+                notification_sent_callback(_notification_sent_function_pointer, &FP0<void>::call));
+}
+
+void M2MResourceInstance::notification_sent()
+{
+    if (_notification_sent_callback) {
+        (*_notification_sent_callback)();
+    }
+}
+
+M2MResource& M2MResourceInstance::get_parent_resource() const
+{
+    return _parent_resource;
+}
+
+const char* M2MResourceInstance::object_name() const
+{
+    const M2MObjectInstance& parent_object_instance = _parent_resource.get_parent_object_instance();
+    const M2MObject& parent_object = parent_object_instance.get_parent_object();
+
+    return parent_object.name();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2msecurity.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,371 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2msecurity.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+#include "mbed-client/m2mstring.h"
+#include "mbed-trace/mbed_trace.h"
+
+#include <stdlib.h>
+
+#define TRACE_GROUP "mClt"
+
+#define BUFFER_SIZE 21
+
+M2MSecurity::M2MSecurity(ServerType ser_type)
+: M2MObject(M2M_SECURITY_ID, stringdup(M2M_SECURITY_ID)),
+ _server_instance(NULL),
+ _server_type(ser_type)
+{
+     _server_instance  = M2MObject::create_object_instance();
+
+    if(_server_instance) {
+        M2MResource* res = _server_instance->create_dynamic_resource(SECURITY_M2M_SERVER_URI,
+                                                                     OMA_RESOURCE_TYPE,
+                                                                     M2MResourceInstance::STRING,
+                                                                     false);
+        if(res) {
+            res->set_operation(M2MBase::NOT_ALLOWED);
+        }
+        res = _server_instance->create_dynamic_resource(SECURITY_BOOTSTRAP_SERVER,
+                                                        OMA_RESOURCE_TYPE,
+                                                        M2MResourceInstance::BOOLEAN,
+                                                        false);
+        if(res) {
+            res->set_operation(M2MBase::NOT_ALLOWED);
+        }
+        res = _server_instance->create_dynamic_resource(SECURITY_SECURITY_MODE,
+                                                        OMA_RESOURCE_TYPE,
+                                                        M2MResourceInstance::INTEGER,
+                                                        false);
+        if(res) {
+            res->set_operation(M2MBase::NOT_ALLOWED);
+        }
+        res = _server_instance->create_dynamic_resource(SECURITY_PUBLIC_KEY,
+                                                        OMA_RESOURCE_TYPE,
+                                                        M2MResourceInstance::OPAQUE,
+                                                        false);
+        if(res) {
+            res->set_operation(M2MBase::NOT_ALLOWED);
+        }
+        res = _server_instance->create_dynamic_resource(SECURITY_SERVER_PUBLIC_KEY,
+                                                        OMA_RESOURCE_TYPE,
+                                                        M2MResourceInstance::OPAQUE,
+                                                        false);
+        if(res) {
+            res->set_operation(M2MBase::NOT_ALLOWED);
+        }
+        res = _server_instance->create_dynamic_resource(SECURITY_SECRET_KEY,
+                                                        OMA_RESOURCE_TYPE,
+                                                        M2MResourceInstance::OPAQUE,
+                                                        false);
+        if(res) {
+            res->set_operation(M2MBase::NOT_ALLOWED);
+        }
+        if(M2MSecurity::M2MServer == ser_type) {
+            res = _server_instance->create_dynamic_resource(SECURITY_SHORT_SERVER_ID,
+                                                            OMA_RESOURCE_TYPE,
+                                                            M2MResourceInstance::INTEGER,
+                                                            false);
+            if(res) {
+                res->set_operation(M2MBase::NOT_ALLOWED);
+            }
+        }
+    }
+}
+
+M2MSecurity::~M2MSecurity()
+{
+}
+
+M2MResource* M2MSecurity::create_resource(SecurityResource resource, uint32_t value)
+{
+    M2MResource* res = NULL;
+    const char* security_id_ptr = "";
+    if(!is_resource_present(resource)) {
+        switch(resource) {
+            case SMSSecurityMode:
+               security_id_ptr = SECURITY_SMS_SECURITY_MODE;
+               break;
+            case M2MServerSMSNumber:
+                security_id_ptr = SECURITY_M2M_SERVER_SMS_NUMBER;
+                break;
+            case ShortServerID:
+                security_id_ptr = SECURITY_SHORT_SERVER_ID;
+                break;
+            case ClientHoldOffTime:
+                security_id_ptr = SECURITY_CLIENT_HOLD_OFF_TIME;
+                break;
+            default:
+                break;
+        }
+    }
+
+    const String security_id(security_id_ptr);
+
+    if(!security_id.empty()) {
+        if(_server_instance) {
+            res = _server_instance->create_dynamic_resource(security_id,OMA_RESOURCE_TYPE,
+                                                            M2MResourceInstance::INTEGER,
+                                                            false);
+
+            if(res) {
+                res->set_operation(M2MBase::NOT_ALLOWED);
+                res->set_value(value);
+            }
+        }
+    }
+    return res;
+}
+
+bool M2MSecurity::delete_resource(SecurityResource resource)
+{
+    bool success = false;
+    const char* security_id_ptr;
+    switch(resource) {
+        case SMSSecurityMode:
+           security_id_ptr = SECURITY_SMS_SECURITY_MODE;
+           break;
+        case M2MServerSMSNumber:
+            security_id_ptr = SECURITY_M2M_SERVER_SMS_NUMBER;
+            break;
+        case ShortServerID:
+            if(M2MSecurity::Bootstrap == _server_type) {
+                security_id_ptr = SECURITY_SHORT_SERVER_ID;
+            }
+            break;
+        case ClientHoldOffTime:
+            security_id_ptr = SECURITY_CLIENT_HOLD_OFF_TIME;
+            break;
+        default:
+            // Others are mandatory resources hence cannot be deleted.
+            security_id_ptr = NULL;
+            break;
+    }
+
+    if(security_id_ptr) {
+        if(_server_instance) {
+            success = _server_instance->remove_resource(security_id_ptr);
+        }
+    }
+    return success;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource resource,
+                                     const String &value)
+{
+    bool success = false;
+    if(M2MSecurity::M2MServerUri == resource) {
+        M2MResource* res = get_resource(resource);
+        if(res) {
+            success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length());
+        }
+    }
+    return success;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource resource,
+                                     uint32_t value)
+{
+    bool success = false;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MSecurity::SecurityMode == resource        ||
+           M2MSecurity::SMSSecurityMode == resource     ||
+           M2MSecurity::M2MServerSMSNumber == resource  ||
+           M2MSecurity::ShortServerID == resource       ||
+           M2MSecurity::ClientHoldOffTime == resource) {
+            // If it is any of the above resource
+            // set the value of the resource.
+            uint8_t size = 0;
+            uint8_t *buffer = String::convert_integer_to_array(value, size);
+            success = res->set_value(buffer,size);
+            free(buffer);
+        }
+    }
+    return success;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource resource,
+                                     const uint8_t *value,
+                                     const uint16_t length)
+{
+    bool success = false;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MSecurity::PublicKey == resource           ||
+           M2MSecurity::ServerPublicKey == resource     ||
+           M2MSecurity::Secretkey == resource) {
+            success = res->set_value(value,length);
+        }
+    }
+    return success;
+}
+
+String M2MSecurity::resource_value_string(SecurityResource resource) const
+{
+    String value = "";
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MSecurity::M2MServerUri == resource) {
+            value = res->get_value_string();
+        }
+    }
+    return value;
+}
+
+uint32_t M2MSecurity::resource_value_buffer(SecurityResource resource,
+                               uint8_t *&data) const
+{
+    uint32_t size = 0;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MSecurity::PublicKey == resource        ||
+           M2MSecurity::ServerPublicKey == resource  ||
+           M2MSecurity::Secretkey == resource) {
+            res->get_value(data,size);
+        }
+    }
+    return size;
+}
+
+uint32_t M2MSecurity::resource_value_buffer(SecurityResource resource,
+                               const uint8_t *&data) const
+{
+    uint32_t size = 0;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MSecurity::PublicKey == resource        ||
+           M2MSecurity::ServerPublicKey == resource  ||
+           M2MSecurity::Secretkey == resource) {
+            data = res->value();
+            size = res->value_length();
+        }
+    }
+    return size;
+}
+
+
+uint32_t M2MSecurity::resource_value_int(SecurityResource resource) const
+{
+    uint32_t value = 0;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MSecurity::SecurityMode == resource        ||
+           M2MSecurity::SMSSecurityMode == resource     ||
+           M2MSecurity::M2MServerSMSNumber == resource  ||
+           M2MSecurity::ShortServerID == resource       ||
+           M2MSecurity::ClientHoldOffTime == resource) {
+            // Get the value and convert it into integer. This is not the most
+            // efficient way, as it takes pointless heap copy to get the zero termination.
+            uint8_t* buffer = NULL;
+            uint32_t length = 0;
+            res->get_value(buffer,length);
+            if(buffer) {
+                value = String::convert_array_to_integer(buffer,length);
+                free(buffer);
+            }
+        }
+    }
+    return value;
+}
+
+bool M2MSecurity::is_resource_present(SecurityResource resource) const
+{
+    bool success = false;
+    M2MResource *res = get_resource(resource);
+    if(res) {
+        success = true;
+    }
+    return success;
+}
+
+uint16_t M2MSecurity::total_resource_count() const
+{
+    uint16_t count = 0;
+    if(_server_instance) {
+        count = _server_instance->resources().size();
+    }
+    return count;
+}
+
+M2MSecurity::ServerType M2MSecurity::server_type() const
+{
+    return _server_type;
+}
+
+M2MResource* M2MSecurity::get_resource(SecurityResource res) const
+{
+    M2MResource* res_object = NULL;
+    if(_server_instance) {
+        const char* res_name_ptr = NULL;
+        switch(res) {
+            case M2MServerUri:
+                res_name_ptr = SECURITY_M2M_SERVER_URI;
+                break;
+            case BootstrapServer:
+                res_name_ptr = SECURITY_BOOTSTRAP_SERVER;
+                break;
+            case SecurityMode:
+                res_name_ptr = SECURITY_SECURITY_MODE;
+                break;
+            case PublicKey:
+                res_name_ptr = SECURITY_PUBLIC_KEY;
+                break;
+            case ServerPublicKey:
+                res_name_ptr = SECURITY_SERVER_PUBLIC_KEY;
+                break;
+            case Secretkey:
+                res_name_ptr = SECURITY_SECRET_KEY;
+                break;
+            case SMSSecurityMode:
+                res_name_ptr = SECURITY_SMS_SECURITY_MODE;
+                break;
+            case SMSBindingKey:
+                res_name_ptr = SECURITY_SMS_BINDING_KEY;
+                break;
+            case SMSBindingSecretKey:
+                res_name_ptr = SECURITY_SMS_BINDING_SECRET_KEY;
+                break;
+            case M2MServerSMSNumber:
+                res_name_ptr = SECURITY_M2M_SERVER_SMS_NUMBER;
+                break;
+            case ShortServerID:
+                res_name_ptr = SECURITY_SHORT_SERVER_ID;
+                break;
+            case ClientHoldOffTime:
+                res_name_ptr = SECURITY_CLIENT_HOLD_OFF_TIME;
+                break;
+        }
+
+        if (res_name_ptr) {
+            res_object = _server_instance->resource(res_name_ptr);
+        }
+    }
+    return res_object;
+}
+
+void M2MSecurity::clear_resources()
+{
+    for(int i = 0; i <= M2MSecurity::ClientHoldOffTime; i++) {
+        M2MResource *res = get_resource((SecurityResource) i);
+        if (res) {
+            res->clear_value();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mserver.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,287 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbed-client/m2mserver.h"
+#include "mbed-client/m2mconstants.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+#include "mbed-client/m2mstring.h"
+
+#define TRACE_GROUP "mClt"
+
+#define BUFFER_SIZE 21
+
+M2MServer::M2MServer()
+: M2MObject(M2M_SERVER_ID, stringdup(M2M_SERVER_ID))
+{
+    M2MObject::create_object_instance();
+
+    _server_instance = object_instance();
+
+    if(_server_instance) {
+
+        M2MResource* res = _server_instance->create_dynamic_resource(SERVER_SHORT_SERVER_ID,
+                                                                     OMA_RESOURCE_TYPE,
+                                                                     M2MResourceInstance::INTEGER,
+                                                                     true);
+        if(res) {
+            res->set_operation(M2MBase::GET_PUT_ALLOWED);
+        }
+        res = _server_instance->create_dynamic_resource(SERVER_LIFETIME,
+                                                        OMA_RESOURCE_TYPE,
+                                                        M2MResourceInstance::INTEGER,
+                                                        true);
+        if(res) {
+            res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+        }
+        res = _server_instance->create_dynamic_resource(SERVER_NOTIFICATION_STORAGE,
+                                                        OMA_RESOURCE_TYPE,
+                                                        M2MResourceInstance::BOOLEAN,
+                                                        true);
+        if(res) {
+            res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+        }
+        res = _server_instance->create_dynamic_resource(SERVER_BINDING,
+                                                        OMA_RESOURCE_TYPE,
+                                                        M2MResourceInstance::STRING,
+                                                        true);
+        if(res) {
+            res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+        }
+        res = _server_instance->create_dynamic_resource(SERVER_REGISTRATION_UPDATE,
+                                                        OMA_RESOURCE_TYPE,
+                                                        M2MResourceInstance::OPAQUE,
+                                                        false);
+        if(res) {
+          res->set_operation(M2MBase::POST_ALLOWED);
+        }
+    }
+}
+
+M2MServer::~M2MServer()
+{
+
+}
+
+M2MResource* M2MServer::create_resource(ServerResource resource, uint32_t value)
+{
+    M2MResource* res = NULL;
+    const char* server_id_ptr = "";
+    if(!is_resource_present(resource)) {
+        switch(resource) {
+        case DefaultMinPeriod:
+            server_id_ptr = SERVER_DEFAULT_MIN_PERIOD;
+            break;
+        case DefaultMaxPeriod:
+            server_id_ptr = SERVER_DEFAULT_MAX_PERIOD;
+            break;
+        case DisableTimeout:
+            server_id_ptr = SERVER_DISABLE_TIMEOUT;
+            break;
+        default:
+            break;
+        }
+    }
+    String server_id(server_id_ptr);
+    
+    if(!server_id.empty()) {
+        if(_server_instance) {
+            res = _server_instance->create_dynamic_resource(server_id,
+                                                            OMA_RESOURCE_TYPE,
+                                                            M2MResourceInstance::INTEGER,
+                                                            true);
+            if(res) {
+                res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+                
+                res->set_value(value);
+            }
+        }
+    }
+    return res;
+}
+
+M2MResource* M2MServer::create_resource(ServerResource resource)
+{
+    M2MResource* res = NULL;
+    if(!is_resource_present(resource)) {
+        if(M2MServer::Disable == resource) {
+                if(_server_instance) {
+                    res = _server_instance->create_dynamic_resource(SERVER_DISABLE,
+                                                                    OMA_RESOURCE_TYPE,
+                                                                    M2MResourceInstance::OPAQUE,
+                                                                    false);
+                if(res) {
+                    res->set_operation(M2MBase::POST_ALLOWED);
+                }
+            }
+        }
+    }
+    return res;
+}
+
+bool M2MServer::delete_resource(ServerResource resource)
+{
+    bool success = false;
+    const char* server_id_ptr;
+    switch(resource) {
+        case DefaultMinPeriod:
+           server_id_ptr = SERVER_DEFAULT_MIN_PERIOD;
+           break;
+        case DefaultMaxPeriod:
+            server_id_ptr = SERVER_DEFAULT_MAX_PERIOD;
+            break;
+        case Disable:
+            server_id_ptr = SERVER_DISABLE;
+            break;
+        case DisableTimeout:
+            server_id_ptr = SERVER_DISABLE_TIMEOUT;
+            break;
+        default:
+            server_id_ptr = NULL;
+            break;
+    }
+
+    if(server_id_ptr) {
+        if(_server_instance) {
+            success = _server_instance->remove_resource(server_id_ptr);
+        }
+    }
+    return success;
+}
+
+bool M2MServer::set_resource_value(ServerResource resource,
+                                   const String &value)
+{
+    bool success = false;
+    M2MResource* res = get_resource(resource);
+    if(res && (M2MServer::Binding == resource)) {
+        success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length());
+    }
+    return success;
+}
+
+bool M2MServer::set_resource_value(ServerResource resource,
+                                   uint32_t value)
+{
+    bool success = false;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MServer::ShortServerID == resource     ||
+           M2MServer::Lifetime == resource          ||
+           M2MServer::DefaultMinPeriod == resource  ||
+           M2MServer::DefaultMaxPeriod == resource  ||
+           M2MServer::DisableTimeout == resource    ||
+           M2MServer::NotificationStorage == resource) {
+            // If it is any of the above resource
+            // set the value of the resource.
+
+            success = res->set_value(value);
+        }
+    }
+    return success;
+}
+
+String M2MServer::resource_value_string(ServerResource resource) const
+{
+    String value = "";
+    M2MResource* res = get_resource(resource);
+    if(res && (M2MServer::Binding == resource)) {
+
+        value = res->get_value_string();
+    }
+    return value;
+}
+
+
+uint32_t M2MServer::resource_value_int(ServerResource resource) const
+{
+    uint32_t value = 0;
+    M2MResource* res = get_resource(resource);
+    if(res) {
+        if(M2MServer::ShortServerID == resource     ||
+           M2MServer::Lifetime == resource          ||
+           M2MServer::DefaultMinPeriod == resource  ||
+           M2MServer::DefaultMaxPeriod == resource  ||
+           M2MServer::DisableTimeout == resource    ||
+           M2MServer::NotificationStorage == resource) {
+
+            value = res->get_value_int();
+        }
+    }
+    return value;
+}
+
+bool M2MServer::is_resource_present(ServerResource resource) const
+{
+    bool success = false;
+    M2MResource *res = get_resource(resource);
+    if(res) {
+        success = true;
+    }
+    return success;
+}
+
+uint16_t M2MServer::total_resource_count() const
+{
+    uint16_t total_count = 0;
+    if(_server_instance) {
+    total_count = _server_instance->resources().size();
+    }
+    return total_count;
+}
+
+M2MResource* M2MServer::get_resource(ServerResource res) const
+{
+    M2MResource* res_object = NULL;
+    const char* res_name_ptr = NULL;
+    switch(res) {
+    case ShortServerID:
+        res_name_ptr = SERVER_SHORT_SERVER_ID;
+        break;
+    case Lifetime:
+        res_name_ptr = SERVER_LIFETIME;
+        break;
+    case DefaultMinPeriod:
+        res_name_ptr = SERVER_DEFAULT_MIN_PERIOD;
+        break;
+    case DefaultMaxPeriod:
+        res_name_ptr = SERVER_DEFAULT_MAX_PERIOD;
+        break;
+    case Disable:
+        res_name_ptr = SERVER_DISABLE;
+        break;
+    case DisableTimeout:
+        res_name_ptr = SERVER_DISABLE_TIMEOUT;
+        break;
+    case NotificationStorage:
+        res_name_ptr = SERVER_NOTIFICATION_STORAGE;
+        break;
+    case Binding:
+        res_name_ptr = SERVER_BINDING;
+        break;
+    case RegistrationUpdate:
+        res_name_ptr = SERVER_REGISTRATION_UPDATE;
+        break;
+    }
+
+    if(res_name_ptr) {
+        if(_server_instance) {
+            res_object = _server_instance->resource(res_name_ptr);
+        }
+    }
+    return res_object;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mstring.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,429 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2mstring.h"
+#include <string.h> // strlen
+#include <stdlib.h> // malloc, realloc
+#include <assert.h>
+#include <algorithm> // min
+
+namespace m2m {
+
+const String::size_type String::npos = static_cast<size_t>(-1);
+
+char* String::strdup(const char* s)
+{
+    const size_t len = strlen(s)+1;
+    char *p2 = static_cast<char*>(malloc(len));
+    memcpy(p2, s, len);
+    allocated_ = len;
+    size_ = len-1;
+    return p2;
+}
+
+String::String()
+    : p( strdup("") )
+{
+}
+
+String::~String()
+{
+    free(p);
+    p = 0;
+}
+
+String::String(const String& s)
+    : p(0)
+{
+    if( &s != NULL ) {
+        p = static_cast<char*>(malloc(s.size_ + 1));
+
+        allocated_ = s.size_ + 1;
+        size_      = s.size_;
+        memcpy(p, s.p, size_ + 1);
+    }
+}
+
+String::String(const char* s)
+    : p(strdup(s))
+{
+}
+
+String::String(const char* str, size_t n)
+{
+    p = static_cast<char*>(malloc(n + 1));
+
+    allocated_ = n + 1;
+    size_      = n;
+    memcpy(p, str, n);
+    p[n] = 0;
+}
+
+String& String::operator=(const char* s)
+{
+    if ( p != s ) {
+        // s could point into our own string, so we have to allocate a new string
+        const size_t len = strlen(s);
+        char* copy = (char*) malloc( len + 1);
+        memmove(copy, s, len+1); // trailing 0
+        free( p );
+        p = copy;
+        size_ = len;
+        allocated_ = len+1;
+    }
+    return *this;
+}
+
+String& String::operator=(const String& s)
+{
+    return operator=(s.p);
+}
+
+String& String::operator+=(const String& s)
+{
+    if (s.size_ > 0) {
+        this->reserve(size_ + s.size_);
+        memmove(p+size_, s.p, s.size_+1); // trailing 0
+        size_ += s.size_;
+    }
+    return *this;
+}
+
+// since p and s may overlap, we have to copy our own string first
+String& String::operator+=(const char* s)
+{
+    const size_type lens = strlen(s);
+    if (lens > 0) {
+        if (size_ + lens + 1 <= allocated_) {
+            memmove(p+size_, s, lens+1); // trailing 0
+            size_ += lens;
+        } else {
+            String s2( *this );  // copy own data
+            s2.reserve(size_ + lens);
+            memmove(s2.p+size_, s, lens+1); // trailing 0
+            s2.size_ = size_ + lens;
+            this->swap( s2 );
+        }
+    }
+    return *this;
+}
+
+String& String::operator+=(const char c)
+{
+    push_back(c);
+    return *this;
+}
+
+void String::push_back(const char c) {
+
+    if (size_ == allocated_ - 1) {
+        size_t more =  (allocated_* 3) / 2; // factor 1.5
+        if ( more < 4 ) more = 4;
+        reserve( size_ + more );
+    }
+
+    p[size_] = c;
+    size_++;
+    p[size_] = 0;
+}
+
+bool String::operator==(const char* s) const
+{
+    if( s == NULL ) {
+        if( p == NULL ) {
+            return true;
+        }
+        return false;
+    }
+    bool ret = strcmp(p, s);
+    return !ret;
+}
+
+bool String::operator==(const String& s) const
+{
+    bool ret = strcmp(p, s.p);
+    return !ret;
+}
+
+void String::clear()
+{
+    size_ = 0;
+    p[0]  = 0;
+}
+
+String String::substr(const size_type pos, size_type length) const
+{
+    String s;
+    const size_type len = size_;
+
+    if ( pos <= len ) {
+
+        size_type remain = len - pos;
+
+        if ( length > remain )
+            length = remain;
+
+        s.reserve( length );
+
+        memcpy(s.p, p + pos, length);
+        s.p[length] = '\0';
+        s.size_ = length;
+    }
+    return s;
+}
+
+
+// checked access, accessing the NUL at end is allowed
+char String::at(const size_type i) const
+{
+    if ( i <= strlen(p) ) {
+        return p[i];
+    } else {
+        return '\0';
+    }
+}
+
+String& String::erase(size_type pos, size_type len)
+{
+    if (len > 0) {
+
+        if ( pos < size_ ) { // user must not remove trailing 0
+
+            size_type s2 = size_;
+            size_type remain = s2 - pos - len;
+
+            if (remain > 0) {
+                // erase by overwriting
+                memmove(p + pos, p + pos + len, remain);
+            }
+
+            //if ( remain < 0 ) remain = 0;
+
+            // remove unused space
+            this->resize( pos+remain );
+
+        }
+    }
+    return *this;
+}
+
+String& String::append( const char* str, size_type n) {
+    if (str && n > 0) {
+        size_t lens = strlen(str);
+        if (n > lens)
+            n = lens;
+        size_t newlen = size_ + n;
+        this->reserve( newlen );
+        memmove(p+size_, str, n); // p and s.p MAY overlap
+        p[newlen] = 0; // add NUL termination
+        size_ = newlen;
+    }
+    return *this;
+}
+
+String& String::append_raw( const char* str, size_type n) {
+    if (str && n > 0) {
+        size_t newlen = size_ + n;
+        this->reserve( newlen );
+        memmove(p+size_, str, n); // p and s.p MAY overlap
+        p[newlen] = 0; // add NUL termination
+        size_ = newlen;
+    }
+    return *this;
+}
+
+void String::append_int(int param) {
+
+    // max len of "-9223372036854775808" plus zero termination
+    char conv_buff[20+1];
+
+    int len = itoa_c(param, conv_buff);
+    append_raw(conv_buff, len);
+}
+
+int String::compare( size_type pos, size_type len, const String& str ) const {
+    int r = -1;
+    if (pos <= size_) {
+        if ( len > size_ - pos)
+            len = size_ - pos; // limit len to available length
+
+        const size_type osize = str.size();
+        const size_type len2   = std::min(len, osize);
+        r = strncmp( p + pos, str.p, len2);
+        if (r==0) // equal so far, now compare sizes
+            r = len < osize ? -1 : ( len == osize ? 0 : +1 );
+    }
+    return r;
+}
+
+int String::compare( size_type pos, size_type len, const char* str ) const {
+    int r = -1;
+    if (pos <= size_) {
+
+        if ( len > size_ - pos)
+            len = size_ - pos; // limit len to available length
+
+        const size_type osize = strlen(str);
+        const size_type len2   = std::min(len, osize);
+        r = strncmp( p + pos, str, len2);
+        if (r==0) // equal so far, now compare sizes
+            r = len < osize ? -1 : ( len == osize ? 0 : +1 );
+    }
+    return r;
+}
+
+int String::find_last_of(char c) const {
+    int r = -1;
+    char *v;
+    v = strrchr(p,c);
+    if (v != NULL) {
+        r = 0;
+        char* i = p;
+        while (v != i) {
+            i++;
+            r++;
+        }
+    }
+    return r;
+}
+
+void String::new_realloc( size_type n) {
+    if (n > 0 ) {
+        char* pnew = static_cast<char*>(realloc(p, n)); // could return NULL
+        if (pnew)
+            p = pnew;
+    }
+}
+
+void String::reserve( const size_type n) {
+    if (n >= allocated_ ) {
+        this->new_realloc(n + 1);
+        allocated_ = n + 1;
+    }
+}
+
+void String::resize( const size_type n) {
+    this->resize( n, 0 );
+}
+
+void String::resize( const size_type n, const char c) {
+    if (n < size_ ) {
+        p[n] = 0;
+        size_ = n;
+    }
+    else if (n >  size_ ) {
+        this->reserve( n );
+        for (size_type i=size_; i < n; ++i )
+            p[i] = c;
+        p[n] = 0;
+        size_ = n;
+    }
+}
+
+void String::swap( String& s ) {
+    std::swap( allocated_, s.allocated_ );
+    std::swap( size_,      s.size_      );
+    std::swap( p,          s.p          );
+}
+
+
+// Comparison
+bool operator<( const String& s1, const String& s2 ) {
+    return strcmp( s1.c_str(), s2.c_str() ) < 0;
+}
+
+void reverse(char s[], uint32_t length)
+{
+    uint32_t i, j;
+    char c;
+
+    for (i = 0, j = length-1; i<j; i++, j--) {
+        c = s[i];
+        s[i] = s[j];
+        s[j] = c;
+    }
+}
+
+uint32_t itoa_c (int64_t n, char s[])
+{
+    int64_t sign;
+    uint32_t i;
+
+    if ((sign = n) < 0)
+        n = -n;
+
+    i = 0;
+
+    do {
+        s[i++] = n % 10 + '0';
+    }
+    while ((n /= 10) > 0);
+
+    if (sign < 0)
+        s[i++] = '-';
+
+    s[i] = '\0';
+
+    m2m::reverse(s, i);
+    return i;
+}
+
+uint8_t* String::convert_integer_to_array(int64_t value, uint8_t &size, uint8_t *array, uint32_t array_size)
+{
+    uint8_t* buffer = NULL;
+    size = 0;
+    if (array) {
+        value = String::convert_array_to_integer(array, array_size);
+    }
+
+    if(value < 0xFF) {
+        size = 1;
+    } else if(value < 0xFFFF) {
+        size = 2;
+    } else if(value < 0xFFFFFF) {
+        size = 3;
+    } else if(value < 0xFFFFFFFF) {
+        size = 4;
+    } else if(value < 0xFFFFFFFFFF) {
+        size = 5;
+    } else if(value < 0xFFFFFFFFFFFF) {
+        size = 6;
+    } else if(value < 0xFFFFFFFFFFFFFF) {
+        size = 7;
+    } else {
+        size = 8;
+    }
+
+    buffer = (uint8_t*)malloc(size);
+    if (buffer) {
+        for (int i = 0; i < size; i++) {
+            buffer[i] = (value >> ((size - i - 1) * 8));
+        }
+    } else {
+        size = 0;
+    }
+    return buffer;
+}
+
+int64_t String::convert_array_to_integer(uint8_t *value, uint32_t size)
+{
+    int64_t temp_64 = 0;
+    for (int i = size - 1; i >= 0; i--) {
+        temp_64 += (uint64_t)(*value++) << i * 8;
+    }
+    return temp_64;
+}
+
+} // namespace
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mstringbufferbase.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbed-client/m2mstringbufferbase.h"
+
+#include "mbed-client/m2mstring.h"
+
+#include <assert.h>
+#include <string.h>
+
+
+bool StringBufferBase::ensure_space(size_t max_size, size_t required_size) const
+{
+    const size_t space_left = max_size - _curr_size;
+
+    bool space_available = false;
+
+    if (required_size <= space_left) {
+
+        space_available = true;
+    }
+    return space_available;
+}
+
+bool StringBufferBase::append(char *buff, size_t max_size, char data)
+{
+    bool space_available = ensure_space(max_size, 1 + 1); // there must be space for trailing zero too
+    if (space_available) {
+        buff[_curr_size++] = data;
+        buff[_curr_size] = '\0';
+        assert(_curr_size < max_size);
+    }
+    return space_available;
+}
+
+bool StringBufferBase::append(char *buff, size_t max_size, const char *data)
+{
+
+    const size_t string_len = strlen(data);
+    bool space_available = ensure_space(max_size, string_len + 1);
+    if (space_available) {
+        memcpy(buff + _curr_size, data, string_len + 1); // copy the zero terminator too
+        _curr_size += string_len;
+        assert(_curr_size < max_size);
+    }
+    return space_available;
+}
+
+bool StringBufferBase::append(char *buff, size_t max_size, const char *data, size_t data_len)
+{
+    bool space_available = true;
+    if (data_len > 0) {
+        space_available = ensure_space(max_size, data_len + 1);
+        if (space_available) {
+            memcpy(buff + _curr_size, data, data_len);
+            _curr_size += data_len;
+            // Todo: should the code actually check, if the data already contained zero or not?
+            buff[_curr_size] = '\0';
+            assert(_curr_size < max_size);
+        }
+    }
+    return space_available;
+}
+
+bool StringBufferBase::append_int(char *buff, size_t max_size, uint16_t data)
+{
+    // max len of "-9223372036854775808" plus zero termination
+    char conv_buff[20+1];
+
+    // re-use the String's functionality, a more optimal version would use snprintf() or int size specific converter
+    int len = m2m::itoa_c(data, conv_buff);
+
+    return append(buff, max_size, conv_buff, len);
+}
+
+int StringBufferBase::find_last_of(const char *buff, char search_char) const
+{
+    int last_index = -1;
+    // search from the end of string, return upon first found matching char
+    for (int index = _curr_size; index >= 0; index--) {
+        if (buff[index] == search_char) {
+            last_index = index;
+            break;
+        }
+    }
+
+    return last_index;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mtlvdeserializer.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,430 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "include/m2mtlvdeserializer.h"
+#include "mbed-client/m2mconstants.h"
+#include "include/nsdllinker.h"
+#include "mbed-trace/mbed_trace.h"
+
+#define TRACE_GROUP "mClt"
+#define BUFFER_SIZE 10
+
+M2MTLVDeserializer::M2MTLVDeserializer()
+{
+}
+
+M2MTLVDeserializer::~M2MTLVDeserializer()
+{
+}
+
+bool M2MTLVDeserializer::is_object_instance(uint8_t *tlv)
+{
+    return is_object_instance(tlv, 0);
+}
+
+bool M2MTLVDeserializer::is_resource(uint8_t *tlv)
+{
+    return is_resource(tlv, 0);
+}
+
+bool M2MTLVDeserializer::is_multiple_resource(uint8_t *tlv)
+{
+    return is_multiple_resource(tlv, 0);
+}
+
+bool M2MTLVDeserializer::is_resource_instance(uint8_t *tlv)
+{
+    return is_resource_instance(tlv, 0);
+}
+
+M2MTLVDeserializer::Error M2MTLVDeserializer::deserialise_object_instances(uint8_t* tlv,
+                                                                           uint32_t tlv_size,
+                                                                           M2MObject &object,
+                                                                           M2MTLVDeserializer::Operation operation)
+{
+    M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+    if (is_object_instance(tlv) ) {
+        tr_debug("M2MTLVDeserializer::deserialise_object_instances");
+        error = deserialize_object_instances(tlv, tlv_size, 0, object,operation,false);
+        if(M2MTLVDeserializer::None == error) {
+            error = deserialize_object_instances(tlv, tlv_size, 0, object,operation,true);
+        }
+    } else {
+        tr_debug("M2MTLVDeserializer::deserialise_object_instances ::NotValid");
+        error = M2MTLVDeserializer::NotValid;
+    }
+    return error;
+}
+
+M2MTLVDeserializer::Error M2MTLVDeserializer::deserialize_resources(uint8_t *tlv,
+                                                                    uint32_t tlv_size,
+                                                                    M2MObjectInstance &object_instance,
+                                                                    M2MTLVDeserializer::Operation operation)
+{
+    M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+    if (!is_resource(tlv) && !is_multiple_resource(tlv)) {
+        error = M2MTLVDeserializer::NotValid;
+    } else {
+        error = deserialize_resources(tlv, tlv_size, 0, object_instance, operation,false);
+        if(M2MTLVDeserializer::None == error) {
+            error = deserialize_resources(tlv, tlv_size, 0, object_instance, operation,true);
+        }
+    }
+    return error;
+}
+
+M2MTLVDeserializer::Error M2MTLVDeserializer::deserialize_resource_instances(uint8_t *tlv,
+                                                                             uint32_t tlv_size,
+                                                                             M2MResource &resource,
+                                                                             M2MTLVDeserializer::Operation operation)
+{
+    M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+    if (!is_multiple_resource(tlv)) {
+        error = M2MTLVDeserializer::NotValid;
+    } else {
+        tr_debug("M2MTLVDeserializer::deserialize_resource_instances()");
+        uint8_t offset = 2;
+
+        ((tlv[0] & 0x20) == 0) ? offset : offset++;
+
+        uint8_t length = tlv[0] & 0x18;
+        if(length == 0x08) {
+        offset+= 1;
+        } else if(length == 0x10) {
+        offset+= 2;
+        } else if(length == 0x18) {
+        offset+= 3;
+        }
+
+        tr_debug("M2MTLVDeserializer::deserialize_resource_instances() Offset %d", offset);
+        error = deserialize_resource_instances(tlv, tlv_size, offset, resource, operation,false);
+        if(M2MTLVDeserializer::None == error) {
+            error = deserialize_resource_instances(tlv, tlv_size, offset, resource, operation,true);
+        }
+    }
+    return error;
+}
+
+M2MTLVDeserializer::Error M2MTLVDeserializer::deserialize_object_instances(uint8_t *tlv,
+                                                                           uint32_t tlv_size,
+                                                                           uint32_t offset,
+                                                                           M2MObject &object,
+                                                                           M2MTLVDeserializer::Operation operation,
+                                                                           bool update_value)
+{
+    tr_debug("M2MTLVDeserializer::deserialize_object_instances()");
+    M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+    TypeIdLength *til = TypeIdLength::createTypeIdLength(tlv, offset)->deserialize();
+    offset = til->_offset;
+
+    M2MObjectInstanceList list = object.instances();
+    M2MObjectInstanceList::const_iterator it;
+    it = list.begin();
+
+    if (TYPE_OBJECT_INSTANCE == til->_type) {
+        for (; it!=list.end(); it++) {
+            if((*it)->instance_id() == til->_id) {
+                error = deserialize_resources(tlv, tlv_size, offset, (**it),operation, update_value);
+            }
+        }
+        offset += til->_length;
+
+        if(offset < tlv_size) {
+            error = deserialize_object_instances(tlv, tlv_size, offset, object, operation, update_value);
+        }
+    }
+    delete til;
+    return error;
+}
+
+M2MTLVDeserializer::Error M2MTLVDeserializer::deserialize_resources(uint8_t *tlv,
+                                                                    uint32_t tlv_size,
+                                                                    uint32_t offset,
+                                                                    M2MObjectInstance &object_instance,
+                                                                    M2MTLVDeserializer::Operation operation,
+                                                                    bool update_value)
+{
+    tr_debug("M2MTLVDeserializer::deserialize_resources()");
+    M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+    TypeIdLength *til = TypeIdLength::createTypeIdLength(tlv, offset)->deserialize();
+    offset = til->_offset;
+
+    M2MResourceList list = object_instance.resources();
+    M2MResourceList::const_iterator it;
+    it = list.begin();
+
+    if (TYPE_RESOURCE == til->_type || TYPE_RESOURCE_INSTANCE == til->_type) {
+        bool found = false;
+        for (; it!=list.end(); it++) {
+            if((*it)->name_id() == til->_id){
+                tr_debug("M2MTLVDeserializer::deserialize_resources() - Resource ID %d ", til->_id);
+                found = true;
+                if(update_value) {
+                    if(til->_length > 0) {
+                        tr_debug("M2MTLVDeserializer::deserialize_resources() - Update value");
+                        (*it)->set_value(tlv+offset, til->_length);
+                    } else {
+                        tr_debug("M2MTLVDeserializer::deserialize_resources() - Clear Value");
+                        (*it)->clear_value();
+                    }
+                    break;
+                } else if(0 == ((*it)->operation() & SN_GRS_PUT_ALLOWED)) {
+                    tr_debug("M2MTLVDeserializer::deserialize_resources() - NOT_ALLOWED");
+                    error = M2MTLVDeserializer::NotAllowed;
+                    break;
+                }
+            }
+        }
+        if(!found) {
+            if(M2MTLVDeserializer::Post == operation) {
+                //Create a new Resource
+                String id;
+                id.append_int(til->_id);
+                M2MResource *resource = object_instance.create_dynamic_resource(id,"",M2MResourceInstance::INTEGER,true,false);
+                if(resource) {
+                    resource->set_operation(M2MBase::GET_PUT_POST_DELETE_ALLOWED);
+                }
+            } else if(M2MTLVDeserializer::Put == operation) {
+                error = M2MTLVDeserializer::NotFound;
+            }
+        }
+    } else if (TYPE_MULTIPLE_RESOURCE == til->_type) {
+        for (; it!=list.end(); it++) {
+            if((*it)->supports_multiple_instances()) {
+                error = deserialize_resource_instances(tlv, tlv_size-offset, offset, (**it), object_instance, operation, update_value);
+            }
+        }
+
+    } else {
+        delete til;
+        error = M2MTLVDeserializer::NotValid;
+        return error;
+    }
+    offset += til->_length;
+
+    delete til;
+    if(offset < tlv_size) {
+        error = deserialize_resources(tlv, tlv_size, offset, object_instance, operation, update_value);
+    }
+    return error;
+}
+
+M2MTLVDeserializer::Error M2MTLVDeserializer::deserialize_resource_instances(uint8_t *tlv,
+                                                                             uint32_t tlv_size,
+                                                                             uint32_t offset,
+                                                                             M2MResource &resource,
+                                                                             M2MObjectInstance &object_instance,
+                                                                             M2MTLVDeserializer::Operation operation,
+                                                                             bool update_value)
+{
+    M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+    TypeIdLength *til = TypeIdLength::createTypeIdLength(tlv, offset)->deserialize();
+    offset = til->_offset;
+
+    if (TYPE_MULTIPLE_RESOURCE == til->_type || TYPE_RESOURCE_INSTANCE == til->_type) {
+        M2MResourceInstanceList list = resource.resource_instances();
+        M2MResourceInstanceList::const_iterator it;
+        it = list.begin();
+        bool found = false;
+        for (; it!=list.end(); it++) {
+            if((*it)->instance_id() == til->_id) {
+                found = true;
+                if(update_value) {
+                    if(til->_length > 0) {
+                        (*it)->set_value(tlv+offset, til->_length);
+                    } else {
+                        (*it)->clear_value();
+                    }
+                    break;
+                } else if(0 == ((*it)->operation() & SN_GRS_PUT_ALLOWED)) {
+                    error = M2MTLVDeserializer::NotAllowed;
+                    break;
+                }
+            }
+        }
+        if(!found) {
+            if(M2MTLVDeserializer::Post == operation) {
+                // Create a new Resource Instance
+                M2MResourceInstance *res_instance = object_instance.create_dynamic_resource_instance(resource.name(),"",
+                                                                                                 M2MResourceInstance::INTEGER,
+                                                                                                 true,
+                                                                                                 til->_id);
+                if(res_instance) {
+                    res_instance->set_operation(M2MBase::GET_PUT_POST_DELETE_ALLOWED);
+                }
+            } else if(M2MTLVDeserializer::Put == operation) {
+                error = M2MTLVDeserializer::NotFound;
+            }
+        }
+    } else {
+        delete til;
+        error = M2MTLVDeserializer::NotValid;
+        return error;
+    }
+
+    offset += til->_length;
+
+    delete til;
+    if(offset < tlv_size) {
+        error = deserialize_resource_instances(tlv, tlv_size-offset, offset, resource, object_instance, operation, update_value);
+    }
+    return error;
+}
+
+M2MTLVDeserializer::Error M2MTLVDeserializer::deserialize_resource_instances(uint8_t *tlv,
+                                                                             uint32_t tlv_size,
+                                                                             uint32_t offset,
+                                                                             M2MResource &resource,
+                                                                             M2MTLVDeserializer::Operation operation,
+                                                                             bool update_value)
+{
+    M2MTLVDeserializer::Error error = M2MTLVDeserializer::None;
+    TypeIdLength *til = TypeIdLength::createTypeIdLength(tlv, offset)->deserialize();
+    offset = til->_offset;
+
+    if (TYPE_RESOURCE_INSTANCE == til->_type) {
+        M2MResourceInstanceList list = resource.resource_instances();
+        M2MResourceInstanceList::const_iterator it;
+        it = list.begin();
+        bool found = false;
+        for (; it!=list.end(); it++) {
+            if((*it)->instance_id() == til->_id) {
+                found = true;
+                if(update_value) {
+                    if(til->_length > 0) {
+                    (*it)->set_value(tlv+offset, til->_length);
+                    } else {
+                        (*it)->clear_value();
+                    }
+                    break;
+                } else if(0 == ((*it)->operation() & SN_GRS_PUT_ALLOWED)) {
+                    error = M2MTLVDeserializer::NotAllowed;
+                    break;
+                }
+            }
+        }
+        if(!found) {
+            if(M2MTLVDeserializer::Post == operation) {
+                error = M2MTLVDeserializer::NotAllowed;
+            } else if(M2MTLVDeserializer::Put == operation) {
+                error = M2MTLVDeserializer::NotFound;
+            }
+        }
+    } else {
+        delete til;
+        error = M2MTLVDeserializer::NotValid;
+        return error;
+    }
+
+    offset += til->_length;
+
+    delete til;
+    if(offset < tlv_size) {
+        error = deserialize_resource_instances(tlv, tlv_size-offset, offset, resource, operation, update_value);
+    }
+    return error;
+}
+
+bool M2MTLVDeserializer::is_object_instance(uint8_t *tlv, uint32_t offset)
+{
+    bool ret = false;
+    if (tlv) {
+        uint8_t value = tlv[offset];
+        ret = (TYPE_OBJECT_INSTANCE == (value & TYPE_RESOURCE));
+    }
+    return ret;
+}
+
+uint16_t M2MTLVDeserializer::instance_id(uint8_t *tlv)
+{
+    TypeIdLength *til = TypeIdLength::createTypeIdLength(tlv, 0)->deserialize();
+    uint16_t id = til->_id;
+    delete til;
+    return id;
+}
+
+bool M2MTLVDeserializer::is_resource(uint8_t *tlv, uint32_t offset)
+{
+    bool ret = false;
+    if (tlv) {
+        ret = (TYPE_RESOURCE == (tlv[offset] & TYPE_RESOURCE));
+    }
+    return ret;
+}
+
+bool M2MTLVDeserializer::is_multiple_resource(uint8_t *tlv, uint32_t offset)
+{
+    bool ret = false;
+    if (tlv) {
+        ret = (TYPE_MULTIPLE_RESOURCE == (tlv[offset] & TYPE_RESOURCE));
+    }
+    return ret;
+}
+
+bool M2MTLVDeserializer::is_resource_instance(uint8_t *tlv, uint32_t offset)
+{
+    bool ret = false;
+    if (tlv) {
+        ret = (TYPE_RESOURCE_INSTANCE == (tlv[offset] & TYPE_RESOURCE));
+    }
+    return ret;
+}
+
+TypeIdLength* TypeIdLength::createTypeIdLength(uint8_t *tlv, uint32_t offset)
+{
+    TypeIdLength *til = new TypeIdLength();
+    til->_tlv = tlv;
+    til->_offset = offset;
+    til->_type = tlv[offset] & 0xC0;
+    til->_id = 0;
+    til->_length = 0;
+    return til;
+}
+
+TypeIdLength* TypeIdLength::deserialize()
+{
+    uint32_t idLength = _tlv[_offset] & ID16;
+    uint32_t lengthType = _tlv[_offset] & LENGTH24;
+    if (0 == lengthType) {
+        _length = _tlv[_offset] & 0x07;
+    }
+    _offset++;
+
+    deserialiseID(idLength);
+    deserialiseLength(lengthType);
+
+    return this;
+}
+
+void TypeIdLength::deserialiseID(uint32_t idLength)
+{
+    _id = _tlv[_offset++] & 0xFF;
+    if (ID16 == idLength) {
+        _id = (_id << 8) + (_tlv[_offset++] & 0xFF);
+    }
+}
+
+void TypeIdLength::deserialiseLength(uint32_t lengthType)
+{
+    if (lengthType > 0) {
+        _length = _tlv[_offset++] & 0xFF;
+    }
+    if (lengthType > LENGTH8) {
+        _length = (_length << 8) + (_tlv[_offset++] & 0xFF);
+    }
+    if (lengthType > LENGTH16) {
+        _length = (_length << 8) + (_tlv[_offset++] & 0xFF);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/m2mtlvserializer.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,238 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "include/m2mtlvserializer.h"
+#include "include/nsdllinker.h"
+#include "mbed-client/m2mconstants.h"
+
+#include <stdlib.h>
+
+#define TRACE_GROUP "mClt"
+
+M2MTLVSerializer::M2MTLVSerializer()
+{
+}
+
+M2MTLVSerializer::~M2MTLVSerializer()
+{
+}
+
+uint8_t* M2MTLVSerializer::serialize(M2MObjectInstanceList object_instance_list, uint32_t &size)
+{
+    return serialize_object_instances(object_instance_list, size);
+}
+
+uint8_t* M2MTLVSerializer::serialize(M2MResourceList resource_list, uint32_t &size)
+{
+    bool valid = true;
+    return serialize_resources(resource_list, size,valid);
+}
+
+uint8_t* M2MTLVSerializer::serialize(M2MResource *resource, uint32_t &size)
+{
+    uint8_t* data = NULL;
+    serialize(resource, data, size);
+    return data;
+}
+
+uint8_t* M2MTLVSerializer::serialize_object_instances(M2MObjectInstanceList object_instance_list, uint32_t &size)
+{
+    uint8_t *data = NULL;
+
+    if(!object_instance_list.empty()) {
+        M2MObjectInstanceList::const_iterator it;
+        it = object_instance_list.begin();
+        for (; it!=object_instance_list.end(); it++) {
+            uint16_t id = (*it)->instance_id();
+            serialize(id, *it, data, size);
+        }
+    }
+    return data;
+}
+
+uint8_t* M2MTLVSerializer::serialize_resources(M2MResourceList resource_list, uint32_t &size, bool &valid)
+{
+    uint8_t *data = NULL;
+
+    if(!resource_list.empty()) {
+        M2MResourceList::const_iterator it;
+        it = resource_list.begin();
+        for (; it!=resource_list.end(); it++) {
+            if((*it)->name_id() == -1) {
+                valid = false;
+                break;
+            }
+        }
+        if(valid) {
+            it = resource_list.begin();
+            for (; it!=resource_list.end(); it++) {
+                serialize(*it, data, size);
+            }
+        }
+    }
+    return data;
+}
+
+void M2MTLVSerializer::serialize(uint16_t id, M2MObjectInstance *object_instance, uint8_t *&data, uint32_t &size)
+{
+    uint8_t *resource_data = NULL;
+    uint32_t resource_size = 0;
+
+    bool valid = true;
+    resource_data = serialize_resources(object_instance->resources(),resource_size,valid);
+    if(valid) {
+        serialize_TILV(TYPE_OBJECT_INSTANCE, id, resource_data, resource_size, data, size);
+    }
+    free(resource_data);
+}
+
+bool M2MTLVSerializer::serialize(M2MResource *resource, uint8_t *&data, uint32_t &size)
+{
+    bool success = false;
+    if(resource->name_id() != -1) {
+        success = resource->supports_multiple_instances() ?
+                serialize_multiple_resource(resource, data, size) :
+                serialize_resource(resource, data, size);
+    }
+    return success;
+}
+
+bool M2MTLVSerializer::serialize_resource(M2MResource *resource, uint8_t *&data, uint32_t &size)
+{
+    bool success = false;
+    if(resource->name_id() != -1) {
+        success = true;
+        serialize_TILV(TYPE_RESOURCE, resource->name_id(), resource->value(), resource->value_length(), data, size);
+    }
+    return success;
+}
+
+bool M2MTLVSerializer::serialize_multiple_resource(M2MResource *resource, uint8_t *&data, uint32_t &size)
+{
+    bool success = false;
+    uint8_t *nested_data = NULL;
+    uint32_t nested_data_size = 0;
+
+    M2MResourceInstanceList instance_list = resource->resource_instances();
+    if(!instance_list.empty()) {
+        M2MResourceInstanceList::const_iterator it;
+        it = instance_list.begin();
+        for (; it!=instance_list.end(); it++) {
+            uint16_t id = (*it)->instance_id();
+            serialize_resource_instance(id, (*it), nested_data, nested_data_size);            
+        }
+    }
+    if(resource->name_id() != -1) {
+        success = true;
+        serialize_TILV(TYPE_MULTIPLE_RESOURCE, resource->name_id(), nested_data, nested_data_size, data, size);
+    }
+
+    free(nested_data);
+    nested_data = NULL;
+    return success;
+}
+
+void M2MTLVSerializer::serialize_resource_instance(uint16_t id, M2MResourceInstance *resource, uint8_t *&data, uint32_t &size)
+{
+    serialize_TILV(TYPE_RESOURCE_INSTANCE, id, resource->value(), resource->value_length(), data, size);
+}
+
+void M2MTLVSerializer::serialize_TILV(uint8_t type, uint16_t id, uint8_t *value, uint32_t value_length, uint8_t *&data, uint32_t &size)
+{
+    uint8_t *tlv = 0;
+    uint32_t type_length = 1;
+    type += id < 256 ? 0 : ID16;
+    type += value_length < 8 ? value_length :
+            value_length < 256 ? LENGTH8 :
+            value_length < 65536 ? LENGTH16 : LENGTH24;
+    uint8_t *tlv_type = (uint8_t*)malloc(type_length+1);
+    memset(tlv_type,0,type_length+1);
+    *tlv_type = type & 0xFF;
+
+    uint32_t id_size = 0;
+    uint8_t* id_ptr = serialize_id(id, id_size);
+
+    uint32_t length_size = 0;
+    uint8_t* length_ptr = serialize_length(value_length, length_size);
+
+    tlv = (uint8_t*)malloc(size + type_length + id_size + length_size + value_length+1);
+    memset(tlv,0,size + type_length + id_size + length_size + value_length+1);
+    if(data) {
+        memcpy(tlv, data, size);
+    }
+    memcpy(tlv+size, tlv_type, type_length);
+    memcpy(tlv+size+type_length, id_ptr, id_size);
+    memcpy(tlv+size+type_length+id_size, length_ptr, length_size);
+    memcpy(tlv+size+type_length+id_size+length_size, value, value_length);
+
+    free(tlv_type) ;
+    free(length_ptr);
+    free(id_ptr);
+    free(data);
+
+    data = tlv;
+    size += type_length + id_size + length_size + value_length;
+}
+
+uint8_t* M2MTLVSerializer::serialize_id(uint16_t id, uint32_t &size)
+{
+    uint32_t id_size = id > 255 ? 2 : 1;
+    uint8_t *id_ptr = (uint8_t*)malloc(id_size);
+    memset(id_ptr, 0 , id_size);
+    size += id_size;
+    if(id > 255) {
+        *id_ptr = (id & 0xFF00) >> 8;
+        id_ptr++;
+        *id_ptr = id & 0xFF;
+        id_ptr--;
+    } else {
+        *id_ptr = id & 0xFF;
+    }
+    return id_ptr;
+}
+
+uint8_t* M2MTLVSerializer::serialize_length(uint32_t length, uint32_t &size)
+{
+    uint8_t *length_ptr = 0;
+    uint32_t length_size = 0;
+    if (length > 65535) {
+        length_size = 3;
+        length_ptr = (uint8_t*)malloc(length_size+1);
+        memset(length_ptr,0,length_size+1);
+        *length_ptr = (length & 0xFF0000) >> 16;
+        length_ptr++;
+        *length_ptr = (length & 0xFF00) >> 8;
+        length_ptr++;
+        *length_ptr = length & 0xFF;
+        length_ptr--;
+        length_ptr--;
+    } else if (length > 255) {
+        length_size = 2;
+        length_ptr = (uint8_t*)malloc(length_size+1);
+        memset(length_ptr,0,length_size+1);
+        *length_ptr = (length & 0xFF00) >> 8;
+        length_ptr++;
+        *length_ptr = length & 0xFF;
+        length_ptr--;
+    } else if (length > 7) {
+        length_size = 1;
+        length_ptr = (uint8_t*)malloc(length_size+1);
+        memset(length_ptr,0,length_size+1);
+        *length_ptr = length & 0xFF;
+    }
+    size += length_size;
+    return length_ptr;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/nsdlaccesshelper.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "include/nsdlaccesshelper.h"
+#include "include/m2mnsdlinterface.h"
+
+#include <stdlib.h>
+
+M2MNsdlInterfaceList __nsdl_interface_list;
+
+// callback function for NSDL library to call into
+
+M2MConnectionHandler *__connection_handler = NULL;
+
+
+uint8_t __nsdl_c_callback(struct nsdl_s *nsdl_handle,
+                          sn_coap_hdr_s *received_coap_ptr,
+                          sn_nsdl_addr_s *address,
+                          sn_nsdl_capab_e nsdl_capab)
+{
+    uint8_t status = 0;
+    M2MNsdlInterface  *interface = get_interface(nsdl_handle);
+    if(interface) {
+        status = interface->resource_callback(nsdl_handle,received_coap_ptr,
+                                                     address, nsdl_capab);
+        // Payload freeing must be done in app level if blockwise message
+        if (received_coap_ptr->coap_status == COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVED) {
+            free(received_coap_ptr->payload_ptr);
+            received_coap_ptr->payload_ptr = NULL;
+        }
+    }
+    return status;
+}
+
+void* __nsdl_c_memory_alloc(uint16_t size)
+{
+    if(size)
+        return malloc(size);
+    else
+        return 0;
+}
+
+void __nsdl_c_memory_free(void *ptr)
+{
+    if(ptr)
+        free(ptr);
+}
+
+uint8_t __nsdl_c_send_to_server(struct nsdl_s * nsdl_handle,
+                                sn_nsdl_capab_e protocol,
+                                uint8_t *data_ptr,
+                                uint16_t data_len,
+                                sn_nsdl_addr_s *address_ptr)
+{
+    uint8_t status = 0;
+    M2MNsdlInterface  *interface = get_interface(nsdl_handle);
+    if(interface) {
+        status = interface->send_to_server_callback(nsdl_handle,
+                                                           protocol, data_ptr,
+                                                           data_len, address_ptr);
+    }
+    return status;
+}
+
+uint8_t __nsdl_c_received_from_server(struct nsdl_s * nsdl_handle,
+                                      sn_coap_hdr_s *coap_header,
+                                      sn_nsdl_addr_s *address_ptr)
+{
+    uint8_t status = 0;
+    M2MNsdlInterface  *interface = get_interface(nsdl_handle);
+    if(interface) {
+        status = interface->received_from_server_callback(nsdl_handle,
+                                                                 coap_header,
+                                                                 address_ptr);
+        // Payload freeing must be done in app level if blockwise message
+        if (coap_header &&
+                coap_header->options_list_ptr &&
+                coap_header->options_list_ptr->block1 != -1) {
+            free(coap_header->payload_ptr);
+            coap_header->payload_ptr = NULL;
+        }
+    }
+    return status;
+}
+
+void* __socket_malloc( void * context, size_t size)
+{
+    (void) context;
+    return malloc(size);
+}
+
+void __socket_free(void * context, void * ptr)
+{
+    (void) context;
+    free(ptr);
+}
+
+M2MNsdlInterface* get_interface(struct nsdl_s* nsdl_handle)
+{
+    M2MNsdlInterfaceList::const_iterator it;
+    it = __nsdl_interface_list.begin();
+    M2MNsdlInterface* obj = NULL;
+    if (nsdl_handle) {
+        for (; it!=__nsdl_interface_list.end(); it++) {
+            if ((*it)->get_nsdl_handle() == nsdl_handle) {
+                obj = *it;
+                break;
+            }
+        }
+    }
+    return obj;
+}
+
+void __mutex_claim()
+{
+    if(__connection_handler) {
+        __connection_handler->claim_mutex();
+    }
+}
+
+void __mutex_release()
+{
+    if(__connection_handler) {
+        __connection_handler->release_mutex();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/sources.mk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,23 @@
+SRCS += \
+	source/m2mbase.cpp \
+	source/m2mdevice.cpp \
+	source/m2mfirmware.cpp \
+	source/m2minterfacefactory.cpp \
+	source/m2minterfaceimpl.cpp \
+	source/m2mnsdlinterface.cpp \
+	source/m2mobject.cpp \
+	source/m2mobjectinstance.cpp \
+	source/m2mreporthandler.cpp \
+	source/m2mresource.cpp \
+	source/m2mresourceinstance.cpp \
+	source/m2msecurity.cpp \
+	source/m2mserver.cpp \
+	source/m2mstring.cpp \
+	source/m2mtlvdeserializer.cpp \
+	source/m2mtlvserializer.cpp \
+	source/nsdlaccesshelper.cpp \
+	source/m2mfirmware.cpp \
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,108 @@
+if(TARGET_LIKE_X86_LINUX_NATIVE_COVERAGE)
+SET(CMAKE_CXX_FLAGS "")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage -Wall -Wextra -include /usr/include/CppUTest/MemoryLeakDetectorMallocMacros.h -include /usr/include/CppUTest/MemoryLeakDetectorNewMacros.h -D__thumb2__ -DMBED_CLIENT_C_NEW_API -w")
+include_directories($ENV{CPPUTEST_HOME}/include)
+link_directories($ENV{CPPUTEST_HOME}/lib) 
+MACRO(SUBDIRLIST result curdir)
+  FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
+  SET(dirlist "")
+  FOREACH(child ${children})
+    IF(IS_DIRECTORY ${curdir}/${child})
+      if(EXISTS "${curdir}/${child}/CMakeLists.txt")
+        LIST(APPEND dirlist ${curdir}/${child})
+      endif()
+    ENDIF()
+  ENDFOREACH()
+  SET(${result} ${dirlist})
+ENDMACRO()
+
+SUBDIRLIST(SUBDIRS ${CMAKE_CURRENT_SOURCE_DIR}/mbedclient/utest)
+
+FOREACH(subdir ${SUBDIRS})
+    ADD_SUBDIRECTORY(${subdir})
+ENDFOREACH()
+
+endif()
+
+if(TARGET_LIKE_LINUX AND NOT TARGET_LIKE_X86_LINUX_NATIVE_COVERAGE)
+add_executable(mbed-client-test-mbedclient_linux 
+        "mbedclient_linux/main.cpp"
+)
+target_link_libraries(mbed-client-test-mbedclient_linux
+    mbed-client-c
+    mbed-client-linux
+    mbed-client
+)
+#add_test(mbed-client-test-mbedclient_linux mbed-client-test-mbedclient_linux)
+add_dependencies(all_tests mbed-client-test-mbedclient_linux)
+
+add_executable(mbed-client-test-helloworld-mbedclient 
+        "helloworld-mbedclient/main.cpp"
+        "helloworld-mbedclient/mbedclient.cpp"
+        "helloworld-mbedclient/to_be_ported.c"
+)
+target_link_libraries(mbed-client-test-helloworld-mbedclient
+    mbed-client-c
+    mbed-client-linux
+    mbed-client
+)
+#add_test(mbed-client-test-helloworld-mbedclient mbed-client-test-helloworld-mbedclient)
+add_dependencies(all_tests mbed-client-test-helloworld-mbedclient)
+
+endif()
+
+if(TARGET_LIKE_MBED)
+
+add_executable(mbed-client-test-mbedclient-smokeTest EXCLUDE_FROM_ALL
+        "mbedclient-smokeTest/main.cpp"
+        "mbedclient-smokeTest/testconfig.cpp"
+        "mbedclient-smokeTest/testconfig.h"
+)
+target_link_libraries(mbed-client-test-mbedclient-smokeTest
+    mbed-client-c
+    mbed-client-mbed-os
+    mbed-client
+)
+
+#add_test(mbed-client-test-mbedclient-smokeTest mbed-client-test-mbedclient-smokeTest)
+add_dependencies(all_tests mbed-client-test-mbedclient-smokeTest)
+
+# if the target has defined a post-processing step, perform it:
+if(YOTTA_POSTPROCESS_COMMAND)
+    string(REPLACE YOTTA_CURRENT_EXE_NAME "mbed-client-test-mbedclient-smokeTest" LOCAL_POSTPROCESS_COMMAND "${YOTTA_POSTPROCESS_COMMAND}")
+    separate_arguments(LOCAL_POSTPROCESS_COMMAND_SEPARATED UNIX_COMMAND ${LOCAL_POSTPROCESS_COMMAND})
+    add_custom_command(
+        TARGET mbed-client-test-mbedclient-smokeTest
+        POST_BUILD
+        COMMAND ${LOCAL_POSTPROCESS_COMMAND_SEPARATED}
+    )
+endif()
+
+add_executable(mbed-client-test-helloworld-mbedclient EXCLUDE_FROM_ALL
+        "helloworld-mbedclient/main.cpp"
+        "helloworld-mbedclient/mbedclient.cpp"
+        "helloworld-mbedclient/to_be_ported.c"
+)
+target_link_libraries(mbed-client-test-helloworld-mbedclient
+    mbed-client-c
+    mbed-client-mbed-os
+    mbed-client
+)
+# if the target has defined a post-processing step, perform it:
+if(YOTTA_POSTPROCESS_COMMAND)
+    string(REPLACE YOTTA_CURRENT_EXE_NAME "mbed-client-test-helloworld-mbedclient" LOCAL_POSTPROCESS_COMMAND "${YOTTA_POSTPROCESS_COMMAND}")
+    separate_arguments(LOCAL_POSTPROCESS_COMMAND_SEPARATED UNIX_COMMAND ${LOCAL_POSTPROCESS_COMMAND})
+    add_custom_command(
+        TARGET mbed-client-test-helloworld-mbedclient
+        POST_BUILD
+        COMMAND ${LOCAL_POSTPROCESS_COMMAND_SEPARATED}
+    )
+endif()
+
+#add_test(mbed-client-test-helloworld-mbedclient mbed-client-test-helloworld-mbedclient)
+add_dependencies(all_tests mbed-client-test-helloworld-mbedclient)
+
+endif()
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/helloworld-mbedclient/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,23 @@
+PLATFORM= 
+OS = LINUX
+TARGET	= helloworld_mbedclient
+OBJECTS = main.o mbedclient.o
+CFLAGS	= -std=c++11 -Wall -D_REENTRANT -D$(OS) -I ../../lwm2m-client \
+	  -I ../../source/include -I ../../../../libService/libService \
+  	  -I ../../ -I ../../../ -DTARGET_LIKE_LINUX -DHAVE_DEBUG
+
+LDFLAGS = -D_REENTRANT -L../../ -lmbedclient_gcc -L ../../../../nsdl-c -lnsdl_gcc \
+			-L ../../../../libService -lservice_gcc -lpthread\
+			-L../../../../mbedtls/library -lmbedtls -lmbedcrypto -lmbedx509
+
+all: $(TARGET) 
+
+$(TARGET): $(OBJECTS)
+	$(PLATFORM)g++ -g -o $(TARGET) $(OBJECTS) $(LDFLAGS)
+	
+.cpp.o:
+	$(PLATFORM)g++ -c -g -O2 $(CFLAGS) $< 
+	
+clean:
+	rm -f $(TARGET) $(OBJECTS)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/helloworld-mbedclient/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,446 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbedclient.h"
+
+#ifdef TARGET_LIKE_LINUX
+#include <unistd.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <pthread.h>
+#include <signal.h> /* For SIGIGN and SIGINT */
+#include <time.h>
+#else
+#include "sockets/UDPSocket.h"
+#ifdef SIXLOWPAN_INTERFACE
+#include "atmel-rf-driver/driverRFPhy.h"    // rf_device_register
+#include "mbed-mesh-api/Mesh6LoWPAN_ND.h"
+#endif
+#include "EthernetInterface.h"
+#include "test_env.h"
+// TODO: Remove when yotta supports init.
+#include "lwipv4_init.h"
+using namespace mbed::util;
+#endif
+
+#include "mbed-client/m2minterfacefactory.h"
+#include "mbed-client/m2mdevice.h"
+#include "mbed-client/m2minterfaceobserver.h"
+#include "mbed-client/m2minterface.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+#include "mbed-trace/mbed_trace.h"
+
+#ifdef TARGET_LIKE_LINUX
+static void ctrl_c_handle_function(void);
+typedef void (*signalhandler_t)(int); /* Function pointer type for ctrl-c */
+#else
+#if defined(TARGET_K64F)
+#define OBS_BUTTON SW2
+#define UNREG_BUTTON SW3
+#endif
+#endif
+
+bool _have_secure_conn = false;
+
+const unsigned char psk[] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36};
+const size_t psk_len = sizeof( psk );
+const unsigned char psk_identity[] = {0x0F,0x0F};
+const size_t psk_identity_len = sizeof( psk_identity );
+
+const uint8_t server_cert[] = "-----BEGIN CERTIFICATE-----\r\n"
+"MIIBmDCCAT6gAwIBAgIEVUCA0jAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJGSTEN\r\n"
+"MAsGA1UEBwwET3VsdTEMMAoGA1UECgwDQVJNMQwwCgYDVQQLDANJb1QxETAPBgNV\r\n"
+"BAMMCEFSTSBtYmVkMB4XDTE1MDQyOTA2NTc0OFoXDTE4MDQyOTA2NTc0OFowSzEL\r\n"
+"MAkGA1UEBhMCRkkxDTALBgNVBAcMBE91bHUxDDAKBgNVBAoMA0FSTTEMMAoGA1UE\r\n"
+"CwwDSW9UMREwDwYDVQQDDAhBUk0gbWJlZDBZMBMGByqGSM49AgEGCCqGSM49AwEH\r\n"
+"A0IABLuAyLSk0mA3awgFR5mw2RHth47tRUO44q/RdzFZnLsAsd18Esxd5LCpcT9w\r\n"
+"0tvNfBv4xJxGw0wcYrPDDb8/rjujEDAOMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0E\r\n"
+"AwIDSAAwRQIhAPAonEAkwixlJiyYRQQWpXtkMZax+VlEiS201BG0PpAzAiBh2RsD\r\n"
+"NxLKWwf4O7D6JasGBYf9+ZLwl0iaRjTjytO+Kw==\r\n"
+"-----END CERTIFICATE-----\r\n";
+
+const uint8_t cert[] = "-----BEGIN CERTIFICATE-----\r\n"
+"MIICTDCCAbWgAwIBAgIJAKI3S+LGklSGMA0GCSqGSIb3DQEBCwUAMD8xCzAJBgNV\r\n"
+"BAYTAkZJMRMwEQYDVQQIDApTb21lLVN0YXRlMQ0wCwYDVQQHDARPdWx1MQwwCgYD\r\n"
+"VQQKDANBUk0wHhcNMTUwNjExMTI0NTU1WhcNMTYwNjEwMTI0NTU1WjA/MQswCQYD\r\n"
+"VQQGEwJGSTETMBEGA1UECAwKU29tZS1TdGF0ZTENMAsGA1UEBwwET3VsdTEMMAoG\r\n"
+"A1UECgwDQVJNMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBt8ag12ILm2pn\r\n"
+"RHUc2yMBXpdzspDwVV3VDaNTRXypVUOq/nxJc6zr8yG/Pvga2/XVijWQDLABHVhV\r\n"
+"PoeulzXVSEHRR2bR2lhqulLzdUzPYJ+yJd4+082akoxdzoom8ms2LFlgiXO7lyBg\r\n"
+"1t74xjEQapCkr7Tdl2pD9OTUrcfoEwIDAQABo1AwTjAdBgNVHQ4EFgQUHK0O4iK7\r\n"
+"Rv8AsxAqRDlY3TSHWtUwHwYDVR0jBBgwFoAUHK0O4iK7Rv8AsxAqRDlY3TSHWtUw\r\n"
+"DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQAPVLihYN65DEeYdf7gDAdP\r\n"
+"MNH5RxsQlHdktQkYWcUewe3hvOf8yZUBbmO5OeEQmy5Ca2H1QhUuw+kWHo1l/K9g\r\n"
+"DpR1xoDACeycBd/6tAHfaFzTEEDC9Ug839EAHDrbI4ihrPEbP6hyRIaUIM4IojXf\r\n"
+"zuqwOcobS3idv8a9Npuohw==\r\n"
+"-----END CERTIFICATE-----\r\n";
+
+const uint8_t key[] = "-----BEGIN PRIVATE KEY-----\r\n"
+"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMG3xqDXYgubamdE\r\n"
+"dRzbIwFel3OykPBVXdUNo1NFfKlVQ6r+fElzrOvzIb8++Brb9dWKNZAMsAEdWFU+\r\n"
+"h66XNdVIQdFHZtHaWGq6UvN1TM9gn7Il3j7TzZqSjF3OiibyazYsWWCJc7uXIGDW\r\n"
+"3vjGMRBqkKSvtN2XakP05NStx+gTAgMBAAECgYEAlRimNxsu6jIXJh4paSk8ewxb\r\n"
+"0v+n0GJT0uwpPakotofaihxOepYejIfX/IMxoDKVtmImsZUiTelRGGMFORpGomS7\r\n"
+"3Pb9awfn1yWiYja9MF7+pgFtXj6LxcB5rcxrP8s9rCs+kEq8yl/khGXmlwlpacUm\r\n"
+"Pdg1rEHriykk/5dlyKkCQQD9zpgQKN87bQNOVSgFSNsrwCjEN2MvVUC6ycqVYqQd\r\n"
+"oQZrO2lJuf57Jn7kRKJgfqqImwLYaohn5A9gKiqszo+fAkEAw2REr8L9aLoRPe5Q\r\n"
+"4+lYCmNmxJjBbJoRviSlxx+p5dxK+8H4J+bnFUWzORFJP0+Bjhii2UHGBoMjuP2s\r\n"
+"e8xDDQJADm0IrZp1Hb6TeodSkAJVGsaASq7PP2h8FmHT1uvVYi293Khy0pL0yPEm\r\n"
+"MzlHdW6dqMgOwFhFyonm6dNbu5i+BwJBALSPKfIKDMcEev5yBgo3Dga7iLJQPx4u\r\n"
+"2gqOLyvtlME3a4tu2fV1qUG9ITuxP7DjteMr3QFLiMVn1lETCpt0TNkCQGIvyjdV\r\n"
+"RzYnzLDMulXCsuRBjs0C75KoZrcPPQ416SZFtYASsOl3P0Ih5jgt/1aPmth3Yson\r\n"
+"GdnBOWyKzadLmz8=\r\n"
+"-----END PRIVATE KEY-----\r\n";
+
+const size_t server_cert_len = sizeof( server_cert );
+const size_t cert_len = sizeof( cert );
+const size_t key_len = sizeof( key );
+
+#ifdef TARGET_LIKE_LINUX
+
+#if defined (BOOTSTRAP_ENABLED)
+void* wait_for_bootstrap(void* arg) {
+    MbedClient *client;
+    client = (MbedClient*) arg;
+    if(client->bootstrap_successful()) {
+        printf("Registering endpoint\n");
+
+        // Create LWM2M device object specifying device resources
+        // as per OMA LWM2M specification.
+        M2MDevice* device_object = client->create_device_object();
+
+        M2MObject* object = client->create_generic_object();
+
+        // Add all the objects that you would like to register
+        // into the list and pass the list for register API.
+        M2MObjectList object_list;
+        object_list.push_back(device_object);
+        object_list.push_back(object);
+
+        // Issue register command.
+        client->test_register(object_list);
+    }
+    return NULL;
+}
+#endif
+
+void* wait_for_unregister(void* arg) {
+    MbedClient *client;
+    client = (MbedClient*) arg;
+    if(client->unregister_successful()) {
+        printf("Unregistered done --> exiting\n");
+        exit(1);
+    }
+    return NULL;
+}
+
+void* send_observation(void* arg) {
+    MbedClient *client;
+    client = (MbedClient*) arg;
+    static uint8_t counter = 0;
+    while(1) {
+        sleep(1);
+        if(counter >= 10 &&
+           client->register_successful()) {
+            printf("Sending observation\n");
+            client->update_resource();
+            counter = 0;
+        }
+        else
+            counter++;
+    }
+    return NULL;
+}
+
+static MbedClient *m2mclient = NULL;
+
+static void ctrl_c_handle_function(void)
+{
+    if(m2mclient && m2mclient->register_successful()) {
+        printf("Unregistering endpoint\n");
+        m2mclient->test_unregister();
+    }
+}
+#else
+#ifdef SIXLOWPAN_INTERFACE
+volatile uint8_t mesh_network_state = MESH_DISCONNECTED;
+
+void mesh_network_callback(mesh_connection_status_t mesh_state)
+{
+    tr_info("Network established");
+    mesh_network_state = mesh_state;
+}
+#endif
+#endif
+
+void trace_printer(const char* str)
+{
+  printf("%s\r\n", str);
+}
+
+#ifdef TARGET_LIKE_MBED
+void app_start(int /*argc*/, char* /*argv*/[]) {
+#else
+int main() {
+#endif
+
+    // Instantiate the class which implements
+    // mbed Client API
+    MbedClient mbed_client;
+
+#ifdef TARGET_LIKE_LINUX
+    pthread_t unregister_thread;
+    pthread_t observation_thread;
+
+    m2mclient = &mbed_client;
+
+    mbed_trace_init();
+    mbed_trace_print_function_set( trace_printer );
+    mbed_trace_config_set(TRACE_MODE_COLOR|TRACE_ACTIVE_LEVEL_DEBUG|TRACE_CARRIAGE_RETURN);
+
+    signal(SIGINT, (signalhandler_t)ctrl_c_handle_function);
+
+#else
+    // This sets up the network interface configuration which will be used
+    // by LWM2M Client API to communicate with mbed Device server.
+
+#ifdef SIXLOWPAN_INTERFACE
+
+    Mesh6LoWPAN_ND *mesh_api = Mesh6LoWPAN_ND::getInstance();
+    int8_t status;
+
+    status = mesh_api->init(rf_device_register(), mesh_network_callback);
+    if (status != MESH_ERROR_NONE)
+    {
+        tr_error("Mesh network initialization failed %d!", status);
+        return 1;
+    }
+
+    status = mesh_api->connect();
+    if (status != MESH_ERROR_NONE)
+    {
+        tr_error("Can't connect to mesh network!");
+        return 1;
+    }
+
+    do
+    {
+        mesh_api->processEvent();
+    } while(mesh_network_state != MESH_CONNECTED);
+
+
+#else
+    EthernetInterface eth;
+    eth.init(); //Use DHCP
+    eth.connect();
+
+    lwipv4_socket_init();
+#endif
+
+    // Set up Hardware interrupt button.
+    InterruptIn obs_button(OBS_BUTTON);
+    InterruptIn unreg_button(UNREG_BUTTON);
+
+    // On press of SW3 button on K64F board, example application
+    // will call unregister API towards mbed Device Server
+    unreg_button.fall(&mbed_client,&MbedClient::test_unregister);
+
+    // On press of SW2 button on K64F board, example application
+    // will send observation towards mbed Device Server
+    obs_button.fall(&mbed_client,&MbedClient::update_resource);
+
+
+#endif
+
+    // Create LWM2M Client API interface to manage bootstrap,
+    // register and unregister
+
+    //These 2 are defining the secure connection usage
+    M2MSecurity::SecurityModeType mode = M2MSecurity::NoSecurity;
+    _have_secure_conn = (mode == M2MSecurity::Certificate || mode == M2MSecurity::Psk);
+    //    SecurityNotSet,
+    //    Psk = 0,
+    //    Certificate = 2,
+    //    NoSecurity = 3
+
+    mbed_client.create_interface();
+
+#ifdef TARGET_LIKE_LINUX
+
+#if defined (BOOTSTRAP_ENABLED)
+    pthread_t bootstrap_thread;
+    // Create LWM2M bootstrap object specifying bootstrap server
+    // information.
+    M2MSecurity* security_object = mbed_client.create_bootstrap_object(_have_secure_conn);
+    // Issue bootstrap command.
+    mbed_client.test_bootstrap(security_object);
+
+    pthread_create(&bootstrap_thread, NULL, &wait_for_bootstrap, (void*) &mbed_client);
+    pthread_join(bootstrap_thread, NULL);
+
+#else
+    M2MSecurity *register_object = mbed_client.create_register_object(_have_secure_conn);
+
+    if( mode == M2MSecurity::Certificate ){
+        register_object->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::Certificate);
+        register_object->set_resource_value(M2MSecurity::ServerPublicKey,server_cert,server_cert_len);
+        register_object->set_resource_value(M2MSecurity::PublicKey,cert,cert_len);
+        register_object->set_resource_value(M2MSecurity::Secretkey,key,key_len);
+    }else if( mode == M2MSecurity::Psk ){
+        register_object->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::Psk);
+        register_object->set_resource_value(M2MSecurity::ServerPublicKey,psk_identity,psk_identity_len);
+        register_object->set_resource_value(M2MSecurity::PublicKey,psk_identity,psk_identity_len);
+        register_object->set_resource_value(M2MSecurity::Secretkey,psk,psk_len);
+    }else{
+        register_object->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity);
+    }
+
+    mbed_client.set_register_object(register_object);
+    M2MDevice* device_object = mbed_client.create_device_object();
+
+    M2MObject* object = mbed_client.create_generic_object();
+
+    M2MObjectList object_list;
+    object_list.push_back(device_object);
+    object_list.push_back(object);
+
+    mbed_client.test_register(object_list);
+#endif
+
+    pthread_create(&observation_thread, NULL, &send_observation, (void*) &mbed_client);
+    pthread_create(&unregister_thread, NULL, &wait_for_unregister, (void*) &mbed_client);
+    pthread_join(unregister_thread, NULL);
+
+#else
+
+#if defined (BOOTSTRAP_ENABLED)
+    // Create LWM2M bootstrap object specifying bootstrap server
+    // information.
+    M2MSecurity* security_object = mbed_client.create_bootstrap_object(_have_secure_conn);
+
+    // Issue bootstrap command.
+    mbed_client.test_bootstrap(security_object);
+
+    // Wait till the bootstrap callback is called successfully.
+    // Callback comes in bootstrap_done()
+#ifdef SIXLOWPAN_INTERFACE
+    /* wait network to be established */
+    do {
+        mesh_interface_run();
+    } while(!mbed_client.bootstrap_successful());
+#else
+    while (!mbed_client.bootstrap_successful()) { __WFI(); }
+#endif
+
+#else
+
+    M2MSecurity *register_object = mbed_client.create_register_object(_have_secure_conn);
+
+    if( mode == M2MSecurity::Certificate ){
+        register_object->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::Certificate);
+        register_object->set_resource_value(M2MSecurity::ServerPublicKey,server_cert,server_cert_len);
+        register_object->set_resource_value(M2MSecurity::PublicKey,cert,cert_len);
+        register_object->set_resource_value(M2MSecurity::Secretkey,key,key_len);
+    }else if( mode == M2MSecurity::Psk ){
+        register_object->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::Psk);
+        register_object->set_resource_value(M2MSecurity::ServerPublicKey,psk_identity,psk_identity_len);
+        register_object->set_resource_value(M2MSecurity::PublicKey,psk_identity,psk_identity_len);
+        register_object->set_resource_value(M2MSecurity::Secretkey,psk,psk_len);
+    }else{
+        register_object->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity);
+    }
+
+    mbed_client.set_register_object(register_object);
+
+#endif
+
+    // Create LWM2M device object specifying device resources
+    // as per OMA LWM2M specification.
+    M2MDevice* device_object = mbed_client.create_device_object();
+
+    M2MObject* object = mbed_client.create_generic_object();
+
+    // Add all the objects that you would like to register
+    // into the list and pass the list for register API.
+    M2MObjectList object_list;
+    object_list.push_back(device_object);
+    object_list.push_back(object);
+
+    // Issue register command.
+
+    FunctionPointer1<void, M2MObjectList> fp(&mbed_client, &MbedClient::test_register);
+    minar::Scheduler::postCallback(fp.bind(object_list));
+
+    minar::Scheduler::start();
+
+    // Wait till the register callback is called successfully.
+    // Callback comes in object_registered()
+#ifdef SIXLOWPAN_INTERFACE
+    /* wait network to be established */
+    do {
+        mesh_api->processEvent();
+    } while(!mbed_client.register_successful());
+#endif
+
+    // Wait for the unregister successful callback,
+    // Callback comes in object_unregsitered(), this will be
+    // waiting for user to press SW2 button on K64F board.
+#ifdef SIXLOWPAN_INTERFACE
+    /* wait network to be established */
+    do {
+        mesh_api->processEvent();
+    } while(!mbed_client.unregister_successful());
+#endif
+
+
+#if defined(BOOTSTRAP_ENABLED)
+    // This will turn on the LED on the board specifying that
+    // the application has run successfully.
+    notify_completion(mbed_client.unregister_successful() &&
+                      mbed_client.register_successful() &&
+                      mbed_client.bootstrap_successful());
+
+    // Delete security object created for bootstrapping
+    if(security_object) {
+        delete security_object;
+    }
+
+#else
+
+    // Disconnect the connect and teardown the network interface
+#ifdef SIXLOWPAN_INTERFACE
+    mesh_api->disconnect();
+#else
+    eth.disconnect();
+#endif
+#endif //BOOTSTRAP_ENABLED
+
+    // Delete device object created for registering device
+    // resources.
+    if(device_object) {
+        M2MDevice::delete_instance();
+    }
+    if(object) {
+        delete object;
+    }
+
+#endif //TARGET_LIKE_LINUX
+
+#ifndef TARGET_LIKE_MBED
+return 0;
+#endif
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/helloworld-mbedclient/mbedclient.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,336 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbedclient.h"
+
+#include "mbed-client/m2minterfacefactory.h"
+#include "mbed-client/m2mdevice.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+
+#ifdef TARGET_LIKE_MBED
+#include "minar/minar.h"
+#include "test_env.h"
+#endif
+
+#include <time.h>
+#include <stdio.h>
+
+// Enter your mbed Device Server's IPv4 address and Port number in
+// mentioned format like 192.168.0.1:5693
+const String &BOOTSTRAP_SERVER_ADDRESS = "coap://10.45.3.10:5693";
+const String &BOOTSTRAP_SERVER_DTLS_ADDRESS = "coap://10.45.3.10:5694";
+
+#ifdef SIXLOWPAN_INTERFACE
+const String &MBED_SERVER_ADDRESS = "coap://FD00:FF1:CE0B:A5E1:1068:AF13:9B61:D557:5683";
+const String &MBED_SERVER_DTLS_ADDRESS = "coap://FD00:FF1:CE0B:A5E1:1068:AF13:9B61:D557:5684";
+#else
+const String &MBED_SERVER_ADDRESS = "coap://10.45.3.10:5683";
+//const String &MBED_SERVER_ADDRESS = "coap://10.45.0.152:5683";
+const String &MBED_SERVER_DTLS_ADDRESS = "coap://10.45.3.10:5684";
+#endif
+const String CLIENT_NAME = "secure-client";
+
+const String &MANUFACTURER = "ARM";
+const String &TYPE = "type";
+const String &MODEL_NUMBER = "2015";
+const String &SERIAL_NUMBER = "12345";
+const uint8_t STATIC_VALUE[] = "Static value";
+
+#ifdef TARGET_LIKE_LINUX
+#include <unistd.h>
+#else
+
+#endif
+
+MbedClient::MbedClient()
+#ifndef TARGET_LIKE_LINUX
+:_led(LED3)
+#endif
+{
+    _security = NULL;
+    _interface = NULL;
+    _register_security = NULL;
+    _device = NULL;
+    _object = NULL;
+    _bootstrapped = false;
+    _error = false;
+    _registered = false;
+    _unregistered = false;
+    _registration_updated = false;
+    _value = 0;
+}
+
+MbedClient::~MbedClient() {
+    if(_security) {
+        delete _security;
+    }
+    if(_register_security){
+        delete _register_security;
+    }
+    if(_device) {
+        M2MDevice::delete_instance();
+    }
+    if(_object) {
+        delete _object;
+    }
+    if(_interface) {
+        delete _interface;
+    }
+}
+
+bool MbedClient::create_interface() {
+
+    M2MInterface::NetworkStack stack = M2MInterface::LwIP_IPv4;
+    #ifdef SIXLOWPAN_INTERFACE
+            stack = M2MInterface::Nanostack_IPv6;
+    #endif
+
+    /* From http://www.iana.org/assignments/port-numbers:
+       "The Dynamic and/or Private Ports are those from 49152 through 65535" */
+    srand(time(NULL));
+    uint16_t port = (rand() % (65535-49152)) + 49152;
+
+    _interface = M2MInterfaceFactory::create_interface(*this,
+                                              CLIENT_NAME,
+                                              "test",
+                                              60,
+                                              port,
+                                              "",
+                                              M2MInterface::UDP,
+                                              stack,
+                                              "");
+
+    return (_interface == NULL) ? false : true;
+}
+
+bool MbedClient::bootstrap_successful() {
+#ifdef TARGET_LIKE_LINUX
+    while(!_bootstrapped && !_error) {
+        sleep(1);
+    }
+#endif
+    return _bootstrapped;
+}
+
+bool MbedClient::register_successful() {
+#ifdef TARGET_LIKE_LINUX
+    while(!_registered && !_error) {
+        sleep(1);
+    }
+#endif
+    return _registered;
+}
+
+bool MbedClient::unregister_successful() {
+#ifdef TARGET_LIKE_LINUX
+    while(!_unregistered && !_error) {
+        sleep(1);
+    }
+#endif
+    return _unregistered;
+}
+
+bool MbedClient::registration_update_successful() {
+#ifdef TARGET_LIKE_LINUX
+    while(!_registration_updated && !_error) {
+        sleep(1);
+    }
+#endif
+    return _registration_updated;
+}
+
+M2MSecurity* MbedClient::create_bootstrap_object(bool useSecureConnection) {
+    // Creates bootstrap server object with Bootstrap server address and other parameters
+    // required for client to connect to bootstrap server.
+    M2MSecurity *security = M2MInterfaceFactory::create_security(M2MSecurity::Bootstrap);
+    if(security) {
+        if(useSecureConnection){
+            security->set_resource_value(M2MSecurity::M2MServerUri, BOOTSTRAP_SERVER_DTLS_ADDRESS);
+            //TODO: remove these, when bootstrapping server supports DTLS
+            delete security;
+            return NULL;
+        }else{
+            security->set_resource_value(M2MSecurity::M2MServerUri, BOOTSTRAP_SERVER_ADDRESS);
+            //TODO: refactor this out
+            security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity);
+        }
+    }
+    return security;
+}
+
+M2MSecurity* MbedClient::create_register_object(bool useSecureConnection) {
+    // Creates bootstrap server object with Bootstrap server address and other parameters
+    // required for client to connect to bootstrap server.
+    M2MSecurity *security = M2MInterfaceFactory::create_security(M2MSecurity::M2MServer);
+    if(security) {
+        if(useSecureConnection){
+            security->set_resource_value(M2MSecurity::M2MServerUri, MBED_SERVER_DTLS_ADDRESS);
+        }else{
+            security->set_resource_value(M2MSecurity::M2MServerUri, MBED_SERVER_ADDRESS);
+        }
+    }
+    return security;
+}
+
+void MbedClient::test_bootstrap(M2MSecurity *security) {
+    if(_interface) {
+         // Bootstrap function.
+        _interface->bootstrap(security);
+    }
+}
+
+M2MDevice* MbedClient::create_device_object() {
+    // Creates device object which contains mandatory resources linked with
+    // device endpoint.
+    M2MDevice *device = M2MInterfaceFactory::create_device();
+    if(device) {
+        device->create_resource(M2MDevice::Manufacturer,MANUFACTURER);
+        device->create_resource(M2MDevice::DeviceType,TYPE);
+        device->create_resource(M2MDevice::ModelNumber,MODEL_NUMBER);
+        device->create_resource(M2MDevice::SerialNumber,SERIAL_NUMBER);
+    }
+    return device;
+}
+
+void MbedClient::execute_function(void *argument) {
+#ifdef TARGET_LIKE_LINUX
+    if(argument) {
+        char* arguments = (char*)argument;
+        printf("Received %s!!\n", arguments);
+    }
+    printf("I am executed !!\n");
+#else
+    _led == 0 ? _led = 1 : _led = 0;
+#endif
+}
+
+M2MObject* MbedClient::create_generic_object() {
+    _object = M2MInterfaceFactory::create_object("Test");
+    if(_object) {
+        M2MObjectInstance* inst = _object->create_object_instance();
+        if(inst) {
+            inst->set_operation(M2MBase::GET_ALLOWED);
+
+            M2MResource* res = inst->create_dynamic_resource("Dynamic",
+                                                             "ResourceTest",
+                                                             M2MResourceInstance::INTEGER,
+                                                             true);
+
+            char buffer[20];
+            int size = sprintf(buffer,"%d",_value);
+            res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+            res->set_value((const uint8_t*)buffer,
+                           (const uint32_t)size);
+            res->set_execute_function(execute_callback(this,&MbedClient::execute_function));
+            _value++;
+
+            inst->create_static_resource("Static",
+                                         "ResourceTest",
+                                         M2MResourceInstance::STRING,
+                                         STATIC_VALUE,
+                                         sizeof(STATIC_VALUE)-1);
+        }
+    }
+    return _object;
+}
+
+void MbedClient::update_resource() {
+    if(_object) {
+        M2MObjectInstance* inst = _object->object_instance();
+        if(inst) {
+            M2MResource* res = inst->resource("Dynamic");
+            if( res ){
+                char buffer[20];
+                int size = sprintf(buffer,"%d",_value);
+                res->set_value((const uint8_t*)buffer,
+                               (const uint32_t)size);
+                _value++;
+            }
+        }
+    }
+}
+
+void MbedClient::test_register(M2MObjectList object_list){
+    if(_interface) {
+        _interface->register_object(_register_security, object_list);
+    }
+}
+
+void MbedClient::set_register_object(M2MSecurity *&register_object){
+    if(_register_security) {
+        delete _register_security;
+        _register_security = NULL;
+    }
+    _register_security = register_object;
+
+}
+
+void MbedClient::test_update_register() {
+    uint32_t updated_lifetime = 20;
+    _registered = false;
+    _unregistered = false;
+    if(_interface){
+        _interface->update_registration(_register_security,updated_lifetime);
+    }
+}
+
+void MbedClient::test_unregister() {
+    if(_interface) {
+        _interface->unregister_object(NULL);
+    }
+}
+
+void MbedClient::bootstrap_done(M2MSecurity *server_object){
+    if(server_object) {
+        set_register_object(server_object);
+        _bootstrapped = true;
+        _error = false;
+        printf("\nBootstrapped\n");
+    }
+}
+
+void MbedClient::object_registered(M2MSecurity */*security_object*/, const M2MServer &/*server_object*/){
+    _registered = true;
+    _unregistered = false;
+    printf("\nRegistered\n");
+}
+
+void MbedClient::object_unregistered(M2MSecurity */*server_object*/){
+    _unregistered = true;
+    _registered = false;
+
+#ifdef TARGET_LIKE_MBED
+    notify_completion(_unregistered);
+    minar::Scheduler::stop();
+#endif
+    printf("\nUnregistered\n");
+}
+
+void MbedClient::registration_updated(M2MSecurity */*security_object*/, const M2MServer & /*server_object*/){
+    _registration_updated = true;
+    printf("\nregistration updated\n");
+}
+
+void MbedClient::error(M2MInterface::Error error){
+    _error = true;
+    printf("\nError occured Error code %d\n", (int)error);
+}
+
+void MbedClient::value_updated(M2MBase *base, M2MBase::BaseType type) {
+    printf("\nValue updated of Object name %s and Type %d\n",
+           base->name(), type);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/helloworld-mbedclient/mbedclient.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_CLIENT_H__
+#define __MBED_CLIENT_H__
+
+#undef SIXLOWPAN_INTERFACE
+
+#include "mbed-client/m2minterfaceobserver.h"
+
+#ifndef TARGET_LIKE_LINUX
+#include "mbed/DigitalOut.h"
+#endif
+
+
+//#define BOOTSTRAP_ENABLED
+
+class M2MDevice;
+class M2MSecurity;
+class M2MObject;
+
+class MbedClient: public M2MInterfaceObserver {
+public:
+    MbedClient();
+
+    ~MbedClient();
+
+    bool create_interface();
+
+    bool bootstrap_successful();
+
+    bool register_successful();
+
+    bool unregister_successful();
+
+    bool registration_update_successful();
+
+    M2MSecurity* create_bootstrap_object(bool useSecureConnection);
+
+    M2MSecurity* create_register_object(bool useSecureConnection);
+
+    void test_bootstrap(M2MSecurity *security);
+
+    M2MDevice* create_device_object();
+
+    void execute_function(void *argument);
+
+    M2MObject* create_generic_object();
+
+    void update_resource();
+
+    void test_register(M2MObjectList object_list);
+
+    void set_register_object(M2MSecurity *&register_object);
+
+    void test_update_register();
+
+    void test_unregister();
+
+    //Callback from mbed client stack when the bootstrap
+    // is successful, it returns the mbed Device Server object
+    // which will be used for registering the resources to
+    // mbed Device server.
+    void bootstrap_done(M2MSecurity *server_object);
+
+    //Callback from mbed client stack when the registration
+    // is successful, it returns the mbed Device Server object
+    // to which the resources are registered and registered objects.
+    void object_registered(M2MSecurity */*security_object*/, const M2MServer &/*server_object*/);
+
+    //Callback from mbed client stack when the unregistration
+    // is successful, it returns the mbed Device Server object
+    // to which the resources were unregistered.
+    void object_unregistered(M2MSecurity */*server_object*/);
+
+    void registration_updated(M2MSecurity */*security_object*/, const M2MServer & /*server_object*/);
+
+    //Callback from mbed client stack if any error is encountered
+    // during any of the LWM2M operations. Error type is passed in
+    // the callback.
+    void error(M2MInterface::Error error);
+
+    //Callback from mbed client stack if any value has changed
+    // during PUT operation. Object and its type is passed in
+    // the callback.
+    void value_updated(M2MBase *base, M2MBase::BaseType type);
+
+private:
+
+#ifndef TARGET_LIKE_LINUX
+    mbed::DigitalOut    _led;
+#endif
+    M2MInterface        *_interface;
+    M2MSecurity         *_security;
+    M2MSecurity         *_register_security;
+    M2MDevice           *_device;
+    M2MObject           *_object;
+    bool                _bootstrapped;
+    bool                _error;
+    bool                _registered;
+    bool                _unregistered;
+    bool                _registration_updated;
+    int                 _value;
+};
+
+
+
+#endif //__MBED_CLIENT_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/helloworld-mbedclient/to_be_ported.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+
+void arm_random_module_init(void)
+{
+}
+
+uint32_t arm_random_seed_get(void)
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/lwm2mtestapplication/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,101 @@
+# Makefile for LWM2M Test Application
+#
+# Define compiler toolchain with PLATFORM variable
+# Example
+# make PLATFORM=arm-linux-gnueabi-
+#
+
+ROOT := ../../../..
+LWM2M_ROOT := $(ROOT)/lwm2m
+ROUTER_ROOT := $(ROOT)/Applications/NanoRouter
+
+VERSION := $(shell cd $(ROOT) && git describe --tags --long --dirty --always)
+
+# Specify list of sources to build
+LWM2M_SRC := \
+	main.cpp \
+	cmd_commands.cpp \
+	cmd_lwm2m.cpp \
+	lwm2mtest.cpp \
+
+CXX_SRCS += $(LWM2M_SRC)
+
+HAL_SRCS += \
+	linux/arm_hal_interrupt.c \
+	linux/arm_hal_timer.c \
+	linux/ccm_mutex.c \
+
+SRCS += $(addprefix $(ROOT)/Platforms/,$(HAL_SRCS))
+
+EXE = lwm2mtestapplication
+
+override CFLAGS += -DENDPOINT -DUSE_LINUX
+override CFLAGS += -Wall -Wextra
+override CFLAGS += -g
+override CFLAGS += -pthread
+override CFLAGS += -std=gnu99
+override CFLAGS += -D'MEM_ALLOC=malloc' -D'MEM_FREE=free'
+
+override CFLAGS += -DVERSION='"$(VERSION)"'
+
+override CXXFLAGS += -I$(ROOT) -I$(NSDL_DIR)/nsdl-c -I$(LIBSERVICE_DIR)/libService -I$(ROOT)/nanostack/nanostack -I$(ROOT)/event-loop/nanostack-event-loop
+override CXXFLAGS += -I$(LWM2M_ROOT) -I$(LWM2M_ROOT)/lwm2m-client
+override CXXFLAGS += -DTARGET_LIKE_LINUX
+override CXXFLAGS += -DHAVE_DEBUG
+override CXXFLAGS += -g
+# Generate dependency files when building
+override CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)"
+
+# Build with coverage
+ifeq ($(COVERAGE), 1)
+override CFLAGS += --coverage
+override CXXFLAGS += --coverage
+endif
+
+#
+# Libraries
+#
+NSDL_DIR := $(ROOT)/nsdl-c
+LWM2M_DIR := $(ROOT)/lwm2m/lwm2m-client
+MBEDTLS_DIR := $(ROOT)/mbedtls/library
+LIBSERVICE_DIR := $(ROOT)/libService
+override CFLAGS += -I$(ROOT) -I$(NSDL_DIR)/nsdl-c -I$(LIBSERVICE_DIR)/libService -I$(ROOT)/nanostack/nanostack -I$(ROOT)/event-loop/nanostack-event-loop
+override CFLAGS += -I$(ROOT)/nanostack/Core/include -I$(ROOT)/Platforms/linux/include -I$(ROOT)/nanostack/HAL/common
+override CFLAGS += -I$(ROUTER_ROOT)/include
+override CFLAGS += -I$(ROOT)/Platforms/linux/include -I$(ROOT)/Drivers/linux -I$(ROOT)/Boards/linux
+LDFLAGS += -D_REENTRANT
+LDFLAGS += -L$(ROOT)/event-loop -leventOS_gcc
+LDFLAGS += -L$(LWM2M_DIR) -lmbedclient_gcc
+LDFLAGS += -L$(NSDL_DIR) -lnsdl_gcc
+LDFLAGS += -L$(LIBSERVICE_DIR) -lCmdline_gcc -lservice_gcc
+LDFLAGS += -L$(MBEDTLS_DIR) -lmbedtls -lmbedx509 -lmbedcrypto
+LDFLAGS += -lpthread
+
+
+# Main build goal, specify here before dependecy parsing
+.DEFAULT_GOAL: all
+.PHONY: all
+all: $(EXE)
+
+# Create a list of objects and depencies to build
+OBJS := $(SRCS:.c=.o)
+CXX_OBJS := $(CXX_SRCS:.cpp=.o)
+DEPS += $$(SRCS:.c=.d) $$(CXX_SRCS:.cpp=.d) 
+
+# Include depencies
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(DEPS)),)
+-include $(DEPS)
+endif
+endif
+
+# Linking
+$(EXE): $(OBJS) $(CXX_OBJS)
+	@echo 'Building target: $@'
+	g++ $(CXXFLAGS) $(CFLAGS) -o $@ $(OBJS) $(CXX_OBJS) $(LDFLAGS)
+	@echo 'Finished building target: $@'
+	@echo ' '
+
+.PHONY: clean
+clean:
+	-$(RM) $(OBJS) $(CXX_OBJS) $(DEPS) $(EXE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/lwm2mtestapplication/cmd_commands.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2014-2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <string.h>
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "ns_types.h"
+#include "eventOS_event.h"
+#include "eventOS_event_timer.h"
+#include "net_interface.h"
+#include "socket_api.h"
+#include "mbed-trace/mbed_trace.h"
+#include "common_functions.h"
+
+#include "ns_cmdline.h"
+#include "cmd_commands.h"
+#include "cmd_lwm2m.h"
+
+#define TRACE_GROUP "cApp"
+
+#define ESC 0x03
+#define EVENT_DATA_COMMAND_EXECUTED 6
+
+// Prototypes
+void cmd_ready_cb(int retcode);
+
+static void cmdline_event(arm_event_s *event);
+
+/**
+* Callback function for thread handling.
+*/
+void* __thread_poll_function(void*);
+
+typedef struct {
+  uint8_t tasklet_id;
+} cmd_commands_t;
+
+cmd_commands_t  cmd_commands;
+pthread_t       input_thread; /* Thread for input_terminal-function */
+
+void initialize_app_commands(int8_t /*rf_driver_id*/)
+{
+  //initialize ready cb
+  cmd_set_ready_cb( cmd_ready_cb );
+  lwm2m_command_init();
+
+  cmd_commands.tasklet_id = eventOS_event_handler_create(&cmdline_event, EVENT_TYPE_CMDLINE);
+  pthread_create(&input_thread, NULL,__thread_poll_function, NULL);
+}
+
+void cmd_ready_cb(int retcode)
+{
+  tr_debug("cmd_ready_cb(%d)", retcode);
+  arm_event_s event;
+  event.sender = cmd_commands.tasklet_id;
+  event.receiver = cmd_commands.tasklet_id;
+  event.event_type = APPLICATION_EVENT;
+  event.event_id = EVENT_DATA_COMMAND_EXECUTED;
+  event.event_data = retcode;
+  eventOS_event_send(&event);
+}
+
+static void cmdline_event(arm_event_s *event)
+{
+    switch( event->event_type )
+    {
+        case ARM_LIB_TASKLET_INIT_EVENT:
+            //tasklet up and running
+            tr_warning("cmdline_event-ARM_LIB_TASKLET_INIT_EVENT");
+            break;
+
+        case APPLICATION_EVENT:
+            if( event->event_id == EVENT_DATA_COMMAND_EXECUTED )
+            {
+                int retcode = event->event_data;
+                cmd_next( retcode );
+            }
+            break;
+        default:
+            tr_warning("Unknown event type (type: %i, id: %i)", event->event_type, event->event_id);
+        break;
+    }
+}
+
+void* __thread_poll_function(void*)
+{
+    int16_t c = getchar();
+    while( c >= 0 ) {
+        cmd_char_input(c);
+        c = getchar();
+    }
+    return NULL;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/lwm2mtestapplication/cmd_commands.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CMD_COMMANDS_H_
+#define CMD_COMMANDS_H_
+
+#include <pthread.h>
+
+#define EVENT_TYPE_CMDLINE          5
+#define EVENT_CMDLINE_CONSOLE       5
+
+void initialize_app_commands(int8_t rf_driver_id);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/lwm2mtestapplication/cmd_lwm2m.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,875 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <string.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+//libServices
+#include "ns_types.h"
+#include "ns_cmdline.h"
+#include "cmd_lwm2m.h"
+#include "lwm2mtest.h"
+
+#define CMD_MAN_LWM2M_CLIENT        "lwm2m-client <cmd> [options]                   LWM2M mbed Client API\n"\
+                                    "setup <p> [options]                            Set up the LWM2M Interface\n"\
+                                    "<p>:\n"\
+                                    "   Options for setup command\n"\
+                                    "   --endpoint <name>           Endpoint Name (mandatory)\n"\
+                                    "   --type  <name>              Resource Type\n"\
+                                    "   --lifetime <n>              Lifetime in seconds, default is -1 means not included\n"\
+                                    "   --port <n>                  Listen port, default is 5683\n"\
+                                    "   --domain <name>             Domain for mbed Device Server, default is empty\n"\
+                                    "   --binding_mode <n>          Binding Mode, NOT_SET = 0|UDP = 1(default)|QUEUE = 2|SMS = 4\n"\
+                                    "   --network_interface <n>     Network Interface, Uninitialized = 0 ,LwIP_IPv4 = 1(default), LwIP_IPv6 = 2, Nanostack_IPv6 = 4\n"\
+                                    "bootstrap_object <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for bootstrap object command\n"\
+                                    "   --address <name>            Bootstrap server address, format is coap://192.168.0.1:5683\n"\
+                                    "bootstrap                      Issues Bootstrap command\n"\
+                                    "object <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for custom object\n"\
+                                    "   --name <name>       Object name\n"\
+                                    "   --new_instance <n>  If you need new instance 0=false(default), 1=true\n"\
+                                    "   --object_observable <n>    Object is observable false=0(default), true=1\n"\
+                                    "   --object_instance_observable <n>    Object Instance is observable false=0(default), true=1\n"\
+									"   --object_instance_id <n> Instance id of object instance 0=(default)\n"\
+                                    "   --object_operation <n> Operation Mode, Default is  0, NOT_ALLOWED = 0, GET_ALLOWED = 1,\n"\
+                                    "PUT_ALLOWED = 2, GET_PUT_ALLOWED = 3, POST_ALLOWED = 4,GET_POST_ALLOWED = 5,\n"\
+                                    "PUT_POST_ALLOWED = 6, GET_PUT_POST_ALLOWED = 7, DELETE_ALLOWED = 8\n"\
+                                    "   --object_instance_operation <n> Operation Mode, Default is  0, NOT_ALLOWED = 0, GET_ALLOWED = 1,\n"\
+                                    "PUT_ALLOWED = 2, GET_PUT_ALLOWED = 3, POST_ALLOWED = 4,GET_POST_ALLOWED = 5,\n"\
+                                    "PUT_POST_ALLOWED = 6, GET_PUT_POST_ALLOWED = 7, DELETE_ALLOWED = 8\n"\
+                                        "static_resource <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for static resource\n"\
+                                    "   --object_instance <n> Instance Id of the object this resource is associated with, default is 0\n"\
+                                    "   --name <name>       Resource name\n"\
+                                    "   --value <name>      Resource value\n"\
+                                    "   --value_type <n>    Value Type String=0, Integer=1\n"\
+                                    "   --multiple_instance <n> Supports multiple instances, false=0(default), true=1\n"\
+                                    "dynamic_resource <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for dynamic resource\n"\
+                                    "   --object_instance <n> Instance Id of the object this resource is associated with, default is 0\n"\
+                                    "   --name <name>       Resource name\n"\
+                                    "   --observable <n>    Resource is observable false=0(default), true=1\n"\
+                                    "   --multiple_instance <n> Supports multiple instances, false=0(default), true=1\n"\
+                                    "   --resource_operation <n> Operation Mode, Default is  1, NOT_ALLOWED = 0, GET_ALLOWED = 1,\n"\
+                                    "PUT_ALLOWED = 2, GET_PUT_ALLOWED = 3, POST_ALLOWED = 4,GET_POST_ALLOWED = 5,\n"\
+                                    "PUT_POST_ALLOWED = 6, GET_PUT_POST_ALLOWED = 7, DELETE_ALLOWED = 8\n"\
+                                    "dynamic_resource <p> [options]\n"\
+                                    "static_resource_instance <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for static resource instance\n"\
+                                    "   --object_instance <n> Instance Id of the object this resource is associated with, default is 0\n"\
+                                    "   --resource_instance <n> Instance Id of the resource associated with, default is 0\n"\
+                                    "   --name <name>       Resource name\n"\
+                                    "   --value <name>      Resource value\n"\
+                                    "   --value_type <n>    Value Type String=0, Integer=1\n"\
+                                    "   --multiple_instance <n> Supports multiple instances, false=0(default), true=1\n"\
+                                    "dynamic_resource <p> [options]\n"\
+                                    "dynamic_resource_instance <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for dynamic resource instance\n"\
+                                    "   --object_instance <n> Instance Id of the object this resource is associated with, default is 0\n"\
+                                    "   --resource_instance <n> Instance Id of the resource associated with, default is 0\n"\
+                                    "   --name <name>       Resource name\n"\
+                                    "   --value_type <n>    Value Type String=0, Integer=1(default)\n"\
+                                    "   --observable <n>    Resource is observable false=0(default), true=1\n"\
+                                    "   --multiple_instance <n> Supports multiple instances, false=0(default), true=1\n"\
+                                    "   --resource_instance_operation <n> Operation Mode, Default is  1, NOT_ALLOWED = 0, GET_ALLOWED = 1,\n"\
+                                    "PUT_ALLOWED = 2, GET_PUT_ALLOWED = 3, POST_ALLOWED = 4,GET_POST_ALLOWED = 5,\n"\
+                                    "PUT_POST_ALLOWED = 6, GET_PUT_POST_ALLOWED = 7, DELETE_ALLOWED = 8\n"\
+                                    "dynamic_resource <p> [options]\n"\
+                                    "device <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for device object \n"\
+                                    "   --manufacturer <name>       Manufacturer name\n"\
+                                    "   --model_number <name>       Model number\n"\
+                                    "   --serial_number <name>      Serial number\n"\
+                                    "   --device_type <name>        Device Type\n"\
+                                    "   --hardware_version <name>   Hardware version\n"\
+                                    "   --software_version <name>   Software version\n"\
+                                    "   --firmware_version <name>   Firmware version\n"\
+                                    "   --available_power_sources <n> Number of available power sources, Must have Instance ID\n"\
+                                    "   --power_source_voltage <n>   Power source voltage, Must have Instance ID\n"\
+                                    "   --power_source_current <n>   Power source current, Must have Instance ID\n"\
+                                    "   --battery_level <n>        Battery level\n"\
+                                    "   --battery_status <n>   Battery status\n"\
+                                    "   --memory_free <n>   Free memory, in bytes\n"\
+                                    "   --memory_total <n>   Free memory in bytes\n"\
+                                    "   --error_code <n>   Error Code, Must have Instance ID\n"\
+                                    "   --current_time <n>   Current Time, EPOCH format\n"\
+                                    "   --utc_offset <name>   UTC Format\n"\
+                                    "   --timezone <name>   Time zone \n"\
+                                    "   --instance_id <n>   Instance ID for multiple resources \n"\
+                                    "firmware <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for firmware object \n"\
+                                    "   --package <name>       Firmware package\n"\
+                                    "   --package_uri <name>       URI from where the device can download package\n"\
+                                    "   --state <n>      State of firmware update\n"\
+                                    "   --update_supported_objects <bool>        Send update registration message after fw update\n"\
+                                    "   --update_results <n>   Result of downloading or updating firmware\n"\
+                                    "   --package_name <name>   Package name\n"\
+                                    "   --package_version <name>   Package version\n"\
+                                    "register_object <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for register command\n"\
+                                    "   --address <name>            mbed Device Server address, format is coap://192.168.0.1:5683\n"\
+                                    "   --secure <number>           1 == secure mode, non-secure otherwise (remember: secure port is 5684)\n"\
+                                    "register                       Issues Register command\n"\
+                                    "update-register <p> [options]  Issues Update registration command\n"\
+                                    "<p>:\n"\
+                                    "   Options for update-register command\n"\
+                                    "   --lifetime <n>              Lifetime value in seconds\n"\
+                                    "unregister                     Issues Un-register command\n"\
+                                    "set_value <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for set_value command \n"\
+                                    "   --name <name>               Resource name (Mandatory)\n"\
+                                    "   --value <value>             Resource value (Mandatory)\n"\
+                                    "   --object_instance <n>       Instance ID of object this resource is associated with, default is 0\n"\
+                                    "set_value_instance <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for set_value_instance command for Resource Instances\n"\
+                                    "   --name <name>               Resource name (Mandatory)\n"\
+                                    "   --value <value>             Resource value (Mandatory)\n"\
+                                    "   --object_instance <n>       Instance ID of object this resource is associated with, default is 0\n"\
+                                    "   --resource_instance <n>     Instance ID of object of the resource, default is 0\n"\
+                                    "resource_value <p> [options]\n"\
+                                    "<p>:\n"\
+                                    "   Options for resource_value command\n"\
+                                    "   --firmware <n>               Resource instance id in Firmware object\n"\
+
+#define EXIT_MANUAL         "exit :closes the application\n"
+
+
+int lwm2m_client_command(int argc, char *argv[]);
+int lwm2m_client_setup_command(int argc, char *argv[]);
+int lwm2m_client_device_command(int argc, char *argv[]);
+int lwm2m_client_object_command(int argc, char *argv[]);
+int lwm2m_client_static_resource_command(int argc, char *argv[]);
+int lwm2m_client_dynamic_resource_command(int argc, char *argv[]);
+int lwm2m_client_static_resource_instance_command(int argc, char *argv[]);
+int lwm2m_client_dynamic_resource_instance_command(int argc, char *argv[]);
+int lwm2m_client_bootstrap_object_command(int argc, char *argv[]);
+int lwm2m_client_bootstrap_command();
+int lwm2m_client_register_object_command(int argc, char *argv[]);
+int lwm2m_client_register_command();
+int lwm2m_client_update_register_command(int argc, char *argv[]);
+int lwm2m_client_unregister_command();
+int lwm2m_client_set_value_command(int argc, char *argv[]);
+int lwm2m_client_set_value_instance_command(int argc, char *argv[]);
+int lwm2m_client_firmware_command(int argc, char *argv[]);
+int lwm2m_client_resource_value(int argc, char *argv[]);
+int exit_command(int argc, char *argv[]);
+
+void  lwm2m_command_init(void)
+{
+  cmd_add("lwm2m-client", lwm2m_client_command, "LWM2M Client specific command", CMD_MAN_LWM2M_CLIENT);
+  cmd_alias_add("lwm2m-client-test-setup", "lwm2m-client setup --endpoint lwm2m-endpoint --type test --lifetime 3600");
+  cmd_alias_add("lwm2m-client-test-device", "lwm2m-client device --manufacturer ARM --model_number 2015 --serial_number 12345");
+  cmd_alias_add("lwm2m-client-test-bootstrap-object", "lwm2m-client bootstrap_object --address coap://10.45.3.10:5693");
+  cmd_alias_add("lwm2m-client-test-register-object", "lwm2m-client register_object --address coap://10.45.3.10:5683");
+  cmd_alias_add("lwm2m-client-test-object", "lwm2m-client object --name 10 --object_observable 1 --object_instance_observable 1 --object_operation 3 --object_instance_operation 3");
+  cmd_alias_add("lwm2m-client-test-dynamic_resource", "lwm2m-client dynamic_resource --name 1 --resource_operation 3 --observable 0");
+  cmd_alias_add("lwm2m-client-test-secure-register-object", "lwm2m-client register_object --address coap://10.45.3.10:5684 --secure 1");
+  cmd_add("exit", exit_command, "exit command", EXIT_MANUAL);
+}
+char *test_mem_block = 0;
+int   test_timer;
+M2MLWClient lwm2m_client;
+
+int lwm2m_client_command(int argc, char *argv[])
+{
+    if( strcmp(argv[1], "setup") == 0 )
+    {
+      return lwm2m_client_setup_command(argc, argv);
+    }
+    else if( strcmp(argv[1], "bootstrap_object") == 0 )
+    {
+      return lwm2m_client_bootstrap_object_command(argc, argv);
+    }
+    else if( strcmp(argv[1], "bootstrap") == 0 )
+    {
+      return lwm2m_client_bootstrap_command();
+    }
+    else if( strcmp(argv[1], "device") == 0 )
+    {
+      return lwm2m_client_device_command(argc, argv);
+    }
+    else if( strcmp(argv[1], "firmware") == 0 )
+    {
+      return lwm2m_client_firmware_command(argc, argv);
+    }
+    else if( strcmp(argv[1], "resource_value") == 0 )
+    {
+      return lwm2m_client_resource_value(argc, argv);
+    }
+    else if( strcmp(argv[1], "object") == 0 )
+    {
+      return lwm2m_client_object_command(argc, argv);
+    }
+    else if( strcmp(argv[1], "static_resource") == 0 )
+    {
+      return lwm2m_client_static_resource_command(argc, argv);
+    }
+    else if( strcmp(argv[1], "dynamic_resource") == 0 )
+    {
+      return lwm2m_client_dynamic_resource_command(argc, argv);
+    }
+    else if( strcmp(argv[1], "static_resource_instance") == 0 )
+    {
+      return lwm2m_client_static_resource_instance_command(argc, argv);
+    }
+    else if( strcmp(argv[1], "dynamic_resource_instance") == 0 )
+    {
+      return lwm2m_client_dynamic_resource_instance_command(argc, argv);
+    }
+    else if( strcmp(argv[1], "register_object") == 0 )
+    {
+      return lwm2m_client_register_object_command(argc, argv);
+    }
+    else if( strcmp(argv[1], "register") == 0 )
+    {
+      return lwm2m_client_register_command();
+    }
+    else if( strcmp(argv[1], "update-register") == 0 )
+    {
+      return lwm2m_client_update_register_command(argc, argv);
+    }
+    else if( strcmp(argv[1], "unregister") == 0 )
+    {
+      return lwm2m_client_unregister_command();
+    }
+    else if ( strcmp(argv[1], "set_value") == 0)
+    {
+      return lwm2m_client_set_value_command(argc, argv);
+    }
+    else if ( strcmp(argv[1], "set_value_instance") == 0)
+    {
+      return lwm2m_client_set_value_instance_command(argc, argv);
+    }
+    //:TODO what another commands should be there ?
+    return CMDLINE_RETCODE_COMMAND_NOT_IMPLEMENTED;
+}
+
+int lwm2m_client_setup_command(int argc, char *argv[])
+{
+    char *endpoint = 0;
+    char *type = 0;
+    int lifetime = -1;
+    int32_t port = 5683;
+    char *domain = 0;
+    int32_t binding_mode = 1;
+    int32_t network_interface = 1;
+
+    if (!cmd_parameter_val(argc, argv, "--endpoint", &endpoint)) {
+        return CMDLINE_RETCODE_INVALID_PARAMETERS;
+    }
+    int opt_params = 0;
+    cmd_parameter_val(argc, argv, "--type", &type);
+    if (cmd_parameter_int(argc, argv, "--lifetime", &lifetime)) {
+        if (opt_params != 0) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+        else {
+            opt_params += 1;
+        }
+    }
+    if (cmd_parameter_int(argc, argv, "--port", &port)) {
+        if (port > UINT16_MAX || opt_params != 1) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+        else {
+            opt_params += 1;
+        }
+    }
+    if (cmd_parameter_val(argc, argv, "--domain", &domain)) {
+        if (opt_params != 2) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+        else {
+            opt_params += 1;
+        }
+    }
+    if (cmd_parameter_int(argc, argv, "--binding_mode", &binding_mode)) {
+        if (opt_params != 3) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+        else {
+            opt_params += 1;
+        }
+    }
+    if (cmd_parameter_int(argc, argv, "--network_interface", &network_interface)) {
+        if (opt_params != 4) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+        else {
+            opt_params += 1;
+        }
+    }
+
+    bool success = false;
+    if (lwm2m_client.create_interface(opt_params,
+                                    endpoint,
+                                    type,
+                                    lifetime,
+                                    port,
+                                    domain,
+                                    binding_mode,
+                                    network_interface)) {
+        return CMDLINE_RETCODE_SUCCESS;
+    }
+
+    return CMDLINE_RETCODE_FAIL;
+}
+
+int lwm2m_client_device_command(int argc, char *argv[])
+{
+    int return_code = CMDLINE_RETCODE_SUCCESS;// CMDLINE_RETCODE_INVALID_PARAMETERS;
+    char *manufacturer = 0;
+    char *model_number = 0;
+    char *serial_number = 0;
+    char *device_type = 0;
+    char *hardware_version = 0;
+    char *software_version = 0;
+    char *firmware_version = 0;
+    char *utc_offset = 0;
+    char *timezone = 0;
+    int32_t current_time = 0;
+    int32_t  available_power_sources = 0;
+    int32_t  power_source_voltage = 0;
+    int32_t  power_source_current = 0;
+    int32_t  battery_status = 0;
+    int32_t  battery_level = 0;
+    int32_t  memory_free = 0;
+    int32_t  memory_total = 0;
+    int32_t  error_code = 0;
+    int32_t  instance_id = 0;
+
+    lwm2m_client.create_device_object();
+
+    if(cmd_parameter_val(argc, argv, "--manufacturer", &manufacturer)) {
+        if(!lwm2m_client.create_device_object(M2MDevice::Manufacturer,
+                                          manufacturer)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+    }
+    if(cmd_parameter_val(argc, argv, "--model_number", &model_number)) {
+        if(!lwm2m_client.create_device_object(M2MDevice::ModelNumber,
+                                              model_number)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+    }
+    if(cmd_parameter_val(argc, argv, "--serial_number", &serial_number)){
+        if(!lwm2m_client.create_device_object(M2MDevice::SerialNumber,
+                                                  serial_number)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+    }
+    if(cmd_parameter_val(argc, argv, "--device_type", &device_type)){
+       if(!lwm2m_client.create_device_object(M2MDevice::DeviceType,
+                                             device_type)) {
+           return CMDLINE_RETCODE_INVALID_PARAMETERS;
+       }
+   }
+    if(cmd_parameter_val(argc, argv, "--hardware_version", &hardware_version)){
+       if(!lwm2m_client.create_device_object(M2MDevice::HardwareVersion,
+                                             hardware_version)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+   }
+    if(cmd_parameter_val(argc, argv, "--software_version", &software_version)){
+       if(!lwm2m_client.create_device_object(M2MDevice::SoftwareVersion,
+                                             software_version)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+   }
+    if(cmd_parameter_val(argc, argv, "--firmware_version", &firmware_version)){
+       if(!lwm2m_client.create_device_object(M2MDevice::FirmwareVersion,
+                                             firmware_version)) {
+           return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+   }
+    if(cmd_parameter_int(argc, argv, "--available_power_sources", &available_power_sources)){
+        if(cmd_parameter_int(argc, argv, "--instance_id", &instance_id)) {
+            if(!lwm2m_client.create_device_object(M2MDevice::AvailablePowerSources,
+                                             available_power_sources,instance_id)) {
+                return CMDLINE_RETCODE_INVALID_PARAMETERS;
+            }
+        }
+   }
+    if(cmd_parameter_int(argc, argv, "--power_source_voltage", &power_source_voltage)){
+        if(cmd_parameter_int(argc, argv, "--instance_id", &instance_id)) {
+            if(!lwm2m_client.create_device_object(M2MDevice::PowerSourceVoltage,
+                                         power_source_voltage,instance_id)) {
+                return CMDLINE_RETCODE_INVALID_PARAMETERS;
+            }
+        }
+   }
+    if(cmd_parameter_int(argc, argv, "--power_source_current", &power_source_current)){
+        if(cmd_parameter_int(argc, argv, "--instance_id", &instance_id)) {
+            if(!lwm2m_client.create_device_object(M2MDevice::PowerSourceCurrent,
+                                         power_source_current,instance_id)) {
+                return CMDLINE_RETCODE_INVALID_PARAMETERS;
+            }
+        }
+   }
+    if(cmd_parameter_int(argc, argv, "--battery_level", &battery_level)){
+       if(!lwm2m_client.create_device_object(M2MDevice::BatteryLevel,
+                                             battery_level)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+   }
+    if(cmd_parameter_int(argc, argv, "--battery_status", &battery_status)){
+       if(!lwm2m_client.create_device_object(M2MDevice::BatteryStatus,
+                                             battery_status)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+   }
+    if(cmd_parameter_int(argc, argv, "--memory_free", &memory_free)){
+       if(!lwm2m_client.create_device_object(M2MDevice::MemoryFree,
+                                             memory_free)) {
+           return CMDLINE_RETCODE_INVALID_PARAMETERS;
+       }
+   }
+    if(cmd_parameter_int(argc, argv, "--memory_total", &memory_total)){
+       if(!lwm2m_client.create_device_object(M2MDevice::MemoryTotal,
+                                             memory_total)) {
+           return CMDLINE_RETCODE_INVALID_PARAMETERS;
+       }
+   }
+    if(cmd_parameter_int(argc, argv, "--error_code", &error_code)){
+        if(cmd_parameter_int(argc, argv, "--instance_id", &instance_id)) {
+            if(!lwm2m_client.create_device_object(M2MDevice::ErrorCode,
+                                                 error_code,instance_id)) {
+               return CMDLINE_RETCODE_INVALID_PARAMETERS;
+            }
+        }
+   }
+    if(cmd_parameter_int(argc, argv, "--current_time", &current_time)){
+       if(!lwm2m_client.create_device_object(M2MDevice::CurrentTime,
+                                             current_time)) {
+           return CMDLINE_RETCODE_INVALID_PARAMETERS;
+       }
+   }
+    if(cmd_parameter_val(argc, argv, "--utc_offset", &utc_offset)){
+       if(!lwm2m_client.create_device_object(M2MDevice::UTCOffset,
+                                             utc_offset)) {
+           return CMDLINE_RETCODE_INVALID_PARAMETERS;
+       }
+   }
+    if(cmd_parameter_val(argc, argv, "--timezone", &timezone)){
+       if(!lwm2m_client.create_device_object(M2MDevice::Timezone,
+                                             timezone)) {
+           return CMDLINE_RETCODE_INVALID_PARAMETERS;
+       }
+   }
+
+   return return_code;
+}
+
+int lwm2m_client_firmware_command(int argc, char *argv[])
+{
+    int return_code = CMDLINE_RETCODE_SUCCESS;// CMDLINE_RETCODE_INVALID_PARAMETERS;
+    char *package = 0;
+    char *package_uri = 0;
+    char *package_name = 0;
+    char *package_version = 0;
+    int32_t state = 1;
+    int32_t update_result = 0;
+    int32_t update_supported_objects = 0;
+
+    lwm2m_client.create_firmware_object();
+
+    if(cmd_parameter_val(argc, argv, "--package", &package)) {
+        uint16_t length = (uint16_t)sizeof(package);
+        if(!lwm2m_client.create_firmware_object(M2MFirmware::Package,
+                                          (const uint8_t*)package, length)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+    }
+
+    if(cmd_parameter_val(argc, argv, "--package_uri", &package_uri)) {
+        if(!lwm2m_client.create_firmware_object(M2MFirmware::PackageUri,
+                                          package_uri)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+    }
+    if(cmd_parameter_int(argc, argv, "--state", &state)) {
+        if(!lwm2m_client.create_firmware_object(M2MFirmware::State,
+                                          state)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+    }
+    if(cmd_parameter_int(argc, argv, "--update_supported_objects", &update_supported_objects)) {
+        if(!lwm2m_client.create_firmware_object(M2MFirmware::UpdateSupportedObjects,
+                                          update_supported_objects)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+    }
+    if(cmd_parameter_int(argc, argv, "--update_results", &update_result)) {
+        if(!lwm2m_client.create_firmware_object(M2MFirmware::UpdateResult,
+                                          update_result)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+    }
+    if(cmd_parameter_val(argc, argv, "--package_name", &package_name)) {
+        if(!lwm2m_client.create_firmware_object(M2MFirmware::PackageName,
+                                          package_name)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+    }
+    if(cmd_parameter_val(argc, argv, "--package_version", &package_version)) {
+        if(!lwm2m_client.create_firmware_object(M2MFirmware::PackageVersion,
+                                          package_version)) {
+            return CMDLINE_RETCODE_INVALID_PARAMETERS;
+        }
+    }
+    lwm2m_client.set_fw_execute_function();
+    return return_code;
+}
+
+int lwm2m_client_resource_value(int argc, char *argv[])
+{
+    int resource = 0;
+    if(cmd_parameter_int(argc, argv, "--firmware", &resource)) {
+        if (resource == 3 || resource == 4 || resource == 5) {
+            lwm2m_client.firmware_resource_int(resource);
+        }
+        else if (resource == 0) {
+            lwm2m_client.firmware_resource_buffer();
+        }
+        else {
+            lwm2m_client.firmware_resource_string(resource);
+        }
+    }
+    return CMDLINE_RETCODE_SUCCESS;
+}
+
+int lwm2m_client_object_command(int argc, char *argv[])
+{
+    int return_code = CMDLINE_RETCODE_SUCCESS;// CMDLINE_RETCODE_INVALID_PARAMETERS;
+    char *object_name = 0;
+    int32_t new_instance = 0;
+    int32_t object_operation = 0;
+    int32_t object_instance_operation = 0;
+    int32_t object_instance_id = 0;
+    int32_t object_observable = 0;
+    int32_t object_instance_observable = 0;
+
+    if(cmd_parameter_val(argc, argv, "--name", &object_name)) {
+        cmd_parameter_int(argc, argv, "--new_instance", &new_instance);
+        cmd_parameter_int(argc, argv, "--object_operation", &object_operation);
+        cmd_parameter_int(argc, argv, "--object_instance_operation", &object_instance_operation);
+        cmd_parameter_int(argc, argv, "--object_instance_id", &object_instance_id);
+        cmd_parameter_int(argc, argv, "--object_observable", &object_observable);
+        cmd_parameter_int(argc, argv, "--object_instance_observable", &object_instance_observable);
+
+        if(!lwm2m_client.create_object(object_name,
+                                       new_instance,
+                                       object_operation,
+                                       object_instance_operation,
+                                       object_instance_id,
+                                       object_observable,
+                                       object_instance_observable)) {
+            return_code = CMDLINE_RETCODE_INVALID_PARAMETERS;
+         }
+    }
+    return return_code;
+}
+
+int lwm2m_client_static_resource_command(int argc, char *argv[])
+{
+    int return_code = CMDLINE_RETCODE_INVALID_PARAMETERS;
+    char *name = 0;
+    char *value_string = 0;
+    int32_t value_int = 0;
+    int32_t value_type = -1;
+    int32_t multiple_instance = 0;
+    int32_t object_instance = 0;
+
+    cmd_parameter_int(argc, argv, "--multiple_instance", &multiple_instance);
+    cmd_parameter_int(argc, argv, "--object_instance", &object_instance);
+
+
+    if(cmd_parameter_int(argc, argv, "--value_type", &value_type)) {
+        if(0 == value_type){
+            if(cmd_parameter_val(argc, argv, "--name", &name) &&
+               cmd_parameter_val(argc, argv, "--value", &value_string)) {
+                if(lwm2m_client.create_static_resource_string(name,value_string,
+                                                              multiple_instance,object_instance)) {
+                    return_code =  CMDLINE_RETCODE_SUCCESS;
+                }
+            }
+        } else if(1 == value_type){
+            if(cmd_parameter_val(argc, argv, "--name", &name) &&
+               cmd_parameter_int(argc, argv, "--value", &value_int)) {
+                if(lwm2m_client.create_static_resource_int(name,value_int,
+                                                           multiple_instance,object_instance)) {
+                    return_code =  CMDLINE_RETCODE_SUCCESS;
+                }
+            }
+        }
+    }
+    return return_code;
+}
+
+int lwm2m_client_dynamic_resource_command(int argc, char *argv[])
+{
+    int return_code = CMDLINE_RETCODE_INVALID_PARAMETERS;
+    char *name = 0;
+    int32_t multiple_instance = 0;
+    int32_t object_instance = 0;
+    int32_t observable = 0;
+    int32_t resource_operation = 1;
+    int32_t value_type = -1;
+
+    cmd_parameter_int(argc, argv, "--value_type", &value_type);
+    cmd_parameter_int(argc, argv, "--multiple_instance", &multiple_instance);
+    cmd_parameter_int(argc, argv, "--object_instance", &object_instance);
+    cmd_parameter_int(argc, argv, "--observable", &observable);
+    cmd_parameter_int(argc, argv, "--resource_operation", &resource_operation);
+    if(-1 == value_type){
+        value_type = 1;
+    }
+
+    if(cmd_parameter_val(argc, argv, "--name", &name)) {
+        if(0 == value_type) {
+            if(lwm2m_client.create_dynamic_resource_string(name,observable,
+                                                    multiple_instance,
+                                                    object_instance,
+                                                    resource_operation)) {
+                return_code =  CMDLINE_RETCODE_SUCCESS;
+            }
+        }
+        else if(1 == value_type){
+            if(lwm2m_client.create_dynamic_resource_int(name,observable,
+                                                    multiple_instance,
+                                                    object_instance,
+                                                    resource_operation)) {
+                return_code =  CMDLINE_RETCODE_SUCCESS;
+            }
+        }
+
+    }
+    return return_code;
+}
+
+int lwm2m_client_static_resource_instance_command(int argc, char *argv[])
+{
+    int return_code = CMDLINE_RETCODE_INVALID_PARAMETERS;
+    char *name = 0;
+    char *value_string = 0;
+    int32_t value_int = 0;
+    int32_t value_type = -1;
+    int32_t multiple_instance = 0;
+    int32_t object_instance = 0;
+    int32_t resource_instance = 0;
+
+    cmd_parameter_int(argc, argv, "--multiple_instance", &multiple_instance);
+    cmd_parameter_int(argc, argv, "--object_instance", &object_instance);
+    cmd_parameter_int(argc, argv, "--resource_instance", &resource_instance);
+
+    if(cmd_parameter_int(argc, argv, "--value_type", &value_type)) {
+        if(0 == value_type){
+            if(cmd_parameter_val(argc, argv, "--name", &name) &&
+               cmd_parameter_val(argc, argv, "--value", &value_string)) {
+                if(lwm2m_client.create_static_resource_instance_string(name,value_string,
+                                                                       multiple_instance,
+                                                                       object_instance,
+                                                                       resource_instance)) {
+                    return_code =  CMDLINE_RETCODE_SUCCESS;
+                }
+            }
+        } else if(1 == value_type){
+            if(cmd_parameter_val(argc, argv, "--name", &name) &&
+               cmd_parameter_int(argc, argv, "--value", &value_int)) {
+                if(lwm2m_client.create_static_resource_instance_int(name,value_int,
+                                                                    multiple_instance,
+                                                                    object_instance,
+                                                                    resource_instance)) {
+                    return_code =  CMDLINE_RETCODE_SUCCESS;
+                }
+            }
+        }
+    }
+    return return_code;
+}
+
+int lwm2m_client_dynamic_resource_instance_command(int argc, char *argv[])
+{
+    int return_code = CMDLINE_RETCODE_INVALID_PARAMETERS;
+    char *name = 0;
+    int32_t multiple_instance = 0;
+    int32_t object_instance = 0;
+    int32_t resource_instance = 0;
+    int32_t observable = 0;
+    int32_t resource_instance_operation = 1;
+    int32_t value_type = -1;
+
+    cmd_parameter_int(argc, argv, "--value_type", &value_type);
+    cmd_parameter_int(argc, argv, "--multiple_instance", &multiple_instance);
+    cmd_parameter_int(argc, argv, "--object_instance", &object_instance);
+    cmd_parameter_int(argc, argv, "--resource_instance", &resource_instance);
+    cmd_parameter_int(argc, argv, "--observable", &observable);
+    cmd_parameter_int(argc, argv, "--resource_instance_operation", &resource_instance_operation);
+    if(-1 == value_type){
+        value_type = 1;
+    }
+
+    if(cmd_parameter_val(argc, argv, "--name", &name)) {
+        if(0 == value_type){
+            if(lwm2m_client.create_dynamic_resource_instance_string(name,observable,
+                                                             multiple_instance,
+                                                             object_instance,
+                                                             resource_instance,
+                                                             resource_instance_operation)) {
+                return_code =  CMDLINE_RETCODE_SUCCESS;
+            }
+        }
+        else if(1 == value_type){
+            if(lwm2m_client.create_dynamic_resource_instance_int(name,observable,
+                                                             multiple_instance,
+                                                             object_instance,
+                                                             resource_instance,
+                                                             resource_instance_operation)) {
+                return_code =  CMDLINE_RETCODE_SUCCESS;
+            }
+        }
+    }
+    return return_code;
+}
+
+int lwm2m_client_bootstrap_object_command(int argc, char *argv[])
+{
+    int return_code = CMDLINE_RETCODE_FAIL;
+    char *address = 0;
+
+    if( cmd_parameter_val(argc, argv, "--address", &address) ){
+        if(lwm2m_client.create_bootstrap_object(address)){
+            return_code = CMDLINE_RETCODE_SUCCESS;
+        }
+    } else {
+        return_code = CMDLINE_RETCODE_INVALID_PARAMETERS;
+    }
+    return return_code;
+}
+
+int lwm2m_client_bootstrap_command()
+{
+    int return_code = CMDLINE_RETCODE_FAIL;
+
+    if(lwm2m_client.test_bootstrap()){
+        return_code = CMDLINE_RETCODE_EXCUTING_CONTINUE;
+    }
+    return return_code;
+}
+
+int lwm2m_client_register_object_command(int argc, char *argv[])
+{
+    char *address = 0;
+    cmd_parameter_val(argc, argv, "--address", &address);
+
+    int useSecureConn = 0;
+    if( !cmd_parameter_int(argc, argv, "--secure", &useSecureConn) ){
+        useSecureConn = 0;
+    }
+
+   if(lwm2m_client.create_register_object(address, useSecureConn == 1)) {
+        return CMDLINE_RETCODE_SUCCESS;
+    }
+    return CMDLINE_RETCODE_INVALID_PARAMETERS;
+}
+
+int lwm2m_client_register_command()
+{
+    if(lwm2m_client.test_register()) {
+        return CMDLINE_RETCODE_EXCUTING_CONTINUE;
+    }
+    return CMDLINE_RETCODE_INVALID_PARAMETERS;
+}
+
+int lwm2m_client_update_register_command(int argc, char *argv[])
+{
+    int ret_code = CMDLINE_RETCODE_INVALID_PARAMETERS;
+    int32_t lifetime = 0;
+
+    cmd_parameter_int(argc, argv, "--lifetime", &lifetime);
+
+    if(lifetime >= 0) {
+        if(lwm2m_client.test_update_register(lifetime)) {
+            ret_code = CMDLINE_RETCODE_EXCUTING_CONTINUE;
+        }
+    }
+    return ret_code;
+}
+
+int lwm2m_client_unregister_command()
+{
+    if(lwm2m_client.test_unregister()) {
+        return CMDLINE_RETCODE_EXCUTING_CONTINUE;
+    }
+    return CMDLINE_RETCODE_INVALID_PARAMETERS;
+}
+
+int lwm2m_client_set_value_command(int argc, char *argv[])
+{
+    int return_code = CMDLINE_RETCODE_INVALID_PARAMETERS;
+    char *name = 0;
+    int32_t value = 0;
+    int32_t object_instance = 0;
+
+    cmd_parameter_int(argc, argv, "--object_instance", &object_instance);
+
+    if(cmd_parameter_val(argc, argv, "--name", &name) &&
+       cmd_parameter_int(argc, argv, "--value", &value)) {
+        if(lwm2m_client.set_resource_value(name,value,object_instance)) {
+            return_code = CMDLINE_RETCODE_SUCCESS;
+        }
+    }
+    return return_code;
+}
+
+int lwm2m_client_set_value_instance_command(int argc, char *argv[])
+{
+    int return_code = CMDLINE_RETCODE_INVALID_PARAMETERS;
+    char *name = 0;
+    int32_t value = 0;
+    int32_t object_instance = 0;
+    int32_t resource_instance = 0;
+
+    cmd_parameter_int(argc, argv, "--object_instance", &object_instance);
+    cmd_parameter_int(argc, argv, "--resource_instance", &resource_instance);
+
+    if(cmd_parameter_val(argc, argv, "--name", &name) &&
+       cmd_parameter_int(argc, argv, "--value", &value)) {
+        if(lwm2m_client.set_resource_instance_value(name,value,
+                                                    object_instance,
+                                                    resource_instance)) {
+            return_code = CMDLINE_RETCODE_SUCCESS;
+        }
+    }
+    return return_code;
+}
+
+int exit_command(int argc, char *argv[])
+{
+    exit(1);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/lwm2mtestapplication/cmd_lwm2m.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CMD_LWM2M_H_
+#define CMD_LWM2M_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void lwm2m_command_init(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/lwm2mtestapplication/generate_coverage.sh	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# Copyright (c) 2015 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+ 
+
+rm -rf coverage
+lcov --base-directory ../../ --directory ../../output/gcc_linux/source -c -o testapp.info
+lcov --base-directory ../../ --directory ../../output/lwm2m-client-linux/source -c -o lwm2mlinux.info
+lcov --base-directory ../../ --directory ../../output/lwm2m-client-mbedtls/source -c -o mbedtls.info
+lcov --base-directory ../../../../nsdl-c --directory ../../../../nsdl-c/output/gcc_/source/libCoap/src -c -o libcoap.info
+lcov --base-directory ../../../../nsdl-c --directory ../../../../nsdl-c/output/gcc_/source/libNsdl/src -c -o libnsdl.info
+genhtml -o coverage -t "lwm2mtestapplication coverage" --num-spaces 4 testapp.info libcoap.info libnsdl.info lwm2mlinux.info mbedtls.info
+lcov --base-directory ../../ --directory ../../output/gcc_linux/source -z
+lcov --base-directory ../../ --directory ../../output/lwm2m-client-linux/source -z
+lcov --base-directory ../../ --directory ../../output/lwm2m-client-mbedtls/source -z
+lcov --base-directory ../../../../nsdl-c --directory ../../../../nsdl-c/output/gcc_/source/libCoap/src -z
+lcov --base-directory ../../../../nsdl-c --directory ../../../../nsdl-c/output/gcc_/source/libNsdl/src -z
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/lwm2mtestapplication/lwm2mtest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,859 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "lwm2mtest.h"
+#include "ns_types.h"
+#include "ns_cmdline.h"
+
+M2MLWClient::M2MLWClient()
+: _security(NULL),
+  _interface(NULL),
+  _device(NULL),
+  _bootstrapped(false),
+  _error(false),
+  _registered(false),
+  _unregistered(false),
+  _registration_updated(false)
+{
+}
+
+M2MLWClient::~M2MLWClient()
+{
+    if(_interface) {
+        delete _interface;
+    }
+    if(_security) {
+        delete _security;
+    }
+    if( _register_security){
+        delete _register_security;
+    }
+}
+
+
+bool M2MLWClient::create_interface(int32_t param_count,
+                      const char *endpoint,
+                      const char *resource_type,
+                      const int32_t lifetime,
+                      const uint16_t listen_port,
+                      const char *domain,
+                      const uint8_t binding_mode,
+                      const uint8_t network_interface)
+{
+    if(_interface) {
+        delete _interface;
+        _interface = NULL;
+    }
+    String ep;
+    String rt;
+    String dmn;
+    if(endpoint) {
+        ep += endpoint;
+    }
+    if(resource_type) {
+        rt += resource_type;
+    }
+    if(domain) {
+        dmn += domain;
+    }
+
+    // Binding mode cannot be higher than 0x07 since it is an enum, check M2MInterface::BindingMode
+    if(binding_mode > 0x07) {
+        return false;
+    }
+
+    switch (param_count) {
+        case 0:
+            _interface = M2MInterfaceFactory::create_interface(*this, ep, rt);
+            break;
+        case 1:
+            _interface = M2MInterfaceFactory::create_interface(*this, ep, rt, lifetime);
+            break;
+        case 2:
+            _interface = M2MInterfaceFactory::create_interface(*this, ep, rt, lifetime, listen_port);
+            break;
+        case 3:
+            _interface = M2MInterfaceFactory::create_interface(*this, ep, rt, lifetime, listen_port, dmn);
+            break;
+        case 4:
+            _interface = M2MInterfaceFactory::create_interface(*this, ep, rt, lifetime, listen_port, dmn, (M2MInterface::BindingMode)binding_mode);
+            break;
+        case 5:
+            _interface = M2MInterfaceFactory::create_interface(*this, ep, rt, lifetime, listen_port, dmn, (M2MInterface::BindingMode)binding_mode, (M2MInterface::NetworkStack)network_interface);
+            break;
+    }
+    return (_interface == NULL) ? false : true;
+}
+
+bool M2MLWClient::create_bootstrap_object(const char *coap_bootstrap_address)
+{
+    bool success = false;
+    String address;
+    if(coap_bootstrap_address) {
+        address += coap_bootstrap_address;
+    }
+    if(_security) {
+        delete _security;
+    }
+    _security = M2MInterfaceFactory::create_security(M2MSecurity::Bootstrap);
+    if(_security) {
+        if(_security->set_resource_value(M2MSecurity::M2MServerUri, address) &&
+           _security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity)) {
+            success = true;
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_register_object(const char *coap_register_address, bool useSecureConn)
+{
+    bool success = false;
+    String address;
+    if(coap_register_address) {
+        address += coap_register_address;
+    }
+    if(_register_security) {
+        delete _register_security;
+    }
+    _register_security = M2MInterfaceFactory::create_security(M2MSecurity::M2MServer);
+    if(_register_security) {
+        if( !useSecureConn ){
+            if(_register_security->set_resource_value(M2MSecurity::M2MServerUri, address) &&
+               _register_security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity)) {
+                success = true;
+            }
+        }else{
+            if(_register_security->set_resource_value(M2MSecurity::M2MServerUri, address) &&
+               _register_security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::Certificate) &&
+               _register_security->set_resource_value(M2MSecurity::ServerPublicKey,server_cert,server_cert_len) &&
+               _register_security->set_resource_value(M2MSecurity::PublicKey,cert,cert_len) &&
+               _register_security->set_resource_value(M2MSecurity::Secretkey,key,key_len) ){
+                success = true;
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::test_bootstrap()
+{
+    bool success = false;
+    if(_interface) {
+        _interface->bootstrap(_security);
+        success = true;
+    }
+    return success;
+}
+
+bool M2MLWClient::create_device_object(M2MDevice::DeviceResource resource,
+                                       const char *value)
+{
+    bool success = false;
+    String value_string;
+    if(value) {
+        value_string += value;
+    }
+    if(!_device) {
+        _device = M2MInterfaceFactory::create_device();
+    }
+    if(_device) {
+
+        if(_device->create_resource(resource,value_string)){
+            success = true;
+        } else {
+            success = _device->set_resource_value(resource,value);
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_device_object()
+{
+    bool success = false;
+    if(!_device) {
+        _device = M2MInterfaceFactory::create_device();
+        success = true;
+    }
+    return success;
+}
+
+bool M2MLWClient::create_device_object(M2MDevice::DeviceResource resource,
+                          int64_t value)
+{
+    bool success = false;
+    if(!_device) {
+        _device = M2MInterfaceFactory::create_device();
+    }
+    if(_device) {
+        if(_device->create_resource(resource,value)) {
+            success = true;
+        } else {
+            success = _device->set_resource_value(resource, value);
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_device_object(M2MDevice::DeviceResource resource,
+                                       int64_t value,
+                                       uint16_t instance_id)
+{
+    bool success = false;
+    if(!_device) {
+        _device = M2MInterfaceFactory::create_device();
+    }
+    if(_device) {
+        if(_device->create_resource_instance(resource,value,instance_id)) {
+            success = true;
+        } else {
+            success = _device->set_resource_value(resource,
+                                                  value,
+                                                  instance_id);
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_firmware_object(M2MFirmware::FirmwareResource resource,
+                                       const char *value)
+{
+    bool success = false;
+    String value_string;
+    if(value) {
+        value_string += value;
+    }
+    if(!_firmware) {
+        _firmware = M2MInterfaceFactory::create_firmware();
+    }
+    if(_firmware) {
+        if(_firmware->create_resource(resource,value_string)){
+            success = true;
+        } else {
+            success = _firmware->set_resource_value(resource,value);
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_firmware_object()
+{
+    bool success = false;
+    if(!_firmware) {
+        _firmware = M2MInterfaceFactory::create_firmware();
+        success = true;
+    }    
+    return success;
+}
+
+bool M2MLWClient::create_firmware_object(M2MFirmware::FirmwareResource resource,
+                          int64_t value)
+{
+    bool success = false;
+    if(!_firmware) {
+        _firmware = M2MInterfaceFactory::create_firmware();
+    }
+    if(_firmware) {
+        if(_firmware->create_resource(resource,value)) {
+            success = true;
+        } else {
+            success = _firmware->set_resource_value(resource, value);            
+        }
+    }    
+    return success;
+}
+
+bool M2MLWClient::create_firmware_object(M2MFirmware::FirmwareResource resource,
+                                         const uint8_t *value,
+                                         const uint32_t length)
+{
+    bool success = false;
+    if(!_firmware) {
+        _firmware = M2MInterfaceFactory::create_firmware();
+    }
+    if(_firmware) {
+            success = _firmware->set_resource_value(resource, value, length);
+    }
+    return success;
+}
+
+void M2MLWClient::set_fw_execute_function()
+{
+    if(_firmware) {
+        M2MObjectInstance *inst = _firmware->object_instance(0);
+        if(inst) {
+            M2MResource *res = inst->resource("2");
+            if (res) {                
+                res->set_execute_function(execute_callback(
+                                              this,
+                                              &M2MLWClient::fw_execute_function));
+            }
+        }
+    }
+}
+
+bool M2MLWClient::create_object(const char *name,
+                                bool new_instance,
+                                uint8_t object_operation,
+                                uint8_t object_instance_operation,
+                                uint16_t object_instance_id,
+                                bool object_observable,
+                                bool object_instance_observable)
+{
+    bool success = false;
+    M2MObjectInstance *inst = NULL;
+    if(!_object) {
+        _object = M2MInterfaceFactory::create_object(name);
+        if(_object) {
+            _object->set_operation(int_to_operation(object_operation));
+            _object->set_observable(object_observable);
+            inst = _object->create_object_instance(object_instance_id);
+            if(inst) {
+                success = true;
+                inst->set_operation(int_to_operation(object_instance_operation));
+                inst->set_observable(object_instance_observable);
+            }
+        }
+    } else {
+        if(new_instance) {
+            inst = _object->create_object_instance(object_instance_id);
+            if(inst) {
+                success = true;
+                inst->set_operation(int_to_operation(object_instance_operation));
+                inst->set_observable(object_instance_observable);
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_static_resource_string(const char *name,
+                                                const char *value,
+                                                bool multiple_instance,
+                                                uint16_t object_instance)
+{
+    bool success = false;
+    String name_string;
+    if(name) {
+        name_string += name;
+    }
+    String value_string;
+    if(value) {
+        value_string += value;
+    }
+    if(_object) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            if(inst->create_static_resource(name,"resource",
+                                            M2MResourceInstance::STRING,
+                                            (const uint8_t*)value_string.c_str(),
+                                            value_string.size()) != NULL) {
+                success = true;
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_static_resource_int(const char *name,
+                                             int64_t value,
+                                             bool multiple_instance,
+                                             uint16_t object_instance)
+{
+    bool success = false;
+    String name_string;
+    String value_string;
+
+    if(name) {
+        name_string += name;
+    }
+
+    char value_buffer[20];
+    sprintf(value_buffer,"%ld",value);
+    value_string += value_buffer;
+
+    if(_object) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            if(inst->create_static_resource(name,"resource",
+                                            M2MResourceInstance::INTEGER,
+                                            (const uint8_t*)value_string.c_str(),
+                                            value_string.size()) != NULL) {
+                success = true;
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_dynamic_resource_string(const char *name,
+                                          bool observable,
+                                          bool multiple_instance,
+                                          uint16_t object_instance,
+                                          uint8_t resource_operation)
+{
+    bool success = false;
+    String name_string;
+    if(name) {
+        name_string += name;
+    }
+    if(_object) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            M2MResource *res = inst->create_dynamic_resource(name,"resource",
+                                                             M2MResourceInstance::STRING,
+                                                             observable, multiple_instance);
+            if(res) {
+                success = true;
+                res->set_operation(int_to_operation(resource_operation));
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_dynamic_resource_int(const char *name,
+                                          bool observable,
+                                          bool multiple_instance,
+                                          uint16_t object_instance,
+                                          uint8_t resource_operation)
+{
+    bool success = false;
+    String name_string;
+    if(name) {
+        name_string += name;
+    }
+    if(_object) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            M2MResource *res = inst->create_dynamic_resource(name,"resource",
+                                                             M2MResourceInstance::INTEGER,
+                                                             observable, multiple_instance);
+            if(res) {
+                success = true;
+                res->set_operation(int_to_operation(resource_operation));
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::set_resource_value(const char *name,
+                                          int32_t value,
+                                          uint16_t object_instance)
+{
+    bool success = false;
+    String name_string;
+    String value_string;
+    if(name) {
+        name_string += name;
+    }
+
+    char value_buffer[20];
+    sprintf(value_buffer,"%d",value);
+    value_string += value_buffer;
+
+    if(_object && name_string.length() > 0) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            M2MResource *res = inst->resource(name_string);
+            if (res) {
+                if (res->set_value((const uint8_t*)value_string.c_str(), value_string.size())) {
+                    success = true;
+                }
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::set_resource_value(const char *name,
+                                     const char *value,
+                                     uint16_t object_instance)
+{
+    bool success = false;
+    String name_string;
+    String value_string;
+    if(name) {
+        name_string += name;
+    }
+    if(value) {
+        value_string += value;
+    }
+
+    if(_object && name_string.length() > 0) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            M2MResource *res = inst->resource(name_string);
+            if (res) {
+                if (res->set_value((const uint8_t*)value_string.c_str(), value_string.size())) {
+                    success = true;
+                }
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_static_resource_instance_string(const char *name,
+                                                         const char *value,
+                                                         bool multiple_instance,
+                                                         uint16_t object_instance,
+                                                         uint16_t resource_instance)
+{
+    bool success = false;
+    String name_string;
+    if(name) {
+        name_string += name;
+    }
+    String value_string;
+    if(value) {
+        value_string += value;
+    }
+    if(_object) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            if(inst->create_static_resource_instance(name,"resource",
+                                                    M2MResourceInstance::STRING,
+                                                    (const uint8_t*)value_string.c_str(),
+                                                    value_string.size(),
+                                                    resource_instance) != NULL) {
+                success = true;
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_static_resource_instance_int(const char *name,
+                                                      int32_t value,
+                                                      bool multiple_instance,
+                                                      uint16_t object_instance,
+                                                      uint16_t resource_instance)
+{
+    bool success = false;
+    String name_string;
+    String value_string;
+
+    if(name) {
+        name_string += name;
+    }
+
+    char value_buffer[20];
+    sprintf(value_buffer,"%ld",value);
+    value_string += value_buffer;
+
+    if(_object) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            if(inst->create_static_resource_instance(name,"resource",
+                                                    M2MResourceInstance::INTEGER,
+                                                    (const uint8_t*)value_string.c_str(),
+                                                    value_string.size(),
+                                                    resource_instance) != NULL) {
+                success = true;
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_dynamic_resource_instance_int(const char *name,
+                                                   bool observable,
+                                                   bool multiple_instance,
+                                                   uint16_t object_instance,
+                                                   uint16_t resource_instance,
+                                                   uint8_t resource_instance_operation)
+{
+    bool success = false;
+    String name_string;
+    if(name) {
+        name_string += name;
+    }
+    if(_object) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            M2MResourceInstance *res = inst->create_dynamic_resource_instance(name,"resource",
+                                                                      M2MResourceInstance::INTEGER,
+                                                                      observable,
+                                                                      resource_instance);
+            if( res) {
+                success = true;
+                res->set_operation(int_to_operation(resource_instance_operation));
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::create_dynamic_resource_instance_string(const char *name,
+                                                   bool observable,
+                                                   bool multiple_instance,
+                                                   uint16_t object_instance,
+                                                   uint16_t resource_instance,
+                                                   uint8_t resource_instance_operation)
+{
+    bool success = false;
+    String name_string;
+    if(name) {
+        name_string += name;
+    }
+    if(_object) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            M2MResourceInstance *res = inst->create_dynamic_resource_instance(name,"resource",
+                                                                      M2MResourceInstance::STRING,
+                                                                      observable,
+                                                                      resource_instance);
+            if( res) {
+                success = true;
+                res->set_operation(int_to_operation(resource_instance_operation));
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::set_resource_instance_value(const char *name,
+                                              int32_t value,
+                                              uint16_t object_instance,
+                                              uint16_t resource_instance)
+{
+    bool success = false;
+    String name_string;
+    String value_string;
+    if(name) {
+        name_string += name;
+    }
+
+    char value_buffer[20];
+    sprintf(value_buffer,"%d",value);
+    value_string += value_buffer;
+
+    if(_object && name_string.length() > 0) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            M2MResource *res = inst->resource(name_string);
+            if (res) {
+                M2MResourceInstance *res_inst = res->resource_instance(resource_instance);
+                if(res_inst) {
+                    if (res_inst->set_value((const uint8_t*)value_string.c_str(), value_string.size())) {
+                        success = true;
+                    }
+                }
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::set_resource_instance_value(const char *name,
+                                              const char *value,
+                                              uint16_t object_instance,
+                                              uint16_t resource_instance)
+{
+    bool success = false;
+    String name_string;
+    String value_string;
+    if(name) {
+        name_string += name;
+    }
+    if(value) {
+        value_string += value;
+    }
+
+    if(_object && name_string.length() > 0) {
+        M2MObjectInstance *inst = _object->object_instance(object_instance);
+        if(inst) {
+            M2MResource *res = inst->resource(name_string);
+            if (res) {
+                M2MResourceInstance *res_inst = res->resource_instance(resource_instance);
+                if(res_inst) {
+                    if (res_inst->set_value((const uint8_t*)value_string.c_str(), value_string.size())) {
+                        success = true;
+                    }
+                }
+            }
+        }
+    }
+    return success;
+}
+
+bool M2MLWClient::test_register()
+{
+    bool success = false;
+    M2MObjectList object_list;
+    if(_device) {
+        object_list.push_back(_device);
+    }
+    if(_firmware) {
+        object_list.push_back(_firmware);
+    }
+    if(_object) {
+        object_list.push_back(_object);
+    }
+    if(_interface) {
+        _interface->register_object(_register_security,object_list);
+        success = true;
+    }
+    return success;
+}
+
+bool M2MLWClient::test_update_register(const uint32_t lifetime)
+{
+    bool success = false;
+    if(_interface && _register_security) {
+        success = true;
+        _interface->update_registration(_register_security,lifetime);
+    }
+    return success;
+}
+
+bool M2MLWClient::test_unregister()
+{
+    bool success = false;
+    if(_interface) {
+         success = true;
+        _interface->unregister_object(_register_security);
+    }
+    return success;
+}
+
+void M2MLWClient::bootstrap_done(M2MSecurity *server_object)
+{
+    if(server_object) {
+        _register_security = server_object;
+        _bootstrapped = true;
+        cmd_printf("\nBootstrapped\n");
+        cmd_ready( CMDLINE_RETCODE_SUCCESS );
+    }
+}
+
+void M2MLWClient::object_registered(M2MSecurity *security_object, const M2MServer &server_object)
+{
+    _registered = true;
+    cmd_printf("\nRegistered\n");
+    cmd_ready( CMDLINE_RETCODE_SUCCESS );
+}
+
+void M2MLWClient::object_unregistered(M2MSecurity *server_object)
+{
+    _unregistered = true;
+    if(_device) {
+        M2MDevice::delete_instance();
+        _device = NULL;
+    }
+    if(_object) {
+        delete _object;
+        _object = NULL;
+    }
+    if(_security) {
+        delete _security;
+        _security = NULL;
+    }
+    if(_register_security) {
+        delete _register_security;
+        _register_security = NULL;
+    }
+    cmd_printf("\nUnregistered\n");
+    cmd_ready( CMDLINE_RETCODE_SUCCESS );
+}
+
+void M2MLWClient::registration_updated(M2MSecurity *security_object,
+                                       const M2MServer &server_object)
+{
+    _registration_updated = true;
+    cmd_printf("\nregistration updated\n");
+    cmd_ready( CMDLINE_RETCODE_SUCCESS );
+}
+
+void M2MLWClient::error(M2MInterface::Error error)
+{
+    _error = true;
+    cmd_printf("\nError occured Error Code : %d\n", (int8_t)error);
+    cmd_ready( CMDLINE_RETCODE_SUCCESS );
+}
+
+void M2MLWClient::value_updated(M2MBase *base, M2MBase::BaseType type)
+{
+    cmd_printf("\nValue updated of Object name %s and Type \n",
+               base->name().c_str(), type);
+}
+
+M2MBase::Operation M2MLWClient::int_to_operation(uint8_t operation)
+{
+    M2MBase::Operation op = M2MBase::NOT_ALLOWED;
+    switch(operation) {
+        case 0:
+            op = M2MBase::NOT_ALLOWED;
+            break;
+        case 1:
+            op = M2MBase::GET_ALLOWED;
+            break;
+        case 2:
+            op = M2MBase::PUT_ALLOWED;
+            break;
+        case 3:
+            op = M2MBase::GET_PUT_ALLOWED;
+            break;
+        case 4:
+            op = M2MBase::POST_ALLOWED;
+            break;
+        case 5:
+            op = M2MBase::GET_POST_ALLOWED;
+            break;
+        case 6:
+            op = M2MBase::PUT_POST_ALLOWED;
+            break;
+        case 7:
+            op = M2MBase::GET_PUT_POST_ALLOWED;
+            break;
+        case 8:
+            op = M2MBase::DELETE_ALLOWED;
+            break;
+        default:
+            break;
+    }
+    return op;
+}
+
+void M2MLWClient::fw_execute_function(void *argument)
+{
+    if(argument) {
+        char* arguments = (char*)argument;
+        cmd_printf("Received %s!!\n", arguments);
+    }
+    cmd_printf("Firmware update executed\n");
+}
+
+void M2MLWClient::firmware_resource_int(int resource)
+{
+    cmd_printf("Firmware resource value int\n");
+    cmd_printf("%ld\n", _firmware->resource_value_int(static_cast<M2MFirmware::FirmwareResource>(resource)));
+}
+
+void M2MLWClient::firmware_resource_string(int resource)
+{
+    cmd_printf("Firmware resource value string\n");
+    cmd_printf("%s\n", _firmware->resource_value_string(static_cast<M2MFirmware::FirmwareResource>(resource)).c_str());
+}
+
+void M2MLWClient::firmware_resource_buffer()
+{
+    cmd_printf("Firmware resource value buffer\n");
+    uint8_t *value = 0;
+    uint32_t valueSize = _firmware->resource_value_buffer(M2MFirmware::Package, value);
+    cmd_printf("%s\n", value);
+    free(value);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/lwm2mtestapplication/lwm2mtest.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,244 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <unistd.h>
+#include "mbed-client/m2minterfacefactory.h"
+#include "mbed-client/m2minterface.h"
+#include "mbed-client/m2mdevice.h"
+#include "mbed-client/m2minterfaceobserver.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+#include "mbed-client/m2mfirmware.h"
+
+class M2MLWClient: public M2MInterfaceObserver {
+public:
+    M2MLWClient();
+
+    ~M2MLWClient();
+
+    bool create_interface(int32_t param_count,
+                          const char *endpoint,
+                          const char *resource_type,
+                          const int32_t lifetime,
+                          const uint16_t listen_port,
+                          const char *domain,
+                          const uint8_t binding_mode,
+                          const uint8_t network_interface);
+
+    bool create_bootstrap_object(const char *coap_bootstrap_address);
+
+    bool create_register_object(const char *coap_register_address, bool useSecureConn);
+
+    bool test_bootstrap();
+
+    bool create_device_object();
+
+    bool create_device_object(M2MDevice::DeviceResource resource,
+                              const char *value);
+
+    bool create_device_object(M2MDevice::DeviceResource resource,
+                              int64_t value,
+                              uint16_t instance_id);
+
+    bool create_device_object(M2MDevice::DeviceResource resource,
+                              int64_t value);
+
+    bool create_firmware_object();
+
+    bool create_firmware_object(M2MFirmware::FirmwareResource resource,
+                              const char *value);
+
+    bool create_firmware_object(M2MFirmware::FirmwareResource resource,
+                              int64_t value);
+
+    bool create_firmware_object(M2MFirmware::FirmwareResource resource,
+                                const uint8_t *value,
+                                const uint32_t length);
+
+    void firmware_resource_int(int resource);
+    void firmware_resource_string(int resource);
+
+    void firmware_resource_buffer();
+
+    bool create_object(const char *name,
+                       bool new_instance,
+                       uint8_t object_operation,
+                       uint8_t object_instance_operation,
+                       uint16_t object_instance_id,
+                       bool object_observable,
+                       bool object_instance_observable);
+
+    bool create_static_resource_string(const char *name,
+                                       const char *value,
+                                       bool multiple_instance,
+                                       uint16_t object_instance = 0);
+
+    bool create_static_resource_int(const char *name,
+                                    int64_t value,
+                                    bool multiple_instance,
+                                    uint16_t object_instance = 0);
+
+    bool create_dynamic_resource_int(const char *name,
+                                 bool observable,
+                                 bool multiple_instance,
+                                 uint16_t object_instance = 0,
+                                 uint8_t resource_operation = 1);
+    bool create_dynamic_resource_string(const char *name,
+                                 bool observable,
+                                 bool multiple_instance,
+                                 uint16_t object_instance = 0,
+                                 uint8_t resource_operation = 1);
+
+    bool set_resource_value(const char *name,
+                            int32_t value,
+                            uint16_t object_instance = 0);
+
+    bool set_resource_value(const char *name,
+                            const char *value,
+                            uint16_t object_instance = 0);
+
+    bool create_static_resource_instance_string(const char *name,
+                                                const char *value,
+                                                bool multiple_instance,
+                                                uint16_t object_instance = 0,
+                                                uint16_t resource_instance = 0);
+
+    bool create_static_resource_instance_int(const char *name,
+                                             int32_t value,
+                                             bool multiple_instance,
+                                             uint16_t object_instance = 0,
+                                             uint16_t resource_instance = 0);
+
+    bool create_dynamic_resource_instance_int(const char *name,
+                                          bool observable,
+                                          bool multiple_instance,
+                                          uint16_t object_instance = 0,
+                                          uint16_t resource_instance = 0,
+                                          uint8_t resource_instance_operation = 1);
+    bool create_dynamic_resource_instance_string(const char *name,
+                                          bool observable,
+                                          bool multiple_instance,
+                                          uint16_t object_instance = 0,
+                                          uint16_t resource_instance = 0,
+                                          uint8_t resource_instance_operation = 1);
+
+    bool set_resource_instance_value(const char *name,
+                                     int32_t value,
+                                     uint16_t object_instance = 0,
+                                     uint16_t resource_instance = 0);
+
+    bool set_resource_instance_value(const char *name,
+                                     const char *value,
+                                     uint16_t object_instance = 0,
+                                     uint16_t resource_instance = 0);
+
+    bool create_object_instance();
+
+    bool test_register();
+
+    bool test_update_register(const uint32_t lifetime);
+
+    bool test_unregister();
+
+    void bootstrap_done(M2MSecurity *server_object);
+
+    void object_registered(M2MSecurity *security_object, const M2MServer &server_object);
+
+    void object_unregistered(M2MSecurity *server_object);
+
+    void registration_updated(M2MSecurity *security_object, const M2MServer &server_object);
+
+    void error(M2MInterface::Error error);
+
+    void value_updated(M2MBase *base, M2MBase::BaseType type);
+
+    void set_fw_execute_function();
+
+private:
+
+    M2MBase::Operation int_to_operation(uint8_t operation);
+    void fw_execute_function(void *argument);
+
+
+private:
+
+    M2MInterface        *_interface;
+    M2MSecurity         *_security;
+    M2MSecurity         *_register_security;
+    M2MDevice           *_device;
+    M2MFirmware         *_firmware;
+    M2MObject           *_object;
+    bool                _bootstrapped;
+    bool                _error;
+    bool                _registered;
+    bool                _unregistered;
+    bool                _registration_updated;
+};
+
+
+const unsigned char psk[] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36};
+const size_t psk_len = sizeof( psk );
+const unsigned char psk_identity[] = {0x0F,0x0F};
+const size_t psk_identity_len = sizeof( psk_identity );
+
+const uint8_t server_cert[] = "-----BEGIN CERTIFICATE-----\r\n"
+"MIIBmDCCAT6gAwIBAgIEVUCA0jAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJGSTEN\r\n"
+"MAsGA1UEBwwET3VsdTEMMAoGA1UECgwDQVJNMQwwCgYDVQQLDANJb1QxETAPBgNV\r\n"
+"BAMMCEFSTSBtYmVkMB4XDTE1MDQyOTA2NTc0OFoXDTE4MDQyOTA2NTc0OFowSzEL\r\n"
+"MAkGA1UEBhMCRkkxDTALBgNVBAcMBE91bHUxDDAKBgNVBAoMA0FSTTEMMAoGA1UE\r\n"
+"CwwDSW9UMREwDwYDVQQDDAhBUk0gbWJlZDBZMBMGByqGSM49AgEGCCqGSM49AwEH\r\n"
+"A0IABLuAyLSk0mA3awgFR5mw2RHth47tRUO44q/RdzFZnLsAsd18Esxd5LCpcT9w\r\n"
+"0tvNfBv4xJxGw0wcYrPDDb8/rjujEDAOMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0E\r\n"
+"AwIDSAAwRQIhAPAonEAkwixlJiyYRQQWpXtkMZax+VlEiS201BG0PpAzAiBh2RsD\r\n"
+"NxLKWwf4O7D6JasGBYf9+ZLwl0iaRjTjytO+Kw==\r\n"
+"-----END CERTIFICATE-----\r\n";
+
+const uint8_t cert[] = "-----BEGIN CERTIFICATE-----\r\n"
+"MIICTDCCAbWgAwIBAgIJAKI3S+LGklSGMA0GCSqGSIb3DQEBCwUAMD8xCzAJBgNV\r\n"
+"BAYTAkZJMRMwEQYDVQQIDApTb21lLVN0YXRlMQ0wCwYDVQQHDARPdWx1MQwwCgYD\r\n"
+"VQQKDANBUk0wHhcNMTUwNjExMTI0NTU1WhcNMTYwNjEwMTI0NTU1WjA/MQswCQYD\r\n"
+"VQQGEwJGSTETMBEGA1UECAwKU29tZS1TdGF0ZTENMAsGA1UEBwwET3VsdTEMMAoG\r\n"
+"A1UECgwDQVJNMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBt8ag12ILm2pn\r\n"
+"RHUc2yMBXpdzspDwVV3VDaNTRXypVUOq/nxJc6zr8yG/Pvga2/XVijWQDLABHVhV\r\n"
+"PoeulzXVSEHRR2bR2lhqulLzdUzPYJ+yJd4+082akoxdzoom8ms2LFlgiXO7lyBg\r\n"
+"1t74xjEQapCkr7Tdl2pD9OTUrcfoEwIDAQABo1AwTjAdBgNVHQ4EFgQUHK0O4iK7\r\n"
+"Rv8AsxAqRDlY3TSHWtUwHwYDVR0jBBgwFoAUHK0O4iK7Rv8AsxAqRDlY3TSHWtUw\r\n"
+"DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQAPVLihYN65DEeYdf7gDAdP\r\n"
+"MNH5RxsQlHdktQkYWcUewe3hvOf8yZUBbmO5OeEQmy5Ca2H1QhUuw+kWHo1l/K9g\r\n"
+"DpR1xoDACeycBd/6tAHfaFzTEEDC9Ug839EAHDrbI4ihrPEbP6hyRIaUIM4IojXf\r\n"
+"zuqwOcobS3idv8a9Npuohw==\r\n"
+"-----END CERTIFICATE-----\r\n";
+
+const uint8_t key[] = "-----BEGIN PRIVATE KEY-----\r\n"
+"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMG3xqDXYgubamdE\r\n"
+"dRzbIwFel3OykPBVXdUNo1NFfKlVQ6r+fElzrOvzIb8++Brb9dWKNZAMsAEdWFU+\r\n"
+"h66XNdVIQdFHZtHaWGq6UvN1TM9gn7Il3j7TzZqSjF3OiibyazYsWWCJc7uXIGDW\r\n"
+"3vjGMRBqkKSvtN2XakP05NStx+gTAgMBAAECgYEAlRimNxsu6jIXJh4paSk8ewxb\r\n"
+"0v+n0GJT0uwpPakotofaihxOepYejIfX/IMxoDKVtmImsZUiTelRGGMFORpGomS7\r\n"
+"3Pb9awfn1yWiYja9MF7+pgFtXj6LxcB5rcxrP8s9rCs+kEq8yl/khGXmlwlpacUm\r\n"
+"Pdg1rEHriykk/5dlyKkCQQD9zpgQKN87bQNOVSgFSNsrwCjEN2MvVUC6ycqVYqQd\r\n"
+"oQZrO2lJuf57Jn7kRKJgfqqImwLYaohn5A9gKiqszo+fAkEAw2REr8L9aLoRPe5Q\r\n"
+"4+lYCmNmxJjBbJoRviSlxx+p5dxK+8H4J+bnFUWzORFJP0+Bjhii2UHGBoMjuP2s\r\n"
+"e8xDDQJADm0IrZp1Hb6TeodSkAJVGsaASq7PP2h8FmHT1uvVYi293Khy0pL0yPEm\r\n"
+"MzlHdW6dqMgOwFhFyonm6dNbu5i+BwJBALSPKfIKDMcEev5yBgo3Dga7iLJQPx4u\r\n"
+"2gqOLyvtlME3a4tu2fV1qUG9ITuxP7DjteMr3QFLiMVn1lETCpt0TNkCQGIvyjdV\r\n"
+"RzYnzLDMulXCsuRBjs0C75KoZrcPPQ416SZFtYASsOl3P0Ih5jgt/1aPmth3Yson\r\n"
+"GdnBOWyKzadLmz8=\r\n"
+"-----END PRIVATE KEY-----\r\n";
+
+const size_t server_cert_len = sizeof( server_cert );
+const size_t cert_len = sizeof( cert );
+const size_t key_len = sizeof( key );
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/lwm2mtestapplication/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+//stack
+#include "eventOS_event.h"
+#include "eventOS_scheduler.h"
+
+//mbed-client-libservice
+#include "randLIB.h"
+#include "nsdynmemLIB.h"
+#include "mbed-trace/mbed_trace.h"
+#include "ns_cmdline.h"
+
+
+//application
+#include "cmd_commands.h"
+
+#define APP_DEV_HEAP_SIZE 30000
+
+void eventOS_scheduler_idle(void)
+{
+    eventOS_scheduler_wait();
+}
+
+/*Global variables*/
+
+uint8_t app_defined_stack_heap[APP_DEV_HEAP_SIZE];
+
+void app_heap_error_handler(heap_fail_t event)
+{
+    switch (event)
+    {
+        case NS_DYN_MEM_NULL_FREE:
+            tracef(TRACE_LEVEL_ERROR, "mem", "Dyn mem error:NULL_FREE");
+            break;
+        case NS_DYN_MEM_DOUBLE_FREE:
+            tracef(TRACE_LEVEL_ERROR, "mem", "Dyn mem error:DOUBLE_FREE");
+            break;
+
+        case NS_DYN_MEM_ALLOCATE_SIZE_NOT_VALID:
+            tracef(TRACE_LEVEL_ERROR, "mem", "Dyn mem error:SIZE_NOT_VALID");
+            break;
+        case NS_DYN_MEM_POINTER_NOT_VALID:
+            tracef(TRACE_LEVEL_ERROR, "mem", "Dyn mem error:POINTER_NOT_VALID");
+            break;
+
+        case NS_DYN_MEM_HEAP_SECTOR_CORRUPTED:
+            tracef(TRACE_LEVEL_ERROR, "mem", "Dyn mem error:SECTOR_CORRUPTED");
+            break;
+
+        case NS_DYN_MEM_HEAP_SECTOR_UNITIALIZED:
+            tracef(TRACE_LEVEL_ERROR, "mem", "Dyn mem error:SECTOR_UNITIALIZED");
+            break;
+        default:
+      tracef(TRACE_LEVEL_ERROR, "mem", "Dyn mem error:UNKNOWN!");
+            break;
+    }
+    while(1);
+}
+
+int app_time_i=0;
+char* time_now(size_t size)
+{
+  static char str[10] = {0};
+  sprintf(str, "[%04d]", app_time_i++);
+  return str;
+}
+
+void trace_printer(const char* str)
+{
+  printf("%s\r\n", str);
+  cmd_output();
+  fflush(stdout);
+}
+void cmd_printer(const char *str)
+{
+  cmd_printf("%s", str);
+  fflush(stdout);
+}
+
+void custom_cmd_response_out(const char* fmt, va_list ap)
+{
+  vprintf(fmt, ap);
+  fflush(stdout);
+}
+
+mem_stat_t  memory_heap_stat;
+/**
+ * \brief Application infinite loop.
+ */
+int main(void)
+{
+    ns_dyn_mem_init(app_defined_stack_heap, APP_DEV_HEAP_SIZE, app_heap_error_handler, &memory_heap_stat);
+    eventOS_scheduler_init();
+    mbed_trace_init();
+    mbed_trace_print_function_set( trace_printer );
+    mbed_trace_cmdprint_function_set( cmd_printer );
+    mbed_trace_prefix_function_set( time_now );
+    mbed_trace_config_set(TRACE_MODE_COLOR|TRACE_ACTIVE_LEVEL_DEBUG|TRACE_CARRIAGE_RETURN);
+    cmd_init( &custom_cmd_response_out );
+
+    initialize_app_commands(0);
+
+    eventOS_scheduler_run();
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient-smokeTest/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,497 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "sockets/UDPSocket.h"
+#include "EthernetInterface.h"
+#include "test_env.h"
+#include "mbed-client/m2minterfacefactory.h"
+#include "mbed-client/m2minterfaceobserver.h"
+#include "mbed-client/m2mdevice.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2minterface.h"
+#include "testconfig.h"
+
+// TODO: Remove when yotta supports init.
+#include "lwipv4_init.h"
+
+// Minar for event scheduling
+#include "minar/minar.h"
+
+using namespace mbed::util;
+const String &MANUFACTURER = "ARM";
+const String &TYPE = "type";
+
+static bool test_result = false;
+
+// Dynamic resource variables
+const String &DYNAMIC_RESOURCE_NAME = "Dynamic";
+const String &DYNAMIC_RESOURCE_TYPE = "DynamicType";
+const String &STATIC_RESOURCE_NAME = "Static";
+const String &STATIC_RESOURCE_TYPE = "StaticType";
+const uint8_t STATIC_VALUE[] = "Static value";
+
+//TODO: should this be configured in .json conf file, and communicated via host test to here?
+int CALLBACK_TIMEOUT = 5;
+int MINAR_DELAY = 10000;
+
+#define SUITE_TEST_INFO(test_name, info)		printf("Suite-%s: %s\n", test_name, info)
+#define SUITE_TEST_RESULT(test_name, result)	printf("Suite-%s: result %s\n", test_name, result ? "PASSED" : "FAILED")
+#define SUITE_RESULT(result)					printf("Suite: result %s\n", result ? "success" : "failure")
+
+
+class MbedClient: public M2MInterfaceObserver {
+public:
+    MbedClient(TestConfig *test_config){
+        _interface = NULL;
+        _register_security = NULL;
+        _resource_object = NULL;
+        _bootstrapped = false;
+        _error = false;
+        _registered = false;
+        _unregistered = false;
+        _registration_updated = false;
+        _resource_value = 0;
+        _object = NULL;
+        _test_config = test_config;
+    }
+
+    virtual ~MbedClient() {
+        if(_interface) {
+            delete _interface;
+        }
+        if( _register_security){
+            delete _register_security;
+        }
+    }
+
+    bool create_interface() {
+        bool success = false;
+         // Creates M2MInterface using which endpoint can
+         // setup its name, resource type, life time, connection mode,
+         // Currently only LwIPv4 is supported.
+         _interface = M2MInterfaceFactory::create_interface( *this,
+                                                   _test_config->get_endpoint_name(),
+                                                   _test_config->get_endpoint_type(),
+                                                   _test_config->get_lifetime(),
+                                                   _test_config->get_port(),
+												   _test_config->get_domain(),
+                                                   M2MInterface::UDP,
+                                                   M2MInterface::LwIP_IPv4,
+                                                   "");
+         if (_interface) {
+             success = true;
+         }
+
+         return success;
+    }
+
+    bool bootstrap_successful() {
+        return _bootstrapped;
+    }
+
+    M2MSecurity* create_bootstrap_object() {
+        // Creates bootstrap server object with Bootstrap server address and other parameters
+        // required for client to connect to bootstrap server.
+        M2MSecurity *security = M2MInterfaceFactory::create_security(M2MSecurity::Bootstrap);
+        if(security) {
+            security->set_resource_value(M2MSecurity::M2MServerUri, _test_config->get_bootstrap_server());
+            security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity);
+        }
+        return security;
+    }
+
+    void test_bootstrap(M2MSecurity *security) {
+        if(_interface) {
+             // Bootstrap function.
+            _interface->bootstrap(security);
+        }
+    }
+
+    bool register_successful() {
+        return _registered;
+    }
+
+    bool unregister_successful() {
+        return _unregistered;
+    }
+
+    bool update_register_successful() {
+        return _registration_updated;
+    }
+
+    void check_result(const char* result) {
+        if(_registered && _registration_updated && _unregistered) {
+            SUITE_TEST_RESULT(result, true);
+            test_result = true;
+        } else {
+           SUITE_TEST_RESULT(result, false);
+           test_result = false;
+        }
+        minar::Scheduler::stop();
+    }
+
+    M2MSecurity* create_register_object() {
+        // Creates server object with LWM2M server address and other parameters
+        // required for client to connect to LWM2M server.
+        M2MSecurity *security = M2MInterfaceFactory::create_security(M2MSecurity::M2MServer);
+        if(security) {
+            security->set_resource_value(M2MSecurity::M2MServerUri, _test_config->get_mds_server());
+            //security->set_resource_value(M2MSecurity::M2MServerUri, "ds-test.dev.mbed.com");
+            security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity);
+        }
+        return security;
+    }
+
+    void test_register(M2MObjectList object_list){
+        if(_interface) {
+            // Register function
+            _interface->register_object(_register_security, object_list);
+        }
+    }
+
+    void test_update_register(const uint32_t lifetime)
+    {
+        if(_interface && _register_security) {
+            _interface->update_registration(_register_security,lifetime);
+        }        
+    }
+
+    void test_unregister(){
+        if(_interface) {
+            // Unregister function
+            _interface->unregister_object(NULL);
+        }
+    }
+
+    void set_register_object(M2MSecurity *&register_object){
+        if(_register_security) {
+            delete _register_security;
+            _register_security = NULL;
+        }
+        _register_security = register_object;
+    }
+
+    M2MDevice* create_device_object() {
+        M2MDevice *device = M2MInterfaceFactory::create_device();
+        if (device) {
+            device->create_resource(M2MDevice::Manufacturer, MANUFACTURER);
+            device->create_resource(M2MDevice::DeviceType, TYPE);
+        }
+        return device;
+    }
+
+    M2MObject* create_generic_object() {
+        _object = M2MInterfaceFactory::create_object("Test");
+        if(_object) {
+            M2MObjectInstance* inst = _object->create_object_instance();
+            if(inst) {
+                    M2MResource* res = inst->create_dynamic_resource("D","ResourceTest",
+                                                                     M2MResourceInstance::INTEGER,
+                                                                     true);
+                    char buffer[20];
+                    int size = sprintf(buffer,"%d",_resource_value);
+                    res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+                    res->set_value((const uint8_t*)buffer,
+                                   (const uint32_t)size);
+                    _resource_value++;
+
+                    inst->create_static_resource("S",
+                                                 "ResourceTest",
+                                                 M2MResourceInstance::STRING,
+                                                 STATIC_VALUE,
+                                                 sizeof(STATIC_VALUE)-1);
+            }
+        }
+        return _object;
+    }
+
+    //Callback from mbed client stack when the bootstrap
+    // is successful, it returns the mbed Device Server object
+    // which will be used for registering the resources to
+    // mbed Device server.
+    void bootstrap_done(M2MSecurity *server_object){
+        if(server_object) {
+            _bootstrapped = true;
+            _error = false;
+        }
+    }
+
+    //Callback from mbed client stack when the registration
+    // is successful, it returns the mbed Device Server object
+    // to which the resources are registered and registered objects.
+    void object_registered(M2MSecurity */*security_object*/, const M2MServer &/*server_object*/){
+        _registered = true;
+    }
+
+    //Callback from mbed client stack when the registration update
+        // is successful, it returns the mbed Device Server object
+        // to which the resources are registered and registered objects.
+    void registration_updated(M2MSecurity */*security_object*/, const M2MServer &/*server_object*/){
+            _registration_updated = true;
+        }
+
+    //Callback from mbed client stack when the unregistration
+    // is successful, it returns the mbed Device Server object
+    // to which the resources were unregistered.
+    void object_unregistered(M2MSecurity */*server_object*/){
+        _unregistered = true;        
+    }
+
+    //Callback from mbed client stack if any value has changed
+    // during PUT operation. Object and its type is passed in
+    // the callback.
+    void value_updated(M2MBase *base, M2MBase::BaseType type) {
+        printf("\nValue updated of Object name %s and Type %d\n",
+               base->name().c_str(), type);
+    }
+
+    //Callback from mbed client stack if any error is encountered
+    // during any of the LWM2M operations. Error type is passed in
+    // the callback.
+    void error(M2MInterface::Error error){
+        _error = true;
+        printf("\nError occured %d\n", error);
+    }
+
+private:
+
+    M2MInterface    	*_interface;
+    M2MSecurity         *_register_security;
+    M2MObject			*_resource_object;
+    M2MObject           *_object;
+    volatile bool       _bootstrapped;
+    volatile bool       _error;
+    volatile bool       _registered;
+    volatile bool       _unregistered;
+    volatile bool       _registration_updated;
+    int                 _resource_value;
+    TestConfig			*_test_config;
+};
+
+#define WAIT_CALLBACK(X, TIMEOUT)                                  \
+{int _timer = 0;\
+while ( 1 )       \
+    { 													  \
+      _result &= (X);									  \
+      if (_result) {									  \
+          SUITE_TEST_INFO(_tn, "callback done");          \
+          break;										  \
+      }													  \
+      wait_ms(1000); _timer+=1;                           \
+      if (_timer >= TIMEOUT) {                            \
+          SUITE_TEST_INFO(_tn, "ERROR: callback timeout");\
+          break;                                          \
+      }                                                   \
+    }}
+
+bool test_bootStrap(TestConfig *test_config) {
+    bool _result = true;
+    const char* _tn = "TC1_bootStrap";
+
+    SUITE_TEST_INFO(_tn, "STARTED");
+
+    // Instantiate the class which implements
+    // mbed Client API
+    MbedClient *mbed_client = new MbedClient(test_config);
+
+    SUITE_TEST_INFO(_tn, "client done");
+
+    // Create LWM2M Client API interface to manage bootstrap,
+    // register and unregister
+    _result &= mbed_client->create_interface();
+
+    // Create LWM2M bootstrap object specifying bootstrap server
+    // information.
+    M2MSecurity* security_object = mbed_client->create_bootstrap_object();
+
+    // Issue bootstrap command.
+    mbed_client->test_bootstrap(security_object);
+    SUITE_TEST_INFO(_tn, "bootstrap done");
+
+    SUITE_TEST_INFO(_tn, "waiting bootstrap callback...");
+    // Wait till the bootstrap callback is called successfully.
+    // Callback comes in bootstrap_done()
+    WAIT_CALLBACK(mbed_client->bootstrap_successful(), CALLBACK_TIMEOUT);
+
+    // Delete security object created for bootstrapping
+    if(security_object) {
+        delete security_object;
+    }
+
+    if (mbed_client) {
+        delete mbed_client;
+    }
+
+    SUITE_TEST_RESULT(_tn, _result);
+    return _result;
+}
+
+void test_deviceObject(TestConfig *test_config) {
+    const char* _tn = "TC2_deviceObject";
+
+    SUITE_TEST_INFO(_tn, "STARTED");
+
+    // Instantiate the class which implements
+    // LWM2M Client API
+    MbedClient mbed_client(test_config);// = new MbedClient(test_config);
+
+    SUITE_TEST_INFO(_tn, "client done");
+
+    // Create LWM2M Client API interface for M2M server
+    mbed_client.create_interface();
+
+    M2MSecurity *register_object = mbed_client.create_register_object();
+
+    mbed_client.set_register_object(register_object);
+
+    // Create LWM2M device object specifying device resources
+    // as per OMA LWM2M specification.
+    M2MDevice* device_object = mbed_client.create_device_object();
+
+    // Add the device object that we want to register
+    // into the list and pass the list for register API.
+    M2MObjectList object_list;
+    object_list.push_back(device_object);
+
+    // Issue register command.
+
+    FunctionPointer1<void, M2MObjectList> tr(&mbed_client, &MbedClient::test_register);
+    minar::Scheduler::postCallback(tr.bind(object_list));
+
+    // Issue update register command.
+
+    uint32_t lifetime = 2222;
+
+    FunctionPointer1<void, uint32_t> ur(&mbed_client, &MbedClient::test_update_register);
+    minar::Scheduler::postCallback(ur.bind(lifetime)).delay(MINAR_DELAY);
+
+    // Issue unregister command.
+
+    FunctionPointer0<void> tur(&mbed_client, &MbedClient::test_unregister);
+    minar::Scheduler::postCallback(tur.bind()).delay(MINAR_DELAY*2);
+
+    FunctionPointer1<void, const char*> cus(&mbed_client, &MbedClient::check_result);
+    minar::Scheduler::postCallback(cus.bind(_tn)).delay(MINAR_DELAY*3);
+
+    minar::Scheduler::start();
+
+    // Delete device object created for registering device
+    // resources.
+
+    if(device_object) {
+        M2MDevice::delete_instance();
+    }
+}
+
+bool test_resource(TestConfig *test_config) {
+    bool _result = true;
+    const char* _tn = "TC3_resource";
+    SUITE_TEST_INFO(_tn, "STARTED");
+
+    // Instantiate the class which implements LWM2M Client API
+    MbedClient mbed_client(test_config);
+    SUITE_TEST_INFO(_tn, "client done");
+
+    // Create LWM2M Client API interface for M2M server
+    _result &= mbed_client.create_interface();
+
+    M2MSecurity *register_object = mbed_client.create_register_object();
+
+    mbed_client.set_register_object(register_object);
+
+    // Create LWM2M device object specifying device resources
+    // as per OMA LWM2M specification.
+    M2MDevice* device_object = mbed_client.create_device_object();
+
+    // Create LWM2M generic object for resource
+    M2MObject* resource_object = mbed_client.create_generic_object();
+
+    // Add the device object that we want to register
+    // into the list and pass the list for register API.
+    M2MObjectList object_list;
+    object_list.push_back(device_object);
+    object_list.push_back(resource_object);
+
+    // Issue register command.
+
+    FunctionPointer1<void, M2MObjectList> tr(&mbed_client, &MbedClient::test_register);
+    minar::Scheduler::postCallback(tr.bind(object_list));
+
+    // Issue update register command.
+
+    uint32_t lifetime = 2222;
+
+    FunctionPointer1<void, uint32_t> ur(&mbed_client, &MbedClient::test_update_register);
+    minar::Scheduler::postCallback(ur.bind(lifetime)).delay(MINAR_DELAY);
+
+    // Issue unregister command.
+
+    FunctionPointer0<void> tur(&mbed_client, &MbedClient::test_unregister);
+    minar::Scheduler::postCallback(tur.bind()).delay(MINAR_DELAY*2);
+
+    FunctionPointer1<void, const char*> cus(&mbed_client, &MbedClient::check_result);
+    minar::Scheduler::postCallback(cus.bind(_tn)).delay(MINAR_DELAY*3);
+
+    minar::Scheduler::start();
+
+    // Delete device object created for registering device resources.
+    if(device_object) {
+        M2MDevice::delete_instance();
+    }
+
+    // Delete resource object for registering resources.
+    if(resource_object) {
+        delete resource_object;
+    }
+}
+
+
+
+void app_start(int /*argc*/, char* /*argv*/[]) {
+    DigitalOut _led = DigitalOut(LED3);
+    _led = 1;
+
+    MBED_HOSTTEST_TIMEOUT(40);
+    MBED_HOSTTEST_SELECT(mbed_client_auto);
+    MBED_HOSTTEST_DESCRIPTION(LWM2MClient Smoke Test);
+    MBED_HOSTTEST_START("LWM2MClientSmokeTest");
+
+    // This sets up the network interface configuration which will be used
+    // by LWM2M Client API to communicate with mbed Device server.
+    EthernetInterface eth;
+    eth.init(); //Use DHCP
+    eth.connect();
+
+    lwipv4_socket_init();
+
+    // Create test config object, and setup with unique MAC address
+    TestConfig test_config;
+    test_config.setup();
+
+    _led = 0;
+
+    // Bootstrap test is uncommented, until it will be supported.
+    //result &= test_bootStrap(&test_config);
+    test_deviceObject(&test_config);
+    test_resource(&test_config);
+
+    _led = 1;
+
+    // Disconnect and teardown the network interface
+    eth.disconnect();
+
+    SUITE_RESULT(test_result);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient-smokeTest/security.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,115 @@
+
+
+/*
+
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+
+ * SPDX-License-Identifier: Apache-2.0
+
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+
+ * not use this file except in compliance with the License.
+
+ * You may obtain a copy of the License at
+
+ *
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ *
+
+ * Unless required by applicable law or agreed to in writing, software
+
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+ * See the License for the specific language governing permissions and
+
+ * limitations under the License.
+
+ */
+
+#ifndef __SECURITY_H__
+
+#define __SECURITY_H__
+
+ 
+
+#include <inttypes.h>
+
+ 
+
+#define MBED_DOMAIN "eeforester"
+
+#define MBED_ENDPOINT_NAME "a3e4593c-4e03-492a-9e32-320550fe442e"
+
+ 
+
+const unsigned char PSK[] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36};
+
+const unsigned char PSK_IDENTITY[] = {0x0F,0x0F};
+
+ 
+
+const uint8_t SERVER_CERT[] = "-----BEGIN CERTIFICATE-----\r\n"
+
+"MIIBmDCCAT6gAwIBAgIEVUCA0jAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJGSTEN\r\n"
+
+"MAsGA1UEBwwET3VsdTEMMAoGA1UECgwDQVJNMQwwCgYDVQQLDANJb1QxETAPBgNV\r\n"
+
+"BAMMCEFSTSBtYmVkMB4XDTE1MDQyOTA2NTc0OFoXDTE4MDQyOTA2NTc0OFowSzEL\r\n"
+
+"MAkGA1UEBhMCRkkxDTALBgNVBAcMBE91bHUxDDAKBgNVBAoMA0FSTTEMMAoGA1UE\r\n"
+
+"CwwDSW9UMREwDwYDVQQDDAhBUk0gbWJlZDBZMBMGByqGSM49AgEGCCqGSM49AwEH\r\n"
+
+"A0IABLuAyLSk0mA3awgFR5mw2RHth47tRUO44q/RdzFZnLsAsd18Esxd5LCpcT9w\r\n"
+
+"0tvNfBv4xJxGw0wcYrPDDb8/rjujEDAOMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0E\r\n"
+
+"AwIDSAAwRQIhAPAonEAkwixlJiyYRQQWpXtkMZax+VlEiS201BG0PpAzAiBh2RsD\r\n"
+
+"NxLKWwf4O7D6JasGBYf9+ZLwl0iaRjTjytO+Kw==\r\n"
+
+"-----END CERTIFICATE-----\r\n";
+
+ 
+
+const uint8_t CERT[] = "-----BEGIN CERTIFICATE-----\r\n"
+
+"MIIBjDCCATCgAwIBAgIEFGtTOzAMBggqhkjOPQQDAgUAMBAxDjAMBgNVBAMTBW5z\r\n"
+
+"cDAxMB4XDTE1MDkwMjE0MjE0MVoXDTE2MDkwMTE0MjE0MVowgYcxODA2BgNVBAMT\r\n"
+
+"L2EzZTQ1OTNjLTRlMDMtNDkyYS05ZTMyLTMyMDU1MGZlNDQyZS9lZWZvcmVzdGVy\r\n"
+
+"MQwwCgYDVQQLEwNBUk0xEjAQBgNVBAoTCW1iZWQgdXNlcjENMAsGA1UEBxMET3Vs\r\n"
+
+"dTENMAsGA1UECBMET3VsdTELMAkGA1UEBhMCRkkwWTATBgcqhkjOPQIBBggqhkjO\r\n"
+
+"PQMBBwNCAAQuxHp1a1V8pCVziDMhuuSt5zbrduEe+0y+UXuPMj2k6uoEuVCYI4+k\r\n"
+
+"JU6WSfVYAFSVVka0JhIMKB289xU2G5+EMAwGCCqGSM49BAMCBQADSAAwRQIgeWQK\r\n"
+
+"su17hcY+fQxY8H8BgrGy0z+RKJr51WZl2LR9ZSwCIQDKPx9LYzwSw8y1hugpcsc/\r\n"
+
+"ul5++FNrYwLE44l3pW87yw==\r\n"
+
+"-----END CERTIFICATE-----\r\n";
+
+ 
+
+const uint8_t KEY[] = "-----BEGIN PRIVATE KEY-----\r\n"
+
+"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg9RFcAVbOKG1LbIF8\r\n"
+
+"kNqA8dznz4wnD+B/ghYNQMHtL/qhRANCAAQuxHp1a1V8pCVziDMhuuSt5zbrduEe\r\n"
+
+"+0y+UXuPMj2k6uoEuVCYI4+kJU6WSfVYAFSVVka0JhIMKB289xU2G5+E\r\n"
+
+"-----END PRIVATE KEY-----\r\n";
+
+ 
+
+#endif //__SECURITY_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient-smokeTest/testconfig.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include "mbed-client/m2mstring.h"
+#include "testconfig.h"
+#include "security.h"
+
+TestConfig::TestConfig() { }
+
+TestConfig::~TestConfig() {	}
+
+/*void TestConfig::set_endpoint_name(const char *name) {
+	_endpointName = m2m::String("lwm2mtest-");
+	_endpointName += name;
+
+	printf("MBED: endpoint=%s", _endpointName.c_str());
+}*/
+
+void TestConfig::setup() {
+	_bootstrapAddress = m2m::String("dummy");
+	_mdsAddress = m2m::String("coap://ds-test.dev.mbed.com:5683");
+	_endpointName = m2m::String(MBED_ENDPOINT_NAME);
+	_endpointType = m2m::String("test2");
+	_domain = m2m::String(MBED_DOMAIN);
+	_port = 5683;
+	_lifetime = 2222;
+
+	printf("MBED: test configuration \n");
+	printf("mds_server=%s\n", _mdsAddress.c_str());
+	printf("endpoint name=%s\n", _endpointName.c_str());
+	printf("endpoint type=%s\n", _endpointType.c_str());
+	printf("domain=%s\n", _domain.c_str());
+	printf("port=%d\n", _port);
+	printf("lifetime=%d\n\n", _lifetime);
+}
+
+m2m::String& TestConfig::get_domain() {
+	return _domain;
+}
+
+m2m::String& TestConfig::get_bootstrap_server() {
+	return _bootstrapAddress;
+}
+
+m2m::String& TestConfig::get_mds_server() {
+	return _mdsAddress;
+}
+
+m2m::String& TestConfig::get_endpoint_name() {
+	return _endpointName;
+}
+
+m2m::String& TestConfig::get_endpoint_type() {
+	return _endpointType;
+}
+
+int TestConfig::get_port() {
+	//return _port++;
+	return _port;
+}
+
+int TestConfig::get_lifetime() {
+	return _lifetime;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient-smokeTest/testconfig.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef TESTCONFIG_H_
+#define TESTCONFIG_H_
+
+class TestConfig {
+
+public:
+
+	TestConfig();
+	~TestConfig();
+
+	void setup();
+	void set_endpoint_name(const char *name);
+
+	m2m::String& get_domain();
+	m2m::String& get_bootstrap_server();
+	m2m::String& get_mds_server();
+	m2m::String& get_endpoint_name();
+	m2m::String& get_endpoint_type();
+	int get_port();
+	int get_lifetime();
+
+private:
+
+	int _port;
+	int _lifetime;
+	m2m::String _domain;
+	m2m::String _endpointName;
+	m2m::String _endpointType;
+	m2m::String _bootstrapAddress;
+	m2m::String _mdsAddress;
+
+};
+
+#endif /* TESTCONFIG_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/CThunk.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,202 @@
+/* General C++ Object Thunking class
+ *
+ * - allows direct callbacks to non-static C++ class functions
+ * - keeps track for the corresponding class instance
+ * - supports an optional context parameter for the called function
+ * - ideally suited for class object receiving interrupts (NVIC_SetVector)
+ *
+ * Copyright (c) 2014-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __CTHUNK_H__
+#define __CTHUNK_H__
+
+#define CTHUNK_ADDRESS 1
+
+#if defined(__CORTEX_M3) || defined(__CORTEX_M4) || defined(__thumb2__)
+#define CTHUNK_VARIABLES volatile uint32_t code[1]
+/**
+* CTHUNK disassembly for Cortex-M3/M4 (thumb2):
+* * ldm.w pc,{r0,r1,r2,pc}
+*
+* This instruction loads the arguments for the static thunking function to r0-r2, and
+* branches to that function by loading its address into PC.
+*
+* This is safe for both regular calling and interrupt calling, since it only touches scratch registers
+* which should be saved by the caller, and are automatically saved as part of the IRQ context switch.
+*/
+#define CTHUNK_ASSIGMENT m_thunk.code[0] = 0x8007E89F
+
+#elif defined(__CORTEX_M0PLUS) || defined(__CORTEX_M0)
+/*
+* CTHUNK disassembly for Cortex M0 (thumb):
+* * push {r0,r1,r2,r3,r4,lr} save touched registers and return address
+* * movs r4,#4 set up address to load arguments from (immediately following this code block) (1)
+* * add r4,pc set up address to load arguments from (immediately following this code block) (2)
+* * ldm r4!,{r0,r1,r2,r3} load arguments for static thunk function
+* * blx r3 call static thunk function
+* * pop {r0,r1,r2,r3,r4,pc} restore scratch registers and return from function
+*/
+#define CTHUNK_VARIABLES volatile uint32_t code[3]
+#define CTHUNK_ASSIGMENT do {                              \
+                             m_thunk.code[0] = 0x2404B51F; \
+                             m_thunk.code[1] = 0xCC0F447C; \
+                             m_thunk.code[2] = 0xBD1F4798; \
+                         } while (0)
+
+#else
+#error "Target is not currently suported."
+#endif
+
+/* IRQ/Exception compatible thunk entry function */
+typedef void (*CThunkEntry)(void);
+
+template<class T>
+class CThunk
+{
+    public:
+        typedef void (T::*CCallbackSimple)(void);
+        typedef void (T::*CCallback)(void* context);
+
+        inline CThunk(T *instance)
+        {
+            init(instance, NULL, NULL);
+        }
+
+        inline CThunk(T *instance, CCallback cb)
+        {
+            init(instance, cb, NULL);
+        }
+
+        ~CThunk() {
+
+        }
+
+        inline CThunk(T *instance, CCallbackSimple cb)
+        {
+            init(instance, (CCallback)cb, NULL);
+        }
+
+        inline CThunk(T &instance, CCallback cb)
+        {
+            init(instance, cb, NULL);
+        }
+
+        inline CThunk(T &instance, CCallbackSimple cb)
+        {
+            init(instance, (CCallback)cb, NULL);
+        }
+
+        inline CThunk(T &instance, CCallback cb, void* ctx)
+        {
+            init(instance, cb, ctx);
+        }
+
+        inline void callback(CCallback cb)
+        {
+            m_callback = cb;
+        }
+
+        inline void callback(CCallbackSimple cb)
+        {
+            m_callback = (CCallback)cb;
+        }
+
+        inline void context(void* ctx)
+        {
+            m_thunk.context = (uint32_t)ctx;
+        }
+
+        inline void context(uint32_t ctx)
+        {
+            m_thunk.context = ctx;
+        }
+        
+        inline uint32_t entry(void)
+        {
+            return (((uint32_t)&m_thunk)|CTHUNK_ADDRESS);
+        }
+
+        /* get thunk entry point for connecting rhunk to an IRQ table */
+        inline operator CThunkEntry(void)
+        {
+            return (CThunkEntry)entry();
+        }
+
+        /* get thunk entry point for connecting rhunk to an IRQ table */
+        inline operator uint32_t(void)
+        {
+            return entry();
+        }
+
+        /* simple test function */
+        inline void call(void)
+        {
+            (((CThunkEntry)(entry()))());
+        }
+
+    private:
+        T* m_instance;
+        volatile CCallback m_callback;
+
+// TODO: this needs proper fix, to refactor toolchain header file and all its use
+// PACKED there is not defined properly for IAR
+#if defined (__ICCARM__)
+        typedef __packed struct
+        {
+            CTHUNK_VARIABLES;
+            volatile uint32_t instance;
+            volatile uint32_t context;
+            volatile uint32_t callback;
+            volatile uint32_t trampoline;
+        }  CThunkTrampoline;
+#else
+        typedef struct
+        {
+            CTHUNK_VARIABLES;
+            volatile uint32_t instance;
+            volatile uint32_t context;
+            volatile uint32_t callback;
+            volatile uint32_t trampoline;
+        } __attribute__((__packed__)) CThunkTrampoline;
+#endif
+
+        static void trampoline(T* instance, void* ctx, CCallback* cb)
+        {
+            if(instance && *cb) {
+                (static_cast<T*>(instance)->**cb)(ctx);
+            }
+        }
+
+        volatile CThunkTrampoline m_thunk;
+
+        inline void init(T *instance, CCallback cb, void* ctx)
+        {
+            /* remember callback - need to add this level of redirection
+               as pointer size for member functions differs between platforms */
+            m_callback = cb;
+
+            /* populate thunking trampoline */
+//            CTHUNK_ASSIGMENT;
+//            m_thunk.context = (uint32_t)ctx;
+//            m_thunk.instance = (uint32_t)instance;
+//            m_thunk.callback = (uint32_t)&m_callback;
+//            m_thunk.trampoline = (uint32_t)&trampoline;
+
+//            __ISB();
+//            __DSB();
+        }
+};
+
+#endif/*__CTHUNK_H__*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/FunctionPointer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,604 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_FUNCTIONPOINTER_H
+#define MBED_FUNCTIONPOINTER_H
+
+#include <string.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <new>
+#include "FunctionPointerBase.h"
+#include "FunctionPointerBind.h"
+
+namespace mbed {
+/** A class for storing and calling a pointer to a static or member void function without arguments
+ */
+template <typename R>
+class FunctionPointer0 : public FunctionPointerBase<R>{
+public:
+    typedef R(*static_fp)(void);
+    typedef struct arg_struct{
+    } ArgStruct;
+    /** Create a FunctionPointer, attaching a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    FunctionPointer0(static_fp function = 0):
+        FunctionPointerBase<R>()
+    {
+        attach(function);
+    }
+
+    /** Create a FunctionPointer, attaching a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    FunctionPointer0(T *object, R (T::*member)(void)):
+        FunctionPointerBase<R>()
+    {
+        attach(object, member);
+    }
+
+    /** Attach a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    void attach(static_fp function) {
+        FunctionPointerBase<R>::_object = reinterpret_cast<void*>(function);
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer0::staticcaller;
+    }
+
+    /** Attach a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(void)) {
+        FunctionPointerBase<R>::_object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(void)>(FunctionPointerBase<R>::_member) = member;
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer0::membercaller<T>;
+    }
+
+    /** Call the attached static or member function
+     */
+    R call(){
+        return FunctionPointerBase<R>::call(NULL);
+    }
+
+    FunctionPointerBind<R> bind() {
+        FunctionPointerBind<R> fp;
+        fp.bind(&FunctionPointerBase<R>::_nullops, (ArgStruct *) NULL, this);
+        return fp;
+    }
+
+    static_fp get_function()const {
+        return reinterpret_cast<static_fp>(FunctionPointerBase<R>::_object);
+    }
+
+    R operator ()(void) {
+        return call();
+    }
+
+private:
+    template<typename T>
+    static R membercaller(void *object, uintptr_t *member, void *arg) {
+        (void) arg;
+        T* o = static_cast<T*>(object);
+        R (T::**m)(void) = reinterpret_cast<R (T::**)(void)>(member);
+        return (o->**m)();
+    }
+    static R staticcaller(void *object, uintptr_t *member, void *arg) {
+        (void) arg;
+        (void) member;
+        static_fp f = reinterpret_cast<static_fp>(object);
+        return f();
+    }
+};
+
+/* If we had variaditic templates, this wouldn't be a problem, but until C++11 is enabled, we are stuck with multiple classes... */
+
+/** A class for storing and calling a pointer to a static or member void function with one argument
+ */
+template <typename R, typename A1>
+class FunctionPointer1 : public FunctionPointerBase<R> {
+protected:
+    typedef struct arg_struct{
+        A1 a1;
+        arg_struct(const A1 *b1) {
+            a1 = *b1;
+        }
+    } ArgStruct;
+
+public:
+    typedef R(*static_fp)(A1);
+    /** Create a FunctionPointer, attaching a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    FunctionPointer1(static_fp function = 0) {
+        attach(function);
+    }
+
+    /** Create a FunctionPointer, attaching a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    FunctionPointer1(T *object, R (T::*member)(A1)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    void attach(static_fp function) {
+        FunctionPointerBase<R>::_object = reinterpret_cast<void*>(function);
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer1::staticcaller;
+    }
+
+    /** Attach a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(A1))
+    {
+        FunctionPointerBase<R>::_object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(A1)>(FunctionPointerBase<R>::_member) = member;
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer1::membercaller<T>;
+    }
+
+    FunctionPointerBind<R> bind(const A1 &a1) {
+        FunctionPointerBind<R> fp;
+        fp.bind(&_fp1_ops, (ArgStruct *) NULL, this, &a1);
+        return fp;
+    }
+
+
+    /** Call the attached static or member function
+     */
+    R call(A1 a1)
+    {
+        ArgStruct Args(&a1);
+        return FunctionPointerBase<R>::call(&Args);
+    }
+
+    static_fp get_function()const
+    {
+        return reinterpret_cast<static_fp>(FunctionPointerBase<R>::_object);
+    }
+
+    R operator ()(A1 a) {
+        return call(a);
+    }
+
+private:
+    template<typename T>
+    static R membercaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        T* o = static_cast<T*>(object);
+        R (T::**m)(A1) = reinterpret_cast<R (T::**)(A1)>(member);
+        return (o->**m)(Args->a1);
+    }
+    static R staticcaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        (void) member;
+        static_fp f = reinterpret_cast<static_fp>(object);
+        return f(Args->a1);
+    }
+/*    static void constructor(void * dest, va_list args) {
+        new(dest) ArgStruct(va_arg(args,A1*));
+    }
+    static void copy_constructor(void *dest , void* src) {
+        ArgStruct *src_args = static_cast<ArgStruct *>(src);
+        new(dest) ArgStruct(&(src_args->a1));
+    }
+    static void destructor(void *args) {
+        ArgStruct *argstruct = static_cast<ArgStruct *>(args);
+        argstruct->~arg_struct();
+    }
+*/
+protected:
+    static const struct FunctionPointerBase<R>::ArgOps _fp1_ops;
+};
+
+template <typename R, typename A1>
+const struct FunctionPointerBase<R>::ArgOps FunctionPointer1<R,A1>::_fp1_ops = {
+    FunctionPointer1<R,A1>::constructor,
+    FunctionPointer1<R,A1>::copy_constructor,
+    FunctionPointer1<R,A1>::destructor
+};
+
+
+/** A class for storing and calling a pointer to a static or member void function with two arguments
+ */
+template <typename R, typename A1, typename A2>
+class FunctionPointer2 : public FunctionPointerBase<R> {
+protected:
+    typedef struct arg_struct{
+        A1 a1;
+        A2 a2;
+        arg_struct(const A1 *b1, const A2 *b2) {
+            a1 = *b1;
+            a2 = *b2;
+        }
+    } ArgStruct;
+
+public:
+    typedef R(*static_fp)(A1, A2);
+    /** Create a FunctionPointer, attaching a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    FunctionPointer2(static_fp function = 0) {
+        attach(function);
+    }
+
+    /** Create a FunctionPointer, attaching a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    FunctionPointer2(T *object, R (T::*member)(A1, A2)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    void attach(static_fp function) {
+        FunctionPointerBase<R>::_object = reinterpret_cast<void*>(function);
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer2::staticcaller;
+    }
+
+    /** Attach a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(A1, A2))
+    {
+        FunctionPointerBase<R>::_object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(A1, A2)>(FunctionPointerBase<R>::_member) = member;
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer2::membercaller<T>;
+    }
+
+    FunctionPointerBind<R> bind(const A1 &a1, const A2 &a2) {
+        FunctionPointerBind<R> fp;
+        fp.bind(&_fp2_ops, (ArgStruct *) NULL, this, &a1, &a2);
+        return fp;
+    }
+
+
+    /** Call the attached static or member function
+     */
+    R call(A1 a1, A2 a2)
+    {
+        ArgStruct Args(&a1, &a2);
+        return FunctionPointerBase<R>::call(&Args);
+    }
+
+    static_fp get_function()const
+    {
+        return reinterpret_cast<static_fp>(FunctionPointerBase<R>::_object);
+    }
+
+    R operator ()(A1 a1, A2 a2) {
+        return call(a1, a2);
+    }
+
+private:
+    template<typename T>
+    static R membercaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        T* o = static_cast<T*>(object);
+        R (T::**m)(A1, A2) = reinterpret_cast<R (T::**)(A1, A2)>(member);
+        return (o->**m)(Args->a1, Args->a2);
+    }
+    static R staticcaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        (void) member;
+        static_fp f = reinterpret_cast<static_fp>(object);
+        return f(Args->a1, Args->a2);
+    }
+/*    static void constructor(void * dest, va_list args) {
+        A1 *a1 = va_arg(args, A1*);
+        A2 *a2 = va_arg(args, A2*);
+        new(dest) ArgStruct(a1, a2);
+    }
+    static void copy_constructor(void *dest , void* src) {
+        ArgStruct *src_args = static_cast<ArgStruct *>(src);
+        new(dest) ArgStruct(&(src_args->a1), &(src_args->a2));
+    }
+    static void destructor(void *args) {
+        ArgStruct *argstruct = static_cast<ArgStruct *>(args);
+        argstruct->~arg_struct();
+    }
+*/
+protected:
+    static const struct FunctionPointerBase<R>::ArgOps _fp2_ops;
+};
+
+template <typename R, typename A1, typename A2>
+const struct FunctionPointerBase<R>::ArgOps FunctionPointer2<R,A1,A2>::_fp2_ops = {
+    FunctionPointer2<R,A1,A2>::constructor,
+    FunctionPointer2<R,A1,A2>::copy_constructor,
+    FunctionPointer2<R,A1,A2>::destructor
+};
+
+/** A class for storing and calling a pointer to a static or member void function with three arguments
+ */
+template <typename R, typename A1, typename A2, typename A3>
+class FunctionPointer3 : public FunctionPointerBase<R> {
+protected:
+    typedef struct arg_struct{
+        A1 a1;
+        A2 a2;
+        A3 a3;
+        arg_struct(const A1 *b1, const A2 *b2, const A3* b3) {
+            a1 = *b1;
+            a2 = *b2;
+            a3 = *b3;
+        }
+    } ArgStruct;
+
+public:
+    typedef R(*static_fp)(A1, A2, A3);
+    /** Create a FunctionPointer, attaching a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    FunctionPointer3(static_fp function = 0) {
+        attach(function);
+    }
+
+    /** Create a FunctionPointer, attaching a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    FunctionPointer3(T *object, R (T::*member)(A1, A2, A3)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    void attach(static_fp function) {
+        FunctionPointerBase<R>::_object = reinterpret_cast<void*>(function);
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer3::staticcaller;
+    }
+
+    /** Attach a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(A1, A2, A3))
+    {
+        FunctionPointerBase<R>::_object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(A1, A2, A3)>(FunctionPointerBase<R>::_member) = member;
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer3::membercaller<T>;
+    }
+
+    FunctionPointerBind<R> bind(const A1 &a1, const A2 &a2, const A3 &a3) {
+        FunctionPointerBind<R> fp;
+        fp.bind(&_fp3_ops, (ArgStruct *) NULL, this, &a1, &a2, &a3);
+        return fp;
+    }
+
+
+    /** Call the attached static or member function
+     */
+    R call(A1 a1, A2 a2, A3 a3)
+    {
+        ArgStruct Args(&a1, &a2, &a3);
+        return FunctionPointerBase<R>::call(&Args);
+    }
+
+    static_fp get_function()const
+    {
+        return reinterpret_cast<static_fp>(FunctionPointerBase<R>::_object);
+    }
+
+    R operator ()(A1 a1, A2 a2, A3 a3) {
+        return call(a1, a2, a3);
+    }
+
+private:
+    template<typename T>
+    static R membercaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        T* o = static_cast<T*>(object);
+        R (T::**m)(A1, A2, A3) = reinterpret_cast<R (T::**)(A1, A2, A3)>(member);
+        return (o->**m)(Args->a1, Args->a2, Args->a3);
+    }
+    static R staticcaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        (void) member;
+        static_fp f = reinterpret_cast<static_fp>(object);
+        return f(Args->a1, Args->a2, Args->a3);
+    }
+/*    static void constructor(void * dest, va_list args) {
+        A1 *a1 = va_arg(args, A1*);
+        A2 *a2 = va_arg(args, A2*);
+        A3 *a3 = va_arg(args, A3*);
+        new(dest) ArgStruct(a1, a2, a3);
+    }
+    static void copy_constructor(void *dest , void* src) {
+        ArgStruct *src_args = static_cast<ArgStruct *>(src);
+        new(dest) ArgStruct(&(src_args->a1), &(src_args->a2), &(src_args->a3));
+    }
+    static void destructor(void *args) {
+        ArgStruct *argstruct = static_cast<ArgStruct *>(args);
+        argstruct->~arg_struct();
+    }
+*/
+protected:
+    static const struct FunctionPointerBase<R>::ArgOps _fp3_ops;
+};
+
+template <typename R, typename A1, typename A2, typename A3>
+const struct FunctionPointerBase<R>::ArgOps FunctionPointer3<R,A1,A2,A3>::_fp3_ops = {
+    FunctionPointer3<R,A1,A2,A3>::constructor,
+    FunctionPointer3<R,A1,A2,A3>::copy_constructor,
+    FunctionPointer3<R,A1,A2,A3>::destructor
+};
+
+/** A class for storing and calling a pointer to a static or member void function with four arguments
+ */
+template <typename R, typename A1, typename A2, typename A3, typename A4>
+class FunctionPointer4 : public FunctionPointerBase<R> {
+protected:
+    typedef struct arg_struct{
+        A1 a1;
+        A2 a2;
+        A3 a3;
+        A4 a4;
+        arg_struct(const A1 *b1, const A2 *b2, const A3* b3, const A4* b4) {
+            a1 = *b1;
+            a2 = *b2;
+            a3 = *b3;
+            a4 = *b4;
+        }
+    } ArgStruct;
+
+public:
+    typedef R(*static_fp)(A1, A2, A3, A4);
+    /** Create a FunctionPointer, attaching a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    FunctionPointer4(static_fp function = 0) {
+        attach(function);
+    }
+
+    /** Create a FunctionPointer, attaching a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    FunctionPointer4(T *object, R (T::*member)(A1, A2, A3, A4)) {
+        attach(object, member);
+    }
+
+    /** Attach a static function
+     *
+     *  @param function The void static function to attach (default is none)
+     */
+    void attach(static_fp function) {
+        FunctionPointerBase<R>::_object = reinterpret_cast<void*>(function);
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer4::staticcaller;
+    }
+
+    /** Attach a member function
+     *
+     *  @param object The object pointer to invoke the member function on (i.e. the this pointer)
+     *  @param function The address of the void member function to attach
+     */
+    template<typename T>
+    void attach(T *object, R (T::*member)(A1, A2, A3, A4))
+    {
+        FunctionPointerBase<R>::_object = static_cast<void*>(object);
+        *reinterpret_cast<R (T::**)(A1, A2, A3, A4)>(FunctionPointerBase<R>::_member) = member;
+        FunctionPointerBase<R>::_membercaller = &FunctionPointer4::membercaller<T>;
+    }
+
+    FunctionPointerBind<R> bind(const A1 &a1, const A2 &a2, const A3 &a3, const A4 &a4) {
+        FunctionPointerBind<R> fp;
+        fp.bind(&_fp4_ops, (ArgStruct *) NULL, this, &a1, &a2, &a3, &a4);
+        return fp;
+    }
+
+
+    /** Call the attached static or member function
+     */
+    R call(A1 a1, A2 a2, A3 a3, A4 a4)
+    {
+        ArgStruct Args(&a1, &a2, &a3, &a4);
+        return FunctionPointerBase<R>::call(&Args);
+    }
+
+    static_fp get_function()const
+    {
+        return reinterpret_cast<static_fp>(FunctionPointerBase<R>::_object);
+    }
+
+    R operator ()(A1 a1, A2 a2, A3 a3, A4 a4) {
+        return call(a1, a2, a3, a4);
+    }
+
+private:
+    template<typename T>
+    static R membercaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        T* o = static_cast<T*>(object);
+        R (T::**m)(A1, A2, A3, A4) = reinterpret_cast<R (T::**)(A1, A2, A3, A4)>(member);
+        return (o->**m)(Args->a1, Args->a2, Args->a3, Args->a4);
+    }
+    static R staticcaller(void *object, uintptr_t *member, void *arg) {
+        ArgStruct *Args = static_cast<ArgStruct *>(arg);
+        (void) member;
+        static_fp f = reinterpret_cast<static_fp>(object);
+        return f(Args->a1, Args->a2, Args->a3, Args->a4);
+    }
+/*    static void constructor(void * dest, va_list args) {
+        A1 *a1 = va_arg(args, A1*);
+        A2 *a2 = va_arg(args, A2*);
+        A3 *a3 = va_arg(args, A3*);
+        A4 *a4 = va_arg(args, A4*);
+        new(dest) ArgStruct(a1, a2, a3, a4);
+    }
+    static void copy_constructor(void *dest , void* src) {
+        ArgStruct *src_args = static_cast<ArgStruct *>(src);
+        new(dest) ArgStruct(&(src_args->a1), &(src_args->a2), &(src_args->a3), &(src_args->a4));
+    }
+    static void destructor(void *args) {
+        ArgStruct *argstruct = static_cast<ArgStruct *>(args);
+        argstruct->~arg_struct();
+    }
+*/
+protected:
+    static const struct FunctionPointerBase<R>::ArgOps _fp4_ops;
+};
+
+template <typename R, typename A1, typename A2, typename A3, typename A4>
+const struct FunctionPointerBase<R>::ArgOps FunctionPointer4<R,A1,A2,A3,A4>::_fp4_ops = {
+    FunctionPointer4<R,A1,A2,A3,A4>::constructor,
+    FunctionPointer4<R,A1,A2,A3,A4>::copy_constructor,
+    FunctionPointer4<R,A1,A2,A3,A4>::destructor
+};
+
+typedef FunctionPointer0<void> FunctionPointer;
+//typedef FunctionPointer1<void, int> event_callback_t;
+
+} // namespace mbed
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/FunctionPointerBase.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_FUNCTIONPOINTERBASE_H
+#define MBED_FUNCTIONPOINTERBASE_H
+
+#include <string.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <stdarg.h>
+namespace mbed {
+
+template<typename R>
+class FunctionPointerBase {
+public:
+    operator bool(void) const {
+        return (_membercaller != NULL) && (_object != NULL);
+    }
+
+    /**
+     * Clears the current function pointer assignment
+     * After clear(), this instance will point to nothing (NULL)
+     */
+    virtual void clear() {
+        _membercaller = NULL;
+        _object = NULL;
+    }
+
+protected:
+    struct ArgOps {
+        void (*constructor)(void *, va_list);
+        void (*copy_args)(void *, void *);
+        void (*destructor)(void *);
+    };
+    void * _object; // object Pointer/function pointer
+    R (*_membercaller)(void *, uintptr_t *, void *);
+    // aligned raw member function pointer storage - converted back by registered _membercaller
+    uintptr_t _member[4];
+    static const struct ArgOps _nullops;
+
+protected:
+    FunctionPointerBase():_object(NULL), _membercaller(NULL) {}
+    FunctionPointerBase(const FunctionPointerBase<R> & fp) {
+        copy(&fp);
+    }
+    virtual ~FunctionPointerBase() {
+    }
+
+    /**
+     * Calls the member pointed to by object::member or (function)object
+     * @param arg
+     * @return
+     */
+    inline R call(void* arg) {
+        return _membercaller(_object, _member, arg);
+    }
+
+    void copy(const FunctionPointerBase<R> * fp) {
+        _object = fp->_object;
+        memcpy (_member, fp->_member, sizeof(_member));
+        _membercaller = fp->_membercaller;
+    }
+private:
+    static void _null_constructor(void * dest, va_list args) {(void) dest;(void) args;}
+    static void _null_copy_args(void *dest , void* src) {(void) dest; (void) src;}
+    static void _null_destructor(void *args) {(void) args;}
+
+};
+template<typename R>
+const struct FunctionPointerBase<R>::ArgOps FunctionPointerBase<R>::_nullops = {
+    FunctionPointerBase<R>::_null_constructor,
+    FunctionPointerBase<R>::_null_copy_args,
+    FunctionPointerBase<R>::_null_destructor
+};
+
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/FunctionPointerBind.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,112 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MBED_FUNCTIONPOINTERBIND_H__
+#define MBED_FUNCTIONPOINTERBIND_H__
+
+#include <string.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <assert.h>
+#include "FunctionPointerBase.h"
+
+#ifndef EVENT_STORAGE_SIZE
+#define EVENT_STORAGE_SIZE 32
+#endif
+
+#define MBED_STATIC_ASSERT(MBED_STATIC_ASSERT_FAILED,MSG)\
+    switch(0){\
+        case 0:case (MBED_STATIC_ASSERT_FAILED): \
+        break;}
+
+namespace mbed{
+
+template<typename R>
+class FunctionPointerBind : public FunctionPointerBase<R> {
+public:
+    // Call the Event
+    inline R call() {
+        return FunctionPointerBase<R>::call(static_cast<void *>(_storage));
+    }
+    FunctionPointerBind():
+        FunctionPointerBase<R>(),
+        _ops(&FunctionPointerBase<R>::_nullops)
+    {}
+
+    FunctionPointerBind(const FunctionPointerBind<R> & fp):
+        FunctionPointerBase<R>(),
+        _ops(&FunctionPointerBase<R>::_nullops) {
+        *this = fp;
+    }
+
+    virtual ~FunctionPointerBind() {
+        _ops->destructor(_storage);
+    }
+
+    FunctionPointerBind<R> & operator=(const FunctionPointerBind<R>& rhs) {
+        if (_ops != &FunctionPointerBase<R>::_nullops) {
+            _ops->destructor(_storage);
+        }
+        FunctionPointerBase<R>::copy(&rhs);
+        _ops = rhs._ops;
+        _ops->copy_args(_storage, (void *)rhs._storage);
+        return *this;
+    }
+
+    /**
+     * Clears the current binding, making this instance unbound
+     */
+    virtual void clear() {
+        if (_ops != &FunctionPointerBase<R>::_nullops) {
+            _ops->destructor(_storage);
+        }
+        _ops = &FunctionPointerBase<R>::_nullops;
+        FunctionPointerBase<R>::clear();
+    }
+
+    template<typename S>
+    FunctionPointerBind<R> & bind(const struct FunctionPointerBase<R>::ArgOps * ops , S * argStruct, FunctionPointerBase<R> *fp, ...) {
+        MBED_STATIC_ASSERT(sizeof(S) <= sizeof(_storage), ERROR: Arguments too large for FunctionPointerBind internal storage)
+        if (_ops != &FunctionPointerBase<R>::_nullops) {
+            _ops->destructor(_storage);
+        }
+        _ops = ops;
+        FunctionPointerBase<R>::copy(fp);
+        assert(this->_ops != NULL);
+        assert(this->_ops->constructor != NULL);
+        if (argStruct) {
+            this->_ops->copy_args(this->_storage, (void *)argStruct);
+        } else {
+            va_list args;
+            va_start(args, fp);
+            this->_ops->constructor(_storage, args);
+            va_end(args);
+        }
+        return *this;
+    }
+
+    R operator()() {
+        return call();
+    }
+
+protected:
+    const struct FunctionPointerBase<R>::ArgOps * _ops;
+    uint32_t _storage[(EVENT_STORAGE_SIZE+sizeof(uint32_t)-1)/sizeof(uint32_t)];
+};
+}
+
+#endif // MBED_FUNCTIONPOINTERBIND_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/Ticker.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TICKER_H
+#define TICKER_H
+
+namespace mbed
+{
+typedef uint64_t timestamp_t;
+
+    class Ticker{
+    public :
+        Ticker() {}
+        ~Ticker(){}
+
+        // Ticker
+        template<typename T>
+        void attach_us(T* tptr, void (T::*mptr)(void), timestamp_t){}
+
+        void detach();
+    };
+}
+
+#endif // TICKER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/mbed-net-socket-abstract/socket_api.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,164 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKET_ABSTRACT_SOCKET_API_H__
+#define __MBED_NET_SOCKET_ABSTRACT_SOCKET_API_H__
+
+#include <stdint.h>
+#include "socket_types.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef SOCKET_MAX_STACKS
+#define SOCKET_MAX_STACKS 2
+#endif
+
+typedef socket_error_t (*socket_init)();
+typedef socket_error_t (*socket_create)(struct socket *socket,
+        const socket_address_family_t af, const socket_proto_family_t pf,
+        socket_api_handler_t const handler);
+typedef socket_error_t (*socket_destroy)(struct socket *socket);
+typedef socket_error_t (*socket_close)(struct socket *socket);
+typedef socket_api_handler_t (*socket_periodic_task)(const struct socket * socket);
+typedef uint32_t (*socket_periodic_interval)(const struct socket * socket);
+typedef socket_error_t (*socket_resolve)(struct socket *socket, const char *address);
+typedef socket_error_t (*socket_connect)(struct socket *sock, const struct socket_addr *address, const uint16_t port);
+typedef socket_error_t (*socket_bind)(struct socket *socket, const struct socket_addr *address, const uint16_t port);
+typedef socket_error_t (*socket_str2addr)(const struct socket *socket, struct socket_addr *addr, const char *address);
+typedef socket_error_t (*socket_start_listen)(struct socket *socket, const uint32_t backlog);
+typedef socket_error_t (*socket_stop_listen)(struct socket *socket);
+typedef socket_error_t (*socket_accept)(struct socket *sock, socket_api_handler_t handler);
+typedef socket_error_t (*socket_reject)(struct socket *sock);
+typedef socket_error_t (*socket_send)(struct socket *socket, const void * buf, const size_t len);
+typedef socket_error_t (*socket_send_to)(struct socket *socket, const void * buf, const size_t len, const struct socket_addr *addr, const uint16_t port);
+typedef socket_error_t (*socket_recv)(struct socket *socket, void * buf, size_t *len);
+typedef socket_error_t (*socket_recv_from)(struct socket *socket, void * buf, size_t *len, struct socket_addr *addr, uint16_t *port);
+
+typedef socket_error_t (*socket_get_local_addr)(const struct socket *socket, struct socket_addr *addr);
+typedef socket_error_t (*socket_get_remote_addr)(const struct socket *socket, struct socket_addr *addr);
+typedef socket_error_t (*socket_get_local_port)(const struct socket *socket, uint16_t *port);
+typedef socket_error_t (*socket_get_remote_port)(const struct socket *socket, uint16_t *port);
+
+typedef uint8_t (*socket_is_connected)(const struct socket *socket);
+typedef uint8_t (*socket_is_bound)(const struct socket *socket);
+
+struct socket_api {
+    socket_stack_t              stack;
+    uint32_t                    version;
+    socket_init                 init;
+    socket_create               create;
+    socket_destroy              destroy;
+    socket_close                close;
+    socket_periodic_task        periodic_task;
+    socket_periodic_interval    periodic_interval;
+    socket_resolve              resolve;
+    socket_connect              connect;
+    socket_str2addr             str2addr;
+    socket_bind                 bind;
+    socket_start_listen         start_listen;
+    socket_stop_listen          stop_listen;
+    socket_accept               accept;
+    socket_reject               reject;
+    socket_send                 send;
+    socket_send_to              send_to;
+    socket_recv                 recv;
+    socket_recv_from            recv_from;
+    socket_is_connected         is_connected;
+    socket_is_bound             is_bound;
+    socket_get_local_addr       get_local_addr;
+    socket_get_remote_addr      get_remote_addr;
+    socket_get_local_port       get_local_port;
+    socket_get_remote_port      get_remote_port;
+};
+#define SOCKET_API_FIRST_PTR init
+#define SOCKET_API_LAST_PTR get_remote_port
+
+socket_error_t socket_register_stack(const struct socket_api * api);
+const char * socket_strerror(const socket_error_t err);
+const struct socket_api * socket_get_api(const socket_stack_t stack);
+
+static inline int socket_addr_is_ipv4(const struct socket_addr *addr)
+{
+    if ((addr->ipv6be[0] == 0) &&
+        (addr->ipv6be[1] == 0) &&
+        (addr->ipv6be[2] == 0)) {
+            return 1;
+    } else {
+        return 0;
+    }
+}
+static inline int socket_addr_is_any(const struct socket_addr *addr)
+{
+    if ((addr->ipv6be[0] == 0) &&
+        (addr->ipv6be[1] == 0) &&
+        (addr->ipv6be[2] == 0) &&
+        (addr->ipv6be[3] == 0)) {
+            return 1;
+    } else {
+        return 0;
+    }
+}
+static inline void socket_addr_set_ipv4_addr(struct socket_addr *addr, uint32_t ipv4addr)
+{
+    addr->ipv6be[0] = 0;
+    addr->ipv6be[1] = 0;
+    addr->ipv6be[2] = 0;
+    addr->ipv6be[3] = ipv4addr;
+}
+static inline uint32_t socket_addr_get_ipv4_addr(const struct socket_addr *addr)
+{
+    if (!socket_addr_is_ipv4(addr)) {
+        return 0;
+    }
+    return addr->ipv6be[3];
+}
+static inline const uint32_t * socket_addr_get_ipv4_addrp(const struct socket_addr *addr)
+{
+    if (!socket_addr_is_ipv4(addr)) {
+        return NULL;
+    }
+    return &addr->ipv6be[3];
+}
+static inline void socket_addr_set_any(struct socket_addr *addr)
+{
+    addr->ipv6be[0] = 0;
+    addr->ipv6be[1] = 0;
+    addr->ipv6be[2] = 0;
+    addr->ipv6be[3] = 0;
+}
+
+static inline void socket_addr_copy(struct socket_addr *dest, const struct socket_addr *src)
+{
+    (dest)->ipv6be[0] = (src)->ipv6be[0];
+    (dest)->ipv6be[1] = (src)->ipv6be[1];
+    (dest)->ipv6be[2] = (src)->ipv6be[2];
+    (dest)->ipv6be[3] = (src)->ipv6be[3];
+}
+static inline int socket_addr_cmp(const struct socket_addr *a, const struct socket_addr *b)
+{
+    return
+        a->ipv6be[0] != b->ipv6be[0] ||
+        a->ipv6be[1] != b->ipv6be[1] ||
+        a->ipv6be[2] != b->ipv6be[2] ||
+        a->ipv6be[3] != b->ipv6be[3];
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MBED_NET_SOCKET_ABSTRACT_SOCKET_API_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/mbed-net-socket-abstract/socket_types.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,181 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKET_ABSTRACT_SOCKET_TYPES_H__
+#define __MBED_NET_SOCKET_ABSTRACT_SOCKET_TYPES_H__
+
+#include <stddef.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef MBED_NET_LWIP
+#define MBED_NET_LWIP 1
+#endif
+
+typedef enum {
+    SOCKET_ERROR_NONE = 0,
+    SOCKET_ERROR_UNKNOWN,
+    SOCKET_ERROR_UNIMPLEMENTED,
+    SOCKET_ERROR_BUSY,
+    SOCKET_ERROR_NULL_PTR,
+    SOCKET_ERROR_BAD_FAMILY,
+    SOCKET_ERROR_TIMEOUT,
+    SOCKET_ERROR_BAD_ALLOC,
+    SOCKET_ERROR_NO_CONNECTION,
+    SOCKET_ERROR_SIZE,
+    SOCKET_ERROR_STACK_EXISTS,
+    SOCKET_ERROR_STACKS,
+    SOCKET_ERROR_BAD_STACK,
+    SOCKET_ERROR_BAD_ADDRESS,
+    SOCKET_ERROR_DNS_FAILED,
+    SOCKET_ERROR_WOULD_BLOCK,
+    SOCKET_ERROR_CLOSED,
+    SOCKET_ERROR_VALUE,
+    SOCKET_ERROR_ADDRESS_IN_USE,
+    SOCKET_ERROR_ALREADY_CONNECTED,
+    SOCKET_ERROR_ABORT,
+    SOCKET_ERROR_RESET,
+    SOCKET_ERROR_BAD_ARGUMENT,
+    SOCKET_ERROR_INTERFACE_ERROR,
+    SOCKET_ERROR_API_VERSION,
+    SOCKET_ERROR_NOT_BOUND,
+
+} socket_error_t;
+
+typedef enum {
+    SOCKET_ALLOC_HEAP = 0,
+    SOCKET_ALLOC_POOL_BEST,
+} socket_alloc_pool_t;
+
+typedef enum {
+    SOCKET_AF_UNINIT,
+    SOCKET_AF_INET4,
+    SOCKET_AF_INET6,
+    SOCKET_AF_MAX,
+} socket_address_family_t;
+
+typedef enum {
+    SOCKET_PROTO_UNINIT = 0,
+    SOCKET_DGRAM,
+    SOCKET_STREAM,
+    SOCKET_PROTO_MAX,
+} socket_proto_family_t;
+
+typedef enum {
+    SOCKET_EVENT_NONE = 0,
+    SOCKET_EVENT_ERROR,
+    SOCKET_EVENT_RX_DONE,
+    SOCKET_EVENT_TX_DONE,
+    SOCKET_EVENT_RX_ERROR,
+    SOCKET_EVENT_TX_ERROR,
+    SOCKET_EVENT_CONNECT,
+    SOCKET_EVENT_DISCONNECT,
+    SOCKET_EVENT_DNS,
+    SOCKET_EVENT_ACCEPT,
+} event_flag_t;
+
+typedef enum {
+    SOCKET_STATUS_IDLE      = 0,
+    SOCKET_STATUS_RX_BUSY   = 1 << 0,
+    SOCKET_STATUS_TX_BUSY   = 1 << 1,
+    SOCKET_STATUS_CONNECTED = 1 << 2,
+    SOCKET_STATUS_BOUND     = 1 << 3,
+} socket_status_t;
+
+typedef enum {
+    SOCKET_STACK_UNINIT = 0,
+    SOCKET_STACK_LWIP_IPV4,
+    SOCKET_STACK_LWIP_IPV6,
+    SOCKET_STACK_RESERVED,
+    SOCKET_STACK_NANOSTACK_IPV6,
+    SOCKET_STACK_PICOTCP,
+    SOCKET_STACK_MAX,
+} socket_stack_t;
+
+typedef enum {
+    SOCKET_BUFFER_UNINITIALISED = 0,
+    SOCKET_BUFFER_RAW,
+    SOCKET_BUFFER_LWIP_PBUF,
+    SOCKET_BUFFER_NANOSTACK_PBUF,
+} socket_buffer_type_t;
+
+struct socket_addr {
+    uint32_t ipv6be[4];
+};
+
+struct socket_buffer {
+    socket_buffer_type_t type;
+    const struct socket_buf_api *api;
+    void *impl;
+};
+
+struct socket_rawbuf {
+    void * buf;
+    size_t size;
+    size_t pos;
+};
+
+typedef void (*socket_api_handler_t)(void);
+typedef struct {
+    void * (*alloc)(void *,const size_t);
+    void (*dealloc)(void *, void *);
+    void *context;
+} socket_allocator_t;
+
+struct socket_tx_info {
+    uint16_t sentbytes;
+};
+
+struct socket_dns_info {
+  struct socket_addr addr; // A stack-specific socket address struct
+  const char *domain;
+};
+
+struct socket_accept_info {
+    void * newimpl;
+    uint8_t reject;
+};
+
+struct socket_event {
+    event_flag_t event;
+    struct socket *sock;
+    union {
+        struct socket_tx_info t;
+        socket_error_t e;
+        struct socket_dns_info d;
+        struct socket_accept_info a;
+    } i;
+};
+typedef struct socket_event socket_event_t;
+
+struct socket {
+    socket_api_handler_t handler;
+    socket_event_t *event; // TODO: (CThunk upgrade/Alpha3)
+    const struct socket_api *api;
+    void *impl;
+    socket_status_t status;
+    uint8_t family;
+    socket_stack_t stack;
+    void *rxBufChain; // TODO: Only required in some stacks, which do not support BSD-style buffering
+};
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __MBED_NET_SOCKET_ABSTRACT_SOCKET_TYPES_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/mbed.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_H
+#define MBED_H
+
+#include <cstdio>
+#include <cstring>
+
+#endif // MBED_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/sockets/Socket.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_SOCKET_H__
+#define __MBED_NET_SOCKETS_SOCKET_H__
+
+/* Include all versions of the API */
+#include "v0/Socket.h"
+
+/* Set the current namespace */
+namespace mbed {
+    namespace Sockets {
+        namespace current {
+            using namespace mbed::Sockets::v0;
+        }
+    }
+}
+
+#endif // __MBED_NET_SOCKETS_SOCKET_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/sockets/SocketAddr.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_SOCKETADDR_H__
+#define __MBED_NET_SOCKETS_SOCKETADDR_H__
+
+/* Include all versions of the API */
+#include "v0/SocketAddr.h"
+
+/* Set the current namespace */
+namespace mbed {
+    namespace Sockets {
+        namespace current {
+            using namespace mbed::Sockets::v0;
+        }
+    }
+}
+
+#endif // __MBED_NET_SOCKETS_SOCKETADDR_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/sockets/UDPSocket.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_UDPSOCKET_H__
+#define __MBED_NET_SOCKETS_UDPSOCKET_H__
+
+/* Include all versions of the API */
+#include "v0/UDPSocket.h"
+
+/* Set the current namespace */
+namespace mbed {
+    namespace Sockets {
+        namespace current {
+            using namespace mbed::Sockets::v0;
+        }
+    }
+}
+
+#endif // __MBED_NET_SOCKETS_UDPSOCKET_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/sockets/v0/Socket.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,268 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_SOCKET_H__
+#define __MBED_NET_SOCKETS_V0_SOCKET_H__
+
+
+#include <stddef.h>
+#include <stdint.h>
+#include "mbed.h"
+#include "FunctionPointer.h"
+#include "CThunk.h"
+#include "mbed-net-socket-abstract/socket_types.h"
+#include "SocketAddr.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+
+/**
+ * \brief Socket implements most of the interfaces required for sockets.
+ * Socket is a pure virtual class; it should never be instantiated directly, but it provides
+ * common functionality for derived classes.
+ */
+class Socket {
+public:
+    typedef FunctionPointer3<void, Socket *, struct socket_addr, const char *> DNSHandler_t;
+    typedef FunctionPointer2<void, Socket *, socket_error_t> ErrorHandler_t;
+    typedef FunctionPointer1<void, Socket *> ReadableHandler_t;
+    typedef FunctionPointer2<void, Socket *, uint16_t> SentHandler_t;
+protected:
+    /**
+     * Socket constructor
+     * Initializes the Socket object.  Initializes the underlying struct socket.  Does not instantiate
+     * an underlying network stack socket.
+     * Since it is somewhat awkward to provide the network stack, a future change will provide
+     * a way to pass the network interface to the socket constructor, which will extract the stack from
+     * the interface.
+     * @param[in] stack The network stack to use for this socket.
+     */
+    Socket(const socket_stack_t stack);
+    /**
+     * Socket destructor
+     * Frees the underlying socket implementation.
+     */
+    virtual ~Socket();
+public:
+    /**
+     * Start the process of resolving a domain name.
+     * If the input is a text IP address, an event is queued immediately; otherwise, onDNS is
+     * queued as soon as DNS is resolved.
+     * The socket must have been opened before resolve is called
+     * @param[in] address The domain name to resolve
+     * @param[in] onDNS The handler to call when the name is resolved
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t resolve(const char* address, const DNSHandler_t &onDNS);
+    /**
+     * Open the socket.
+     * Instantiates and initializes the underlying socket. Receive is started immediately after
+     * the socket is opened.
+     * @param[in] af Address family (SOCKET_AF_INET4 or SOCKET_AF_INET6), currently only IPv4 is supported
+     * @param[in] pf Protocol family (SOCKET_DGRAM or SOCKET_STREAM)
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t open(const socket_address_family_t af, const socket_proto_family_t pf);
+    /**
+     * Binds the socket's local address and IP.
+     * 0.0.0.0 is accepted as a local address if only the port is meant to be bound.
+     * The behaviour of bind("0.0.0.0",...) is undefined where two or more stacks are in use.
+     *
+     * @param[in] address The string representation of the address to bind
+     * @param[in] port The local port to bind
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t bind(const char *address, const uint16_t port);
+    /**
+     * bind(const SocketAddr *, const uint16_t) is the same as bind(const char *, const uint16_t),
+     * except that the address passed in is a SocketAddr.
+     * @param[in] address The address to bind
+     * @param[in] port The local port to bind
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t bind(const SocketAddr *address, const uint16_t port);
+    /**
+     * Set the error handler.
+     * Errors are ignored if onError is not set.
+     * @param[in] onError
+     */
+    virtual void setOnError(const ErrorHandler_t &onError);
+    /**
+     * Set the received data handler
+     * Received data is queued until it is read using recv or recv_from.
+     * @param[in] onReadable the handler to use for receive events
+     */
+    virtual void setOnReadable(const ReadableHandler_t &onReadable);
+    /**
+     * Receive a message
+     * @param[out] buf The buffer to fill
+     * @param[in,out] len A pointer to the size of the receive buffer.  Sets the maximum number of bytes
+     * to read but is updated with the actual number of bytes copied on success.  len is not changed on
+     * failure
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t recv(void * buf, size_t *len);
+    /**
+     * Receive a message with the sender address and port
+     * This API is not valid for SOCK_STREAM
+     * @param[out] buf The buffer to fill
+     * @param[in,out] len A pointer to the size of the receive buffer.  Sets the maximum number of bytes
+     * to read but is updated with the actual number of bytes copied on success.  len is not changed on
+     * failure
+     * @param[out] remote_addr Pointer to an address structure to fill with the sender address
+     * @param[out] remote_port Pointer to a uint16_t to fill with the sender port
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t recv_from(void * buf, size_t *len, SocketAddr *remote_addr, uint16_t *remote_port);
+    /**
+     * Set the onSent handler.
+     * The exact moment this handler is called varies from implementation to implementation.
+     * On LwIP, onSent is called when the remote host ACK's data in TCP sockets, or when the message enters
+     * the network stack in UDP sockets.
+     * @param[in] onSent The handler to call when a send completes
+     */
+    virtual void setOnSent(const SentHandler_t &onSent);
+    /**
+     * Send a message
+     * Sends a message over an open connection.  This call is valid for UDP sockets, provided that connect()
+     * has been called.
+     * @param[in] buf The payload to send
+     * @param[in] len The size of the payload
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t send(const void * buf, const size_t len);
+    /**
+     * Send a message to a specific address and port
+     * This API is not valid for SOCK_STREAM
+     * @param[in] buf The payload to send
+     * @param[in] len The size of the payload
+     * @param[in] address The address to send to
+     * @param[in] port The remote port to send to
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t send_to(const void * buf, const size_t len, const SocketAddr *remote_addr, uint16_t remote_port);
+    /**
+     * Shuts down a socket.
+     * Sending and receiving are no longer possible after close() is called.
+     * The socket is not deallocated on close.  A socket must not be reopened, it should be
+     * destroyed (either with delete, or by going out of scope) after calling close.
+     * Calling open on a closed socket can result in a memory leak.
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t close();
+    /**
+     * Error checking utility
+     * Generates an event on error, does nothing on SOCKET_ERROR_NONE
+     * @param[in] err the error code to check
+     * @return false if err is SOCKET_ERROR_NONE, true otherwise
+     */
+    virtual bool error_check(socket_error_t err);
+
+    /**
+     * Checks the socket status to determine whether it is still connected.
+     * @return true if the socket is connected, false if it is not
+     */
+    virtual bool isConnected() const;
+
+    /**
+     * Get the local address of the socket if bound.
+     * There are several failing conditions for this method:
+     * 1. If the socket has not been opened, returns SOCKET_ERROR_NULL_PTR
+     * 2. If the socket has not been bound, returns SOCKET_ERROR_NOT_BOUND
+     * 3. If addr is NULL, returns SOCKET_ERROR_NULL_PTR
+     *
+     * Otherwise, populates the SocketAddr object with the local address
+     *
+     * @param[out] addr a pointer to a SocketAddr object
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure (see description)
+     */
+    virtual socket_error_t getLocalAddr(SocketAddr *addr) const;
+
+    /**
+     * Get the local port of the socket if bound.
+     * There are several failing conditions for this method:
+     * 1. If the socket has not been opened, returns SOCKET_ERROR_NULL_PTR
+     * 2. If the socket has not been bound, returns SOCKET_ERROR_NOT_BOUND
+     * 3. If port is NULL, returns SOCKET_ERROR_NULL_PTR
+     *
+     * Otherwise, populates the uint16_t object with the local port
+     *
+     * @param[out] port a pointer to a uint16_t
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure (see description)
+     */
+    virtual socket_error_t getLocalPort(uint16_t *port) const;
+
+    /**
+     * Get the remote address of the socket if connected.
+     * There are several failing conditions for this method:
+     * 1. If the socket has not been opened, returns SOCKET_ERROR_NULL_PTR
+     * 2. If the socket has not been connected, returns SOCKET_ERROR_NO_CONNECTION
+     * 3. If addr is NULL, returns SOCKET_ERROR_NULL_PTR
+     *
+     * Otherwise, populates the SocketAddr object with the remote address
+     *
+     * @param[out] addr a pointer to a SocketAddr object
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure (see description)
+     */
+    virtual socket_error_t getRemoteAddr(SocketAddr *addr) const;
+    /**
+     * Get the remote port of the socket if connected.
+     * There are several failing conditions for this method:
+     * 1. If the socket has not been opened, returns SOCKET_ERROR_NULL_PTR
+     * 2. If the socket has not been connected, returns SOCKET_ERROR_NO_CONNECTION
+     * 3. If port is NULL, returns SOCKET_ERROR_NULL_PTR
+     *
+     * Otherwise, populates the uint16_t object with the remote port
+     *
+     * @param[out] port a pointer to a uint16_t
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure (see description)
+     */
+    virtual socket_error_t getRemotePort(uint16_t *port) const;
+
+#if 0 // not implemented yet
+    static long ntohl(long);
+    static short ntohs(short);
+    static long long ntohll(long long);
+#endif
+
+protected:
+    /**
+     * The internal event handler
+     * @param[in] ev The event to handle
+     */
+    virtual void _eventHandler(struct socket_event *ev);
+
+protected:
+    DNSHandler_t      _onDNS;
+    ErrorHandler_t    _onError;
+    ReadableHandler_t _onReadable;
+    SentHandler_t     _onSent;
+
+    CThunk<Socket> _irq;
+    struct socket _socket;
+private:
+    socket_event_t *_event;
+    /**
+     * Internal event handler.
+     * @param[in] arg
+     */
+    void _nvEventHandler(void * arg);
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_SOCKET_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/sockets/v0/SocketAddr.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,43 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_SOCKETADDR_H__
+#define __MBED_NET_SOCKETS_V0_SOCKETADDR_H__
+
+#include "mbed-net-socket-abstract/socket_types.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+
+class SocketAddr {
+public:
+    struct socket_addr * getAddr() {return &_addr;}
+    const struct socket_addr * getAddr() const {return &_addr;}
+    void setAddr(const struct socket_addr *addr);
+    void setAddr(const SocketAddr *addr);
+    size_t getAddrSize() const {return sizeof(_addr.ipv6be);}
+    bool is_v4();
+
+    int fmtIPv4(char *buf, size_t size);
+    int fmtIPv6(char *buf, size_t size);
+protected:
+    struct socket_addr _addr;
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_SOCKETADDR_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/sockets/v0/TCPAsynch.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,47 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_TCP_ASYNCH__
+#define __MBED_NET_SOCKETS_V0_TCP_ASYNCH__
+
+#include "Socket.h"
+#include "mbed-net-socket-abstract/socket_api.h"
+
+#include "Ticker.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+class TCPAsynch: public Socket {
+protected:
+    TCPAsynch(const socket_stack_t stack);
+    ~TCPAsynch();
+
+public:
+    virtual socket_error_t open(const socket_address_family_t af);
+protected:
+    static Ticker _ticker;
+    static FunctionPointer0<void> _tick_handler;
+    // uintptr_t is used to guarantee that there will always be a large enough
+    // counter to avoid overflows. Memory allocation will always fail before
+    // counter overflow if the counter is the same size as the pointer type and
+    // sizeof(TCPAsynch) > 0
+    static uintptr_t _TCPSockets;
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_TCP_ASYNCH__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/sockets/v0/TCPListener.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,86 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_TCPLISTENER_H__
+#define __MBED_NET_SOCKETS_V0_TCPLISTENER_H__
+
+#include <stddef.h>
+#include <stdint.h>
+#include "mbed/FunctionPointer.h"
+#include "TCPAsynch.h"
+#include "TCPStream.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+/** \brief TCPListener: a TCP server socket
+ *  The TCPListener listens for incoming connections.  Prior to listening, the
+ *  TCPListener must be bound to a port and, optionally, an address.
+ */
+class TCPListener: public TCPAsynch {
+public:
+    typedef FunctionPointer2<void, TCPListener *, void *> IncomingHandler_t;
+    /**
+     *  The TCP Listener constructor.
+     * @param[in] stack the network stack to use
+     */
+    TCPListener(const socket_stack_t stack);
+
+    /**
+     *  The TCP Listener destructor
+     *  This performs teardown of the listener
+     */
+    ~TCPListener();
+
+    /**
+     *  Begin listening for incoming connections.
+     *  The supplied listenHandler will be called whenever an incoming connection arrives
+     *  To reject a connection, the event handler needs to set the reject flag in the event.
+     * @param[in] listenHandler The event handler to call when an incoming connection arrives
+     * @param[in] backlog The number of connection requests to keep in the backlog
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    socket_error_t start_listening(IncomingHandler_t listenHandler, uint32_t backlog = 0);
+    /**
+     * Stop listening for incoming connections
+     * After this call, the server will reject incoming connections until start_listening is called again
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    socket_error_t stop_listening();
+
+    /**
+     * accept is a utility function for constructing a new TCPStream from an incoming connection
+     * The event passed to the listenHandler contains a pointer to a low level implementation of an
+     * already connected socket.  This function
+     * @param new_impl
+     * @return
+     */
+    virtual TCPStream * accept(void *new_impl);
+    virtual void reject(void *new_impl);
+
+protected:
+    /**
+     * Internal event handler
+     * @param[in] ev the event to handle
+     */
+    void _eventHandler(struct socket_event *ev);
+
+    IncomingHandler_t _onIncoming;
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_TCPLISTENER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/sockets/v0/TCPStream.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,83 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_TCPSTREAM_H__
+#define __MBED_NET_SOCKETS_V0_TCPSTREAM_H__
+#include <stddef.h>
+#include <stdint.h>
+#include "Ticker.h"
+#include "TCPAsynch.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+
+class TCPStream: public TCPAsynch {
+public:
+    typedef FunctionPointer1<void, TCPStream *> ConnectHandler_t;
+    typedef FunctionPointer1<void, TCPStream *> DisconnectHandler_t;
+    /**
+     * TCP socket constructor.
+     * Does not allocate an underlying TCP Socket instance.
+     * @param[in] stack The network stack to use for this socket.
+     */
+    TCPStream(const socket_stack_t stack);
+    /**
+     * TCP socket constructor.
+     * Does not allocate an underlying TCP Socket instance. This version is for use with
+     * TCPListener::accept(). The struct socket instance passed into this constructor should
+     * be a fully initialized socket, with an initialized impl field.  TCPStream will copy
+     * the stack, API, protocol family, and impl pointer from sock.
+     * @param[in] sock The TCP socket instance to use for this TCP socket.
+     */
+    TCPStream(const struct socket * sock);
+    /**
+     * TCP socket destructor
+     */
+    ~TCPStream();
+    /**
+     * Connect to a remote host.
+     * Initates the TCP Connection process.  onConnect is called when the connection
+     * is acknowledged.
+     * @param[in] address The remote host to connect to
+     * @param[in] port The remote port to connect to
+     * @param[in] onConnect
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    virtual socket_error_t connect(const SocketAddr &address, const uint16_t port,
+            const ConnectHandler_t &onConnect);
+    /**
+     * Set a disconnect handler
+     * This handler only needs to be configured once onConnect has been called
+     * @param[in] h the handler to call when a connection is disconnected
+     */
+    virtual void setOnDisconnect(const DisconnectHandler_t &h) { _onDisconnect = h; }
+
+protected:
+    /**
+     * Internal event handler
+     * @param[in] ev the event to handle
+     */
+    void _eventHandler(struct socket_event *ev);
+
+protected:
+    ConnectHandler_t _onConnect;
+    DisconnectHandler_t _onDisconnect;
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_TCPSTREAM_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/common/sockets/v0/UDPSocket.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,64 @@
+/*
+ * PackageLicenseDeclared: Apache-2.0
+ * Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __MBED_NET_SOCKETS_V0_UDPSOCKET_H__
+#define __MBED_NET_SOCKETS_V0_UDPSOCKET_H__
+
+#include <stddef.h>
+#include <stdint.h>
+#include "Socket.h"
+
+namespace mbed {
+namespace Sockets {
+namespace v0 {
+
+/* UDP socket class */
+class UDPSocket: public Socket {
+public:
+    /**
+     * UDP socket constructor.
+     * Does not allocate an underlying UDP Socket instance.
+     * @param[in] stack The network stack to use for this socket.
+     */
+    UDPSocket(socket_stack_t stack);
+    /**
+     * UDP Socket destructor
+     */
+    ~UDPSocket();
+    /**
+     * Open a UDP socket
+     * Instantiates and initializes the underlying socket. Receive is started immediately after
+     * the socket is opened.
+     * @param[in] af Address family (SOCKET_AF_INET4 or SOCKET_AF_INET6), currently only IPv4 is supported
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    socket_error_t inline open(const socket_address_family_t af)
+    {
+        return Socket::open(af,SOCKET_DGRAM);
+    }
+    /**
+     * Connect to a remote host.
+     * This is an internal configuration API only.  No network traffic is generated.
+     * @param[in] address The remote host to connect to
+     * @param[in] port The remote port to connect to
+     * @return SOCKET_ERROR_NONE on success, or an error code on failure
+     */
+    socket_error_t connect(const SocketAddr *address, const uint16_t port);
+};
+} // namespace v0
+} // namespace Sockets
+} // namespace mbed
+#endif // __MBED_NET_SOCKETS_V0_UDPSOCKET_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/includes.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,17 @@
+if(TARGET_LIKE_LINUX)
+include_directories(
+        "../common"
+        "../stub"
+        "../../../../mbed-client"
+        "../../../../source"
+        "../../../../source/include"
+        "../../../../yotta_modules/mbed-client-mbedtls"
+        "../../../../yotta_modules/mbedtls/include"
+	"../../../../yotta_modules/mbed-client-linux/mbed-client-linux"
+        "../../../../yotta_modules/mbed-client-mbed-os"
+	"../../../../yotta_modules/mbed-client-c"
+	"usr/include"
+	"$ENV{CPPUTEST_HOME}/include"
+)
+SET(UTEST_LINK_FLAGS "-fprofile-arcs")
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mbase/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,30 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mbase 
+	"../../../../source/m2mbase.cpp"
+	"main.cpp"
+    "../stub/m2mreporthandler_stub.cpp"
+    "../stub/nsdlaccesshelper_stub.cpp"
+    "../stub/m2mresource_stub.cpp"
+    "../stub/m2mresourceinstance_stub.cpp"
+    "../stub/m2mstring_stub.cpp"
+    "../stub/m2mtimer_stub.cpp"
+    "../stub/m2mobject_stub.cpp"
+    "../stub/m2mobjectinstance_stub.cpp"
+    "../stub/m2mresource_stub.cpp"
+	"m2mbasetest.cpp"
+	"test_m2mbase.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2mbase
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mbase
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mbase")
+add_test(m2mbase ${binary})
+
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mbase/m2mbasetest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mbase.h"
+
+TEST_GROUP(M2MBase)
+{
+    Test_M2MBase* m2m_base;
+    Handler *obsHandler;
+    void setup() {
+        // Path ownership moved to m2mbase
+        char* path = (char*)malloc(5);
+        strcpy(path, "test");
+
+        obsHandler = new Handler();
+        m2m_base = new Test_M2MBase(path, obsHandler);
+    }
+
+    void teardown() {
+        delete m2m_base;
+        delete obsHandler;
+    }
+};
+
+TEST(M2MBase, Create)
+{
+    CHECK(m2m_base != NULL);
+}
+
+TEST(M2MBase, set_operation)
+{
+    m2m_base->test_set_operation();
+}
+
+TEST(M2MBase, test_set_base_type)
+{
+    m2m_base->test_set_base_type();
+}
+
+TEST(M2MBase, set_interface_description)
+{
+    m2m_base->test_set_interface_description();
+}
+
+TEST(M2MBase, uri_path)
+{
+    m2m_base->test_uri_path();
+}
+
+TEST(M2MBase, set_resource_type)
+{
+    m2m_base->test_set_resource_type();
+}
+
+TEST(M2MBase, set_coap_content_type)
+{
+    m2m_base->test_set_coap_content_type();
+}
+
+TEST(M2MBase, set_instance_id)
+{
+    m2m_base->test_set_instance_id();
+}
+
+TEST(M2MBase, observation_number)
+{
+    m2m_base->test_observation_number();
+}
+
+TEST(M2MBase, mode)
+{
+    m2m_base->test_mode();
+}
+
+TEST(M2MBase, observation_token)
+{
+    m2m_base->test_get_observation_token();
+}
+
+TEST(M2MBase, observation_level)
+{
+    m2m_base->test_observation_level();
+}
+
+TEST(M2MBase, set_observation_token)
+{
+    m2m_base->test_set_observation_token();
+}
+
+TEST(M2MBase, set_under_observation)
+{
+    m2m_base->test_set_under_observation();
+}
+
+TEST(M2MBase, set_observable)
+{
+    m2m_base->test_set_observable();
+}
+
+TEST(M2MBase, add_observation_level)
+{
+    m2m_base->test_add_observation_level();
+}
+
+TEST(M2MBase, remove_observation_level)
+{
+    m2m_base->test_remove_observation_level();
+}
+
+TEST(M2MBase, name)
+{
+    m2m_base->test_name();
+}
+
+TEST(M2MBase, name_id)
+{
+    m2m_base->test_name_id();
+}
+
+TEST(M2MBase, test_handle_observation_attribute)
+{
+    m2m_base->test_handle_observation_attribute();
+}
+
+TEST(M2MBase, test_observation_to_be_sent)
+{
+    m2m_base->test_observation_to_be_sent();
+}
+
+TEST(M2MBase, test_handle_get_request)
+{
+    m2m_base->test_handle_get_request();
+}
+
+TEST(M2MBase, test_handle_put_request)
+{
+    m2m_base->test_handle_put_request();
+}
+
+TEST(M2MBase, test_handle_post_request)
+{
+    m2m_base->test_handle_post_request();
+}
+
+TEST(M2MBase, test_memory_alloc)
+{
+    m2m_base->test_memory_alloc();
+}
+
+TEST(M2MBase, test_memory_free)
+{
+    m2m_base->test_memory_free();
+}
+
+TEST(M2MBase, test_report_handler)
+{
+    m2m_base->test_report_handler();
+}
+
+TEST(M2MBase, test_observation_handler)
+{
+    m2m_base->test_observation_handler();
+}
+
+TEST(M2MBase, test_id_number)
+{
+    m2m_base->test_id_number();
+}
+
+TEST(M2MBase, test_set_register_uri)
+{
+    m2m_base->test_set_register_uri();
+}
+
+TEST(M2MBase, test_set_observation_number)
+{
+    m2m_base->test_set_observation_number();
+}
+
+TEST(M2MBase, test_set_max_age)
+{
+    m2m_base->test_set_max_age();
+}
+
+TEST(M2MBase, test_is_under_observation)
+{
+    m2m_base->test_is_under_observation();
+}
+
+TEST(M2MBase, test_value_updated_function)
+{
+    m2m_base->test_value_updated_function();
+}
+
+TEST(M2MBase, test_build_path)
+{
+    m2m_base->test_build_path();
+}
+
+TEST(M2MBase, test_set_observation_handler)
+{
+    m2m_base->test_set_observation_handler();
+}
+
+TEST(M2MBase, test_resource_type)
+{
+    m2m_base->test_resource_type();
+}
+
+TEST(M2MBase, test_resource_name_length)
+{
+    m2m_base->test_resource_name_length();
+}
+
+TEST(M2MBase, test_get_nsdl_resource)
+{
+    m2m_base->test_get_nsdl_resource();
+}
+
+TEST(M2MBase, test_create_path)
+{
+    m2m_base->test_create_path();
+}
+
+TEST(M2MBase, test_create_report_handler)
+{
+    m2m_base->test_create_report_handler();
+}
+
+TEST(M2MBase, test_validate_string_length)
+{
+    m2m_base->test_validate_string_length();
+}
+
+TEST(M2MBase, test_is_integer)
+{
+    m2m_base->test_is_integer();
+}
+
+TEST(M2MBase, test_alloc_string_copy)
+{
+    m2m_base->test_alloc_string_copy();
+}
+
+TEST(M2MBase, test_alloc_copy)
+{
+    m2m_base->test_alloc_copy();
+}
+
+TEST(M2MBase, test_ctor)
+{
+    m2m_base->test_ctor();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mbase/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MBase);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mbase/test_m2mbase.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,554 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mbase.h"
+
+#include "m2mreportobserver.h"
+#include "m2mreporthandler.h"
+#include "m2mreporthandler_stub.h"
+#include "nsdlaccesshelper_stub.h"
+#include "m2mresource_stub.h"
+#include "m2mobject_stub.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mresource_stub.h"
+
+static bool value_update_called = false;
+static void value_updated_function(const char* name) {
+    value_update_called = true;
+}
+
+class MyTest{
+public:
+    void value_updated_function(const char* name) {
+        visited = true;
+    }
+
+    bool visited;
+};
+
+
+class Observer : public M2MReportObserver {
+public:
+    Observer(){}
+    ~Observer(){}
+
+    void observation_to_be_sent(m2m::Vector<uint16_t>,bool){}
+};
+
+Test_M2MBase::Test_M2MBase(char* path, Handler *handler)
+    : M2MBase("name",M2MBase::Dynamic, "type", path, false)
+
+{
+    obsHandler = handler;
+}
+
+Test_M2MBase::~Test_M2MBase()
+{
+}
+
+void Test_M2MBase::test_set_operation()
+{
+    this->_sn_resource->dynamic_resource_params->static_resource_parameters->mode = M2MBase::Static;
+    M2MBase::Operation test = M2MBase::GET_ALLOWED;
+    set_operation(test);
+
+    CHECK(test == this->operation());
+
+    this->_sn_resource->dynamic_resource_params->static_resource_parameters->mode = M2MBase::Dynamic;
+    test = M2MBase::PUT_ALLOWED;
+    set_operation(test);
+
+    CHECK(test == this->operation());
+}
+
+void Test_M2MBase::test_set_base_type()
+{
+    set_base_type(M2MBase::ObjectInstance);
+    CHECK(M2MBase::ObjectInstance == this->base_type());
+}
+
+void Test_M2MBase::test_set_interface_description()
+{
+    String test = "interface_description";
+    set_interface_description(test);
+
+    CHECK(test == this->interface_description());
+}
+
+void Test_M2MBase::test_uri_path()
+{
+    // Default value in ctor
+    String test = "test";
+    CHECK(test == uri_path());
+}
+
+void Test_M2MBase::test_set_resource_type()
+{
+    String test = "resource_type";
+    set_resource_type(test);
+
+    CHECK(test == this->_sn_resource->dynamic_resource_params->static_resource_parameters->resource_type_ptr);
+}
+
+void Test_M2MBase::test_set_coap_content_type()
+{
+    u_int8_t test = 1;
+    set_coap_content_type(test);
+
+    CHECK(test == this->coap_content_type());
+}
+
+void Test_M2MBase::test_set_instance_id()
+{
+    u_int16_t test = 1;
+    set_instance_id(test);
+
+    CHECK(test == this->instance_id());
+}
+
+void Test_M2MBase::test_set_observable()
+{
+    bool test = true;
+    set_observable(test);
+
+    CHECK(test == this->is_observable());
+}
+
+void Test_M2MBase::test_add_observation_level()
+{
+    add_observation_level(M2MBase::R_Attribute);
+    CHECK(M2MBase::R_Attribute == this->_observation_level);
+
+    add_observation_level(M2MBase::O_Attribute);
+    CHECK(M2MBase::OR_Attribute == this->_observation_level);
+}
+
+void Test_M2MBase::test_remove_observation_level()
+{
+    this->_observation_level = M2MBase::OR_Attribute;
+    remove_observation_level(M2MBase::R_Attribute);
+    CHECK(M2MBase::O_Attribute == this->_observation_level);
+
+    remove_observation_level(M2MBase::O_Attribute);
+    CHECK(M2MBase::None == this->_observation_level);
+
+    this->_observation_level = M2MBase::OI_Attribute;
+    remove_observation_level(M2MBase::R_Attribute);
+    CHECK(M2MBase::OI_Attribute == this->_observation_level);
+
+    remove_observation_level(M2MBase::OI_Attribute);
+    CHECK(M2MBase::None == this->_observation_level);
+    remove_observation_level(M2MBase::OI_Attribute);
+    CHECK(M2MBase::None == this->_observation_level);
+}
+
+void Test_M2MBase::test_set_under_observation()
+{
+    this->set_base_type(M2MBase::ObjectInstance);
+
+    bool test = true;
+    set_under_observation(test,NULL);
+    set_under_observation(test,obsHandler);
+
+    CHECK(obsHandler == this->_observation_handler);
+
+    set_under_observation(test,NULL);
+
+    test = false;
+    set_under_observation(test,NULL);
+
+    test = false;
+    set_under_observation(test,obsHandler);
+
+    set_under_observation(test,obsHandler);
+}
+
+void Test_M2MBase::test_set_observation_token()
+{
+    this->_token_length = 4;
+    this->_token = (u_int8_t *)malloc(this->_token_length);
+    String test = "token";
+    set_observation_token((const u_int8_t*)test.c_str(), (u_int8_t)test.size());
+
+    CHECK(this->_token_length == 5);
+}
+
+void Test_M2MBase::test_observation_level()
+{
+    this->_observation_level = M2MBase::OR_Attribute;
+    CHECK(M2MBase::OR_Attribute == this->observation_level());
+}
+
+void Test_M2MBase::test_get_observation_token()
+{
+    u_int8_t test_value[] = {"val"};
+    u_int32_t value_length((u_int32_t)sizeof(test_value));
+
+    u_int8_t* out_value = (u_int8_t *)malloc(value_length);
+    u_int32_t out_size = value_length;
+    memcpy((u_int8_t *)out_value, (u_int8_t *)test_value, value_length);
+
+    u_int8_t test[] = {"token"};
+    this->_token_length = (u_int8_t)sizeof(test);
+    this->_token = (u_int8_t *)malloc(this->_token_length);
+    memcpy((u_int8_t *)this->_token, (u_int8_t *)test, this->_token_length);
+
+    get_observation_token(out_value,out_size);
+
+    CHECK(out_size == 6);
+
+    free(out_value);
+}
+
+void Test_M2MBase::test_mode()
+{
+    CHECK(M2MBase::Dynamic == mode());
+}
+
+void Test_M2MBase::test_observation_number()
+{
+    u_int8_t test = 1;
+    this->_observation_number = test;
+
+    CHECK(test == observation_number());
+}
+
+void Test_M2MBase::test_name()
+{
+    // Default value in ctor
+    String test = "name";
+    CHECK(test == name());
+}
+
+void Test_M2MBase::test_name_id()
+{
+    int id = 10;
+    this->_sn_resource->name_id = id;
+    CHECK(id == name_id());
+}
+
+void Test_M2MBase::test_handle_observation_attribute()
+{
+    char *s = "wrong";
+    bool ret = handle_observation_attribute(s);
+    CHECK(ret == false);
+    delete this->_report_handler;
+
+    Observer obs;
+    this->_report_handler = new M2MReportHandler(obs);
+
+    m2mreporthandler_stub::bool_return = true;
+    ret = handle_observation_attribute(s);
+    CHECK(ret == true);
+
+    this->_is_under_observation = true;
+    ret = handle_observation_attribute(s);
+    CHECK(ret == true);
+
+    this->_is_under_observation = true;
+    m2mreporthandler_stub::bool_return = false;
+    ret = handle_observation_attribute(s);
+    CHECK(ret == false);
+}
+
+void Test_M2MBase::test_observation_to_be_sent()
+{
+    Vector<uint16_t> list;
+    observation_to_be_sent(list);
+    CHECK(obsHandler->visited == false);
+    this->set_base_type(M2MBase::ObjectInstance);
+
+    bool test = true;
+    set_under_observation(test,obsHandler);
+    observation_to_be_sent(list);
+    CHECK(obsHandler->visited == true);
+}
+
+void Test_M2MBase::test_handle_get_request()
+{
+    CHECK(this->handle_get_request(NULL,NULL,NULL) == NULL);
+}
+
+void Test_M2MBase::test_handle_put_request()
+{
+    bool execute = false;
+    CHECK(this->handle_put_request(NULL,NULL,NULL, execute) == NULL);
+}
+
+void Test_M2MBase::test_handle_post_request()
+{
+    bool execute = false;
+    CHECK(this->handle_post_request(NULL,NULL,NULL, execute) == NULL);
+}
+
+void Test_M2MBase::test_memory_alloc()
+{
+    CHECK(memory_alloc(0) == 0);
+    uint8_t *ptr = 0;
+    ptr = (uint8_t*)memory_alloc(sizeof(uint8_t));
+    CHECK(ptr != NULL);
+    memory_free(ptr);
+}
+
+void Test_M2MBase::test_memory_free()
+{
+    uint8_t *ptr = (uint8_t*)memory_alloc(sizeof(uint8_t));
+    memory_free((void*)ptr);
+    //memory leak test will fail, if there is a leak, so no need for CHECK
+}
+
+void Test_M2MBase::test_report_handler()
+{
+    CHECK(report_handler() == NULL);
+}
+
+void Test_M2MBase::test_observation_handler()
+{
+    CHECK(observation_handler() == NULL);
+}
+
+void Test_M2MBase::test_id_number()
+{
+    char* path = (char*)malloc(3);
+    strcpy(path, "10");
+    M2MBase* b = new M2MBase("10", M2MBase::Static, "", path, false);
+    CHECK(b->name_id() == 10);
+    delete b;
+
+    char* path1 = (char*)malloc(6);
+    strcpy(path1, "66567");
+
+    M2MBase * test1 = new M2MBase("66567",M2MBase::Static, "", path1, false);
+    CHECK(test1->name_id() == -1);
+    delete test1;
+}
+
+void Test_M2MBase::test_set_register_uri()
+{
+    this->set_register_uri(false);
+    CHECK(this->register_uri() == false);
+}
+
+void Test_M2MBase::test_set_observation_number()
+{
+    set_observation_number(0);
+    CHECK(0 == this->_observation_number);
+}
+
+void Test_M2MBase::test_set_max_age()
+{
+    this->set_max_age(10000);
+    CHECK(this->max_age() == 10000);
+}
+
+void Test_M2MBase::test_is_under_observation()
+{
+    CHECK(false == is_under_observation());
+    this->_is_under_observation = true;
+    CHECK(true == is_under_observation());
+}
+
+void Test_M2MBase::test_value_updated_function()
+{
+    MyTest test;
+    test.visited = false;
+
+    CHECK(this->is_value_updated_function_set() == false);
+
+    this->set_value_updated_function(value_updated_callback(&test,&MyTest::value_updated_function));
+    this->execute_value_updated("test");
+    CHECK(this->is_value_updated_function_set() == true);
+    CHECK(test.visited == true);
+
+    value_update_called = false;
+    this->set_value_updated_function(value_updated_callback2(value_updated_function));
+    this->execute_value_updated("test");
+    CHECK(value_update_called == true);
+}
+
+void Test_M2MBase::test_build_path()
+{
+    StringBuffer<MAX_PATH_SIZE> buffer;
+    CHECK(build_path(buffer, "0123456789012345678901234567890123456789012345678901234567891234", 10000, "2123456789012345678901234567890123456789012345678901234567891234", 20000));
+    CHECK(!build_path(buffer, "01234567890123456789012345678901234567890123456789012345678912345", 10000, "21234567890123456789012345678901234567890123456789012345678912345", 20000));
+
+    StringBuffer<MAX_PATH_SIZE_2> buffer2;
+    CHECK(build_path(buffer2, "0123456789012345678901234567890123456789012345678901234567891234", 10000, "2123456789012345678901234567890123456789012345678901234567891234"));
+    CHECK(!build_path(buffer2, "01234567890123456789012345678901234567890123456789012345678912345", 10000, "21234567890123456789012345678901234567890123456789012345678912345"));
+
+    StringBuffer<MAX_PATH_SIZE_3> buffer3;
+    CHECK(build_path(buffer3, "0123456789012345678901234567890123456789012345678901234567891234", 10000, 20000));
+    CHECK(!build_path(buffer3, "01234567890123456789012345678901234567890123456789012345678912345", 10000, 20000));
+
+    StringBuffer<MAX_PATH_SIZE_4> buffer4;
+    CHECK(build_path(buffer4, "0123456789012345678901234567890123456789012345678901234567891234", 10000));
+    CHECK(!build_path(buffer4, "01234567890123456789012345678901234567890123456789012345678912345", 10000));
+}
+
+void Test_M2MBase::test_set_observation_handler()
+{
+    set_observation_handler(obsHandler);
+    CHECK(observation_handler() == obsHandler);
+}
+
+void Test_M2MBase::test_resource_type()
+{
+    // Default value in ctor
+    String test = "type";
+    CHECK(test == resource_type());
+}
+
+void Test_M2MBase::test_resource_name_length()
+{
+    CHECK(4 == resource_name_length());
+}
+
+void Test_M2MBase::test_get_nsdl_resource()
+{
+    sn_nsdl_dynamic_resource_parameters_s *res = get_nsdl_resource();
+    CHECK(res != NULL);
+    CHECK(res->static_resource_parameters != NULL);
+}
+
+void Test_M2MBase::test_create_path()
+{
+    char* path1 = (char*)malloc(5);
+    strcpy(path1, "name");
+    M2MObject* object = new M2MObject("name", path1);
+
+    char* path2 = (char*)malloc(7);
+    strcpy(path2, "name/0");
+    m2mresource_stub::object_instance =
+            new M2MObjectInstance(*object, "name","", path2);
+
+    String path = "name/1";
+    String res_path = "name/0/resource";
+    String res_path_instance = "name/0/resource/1";
+
+    char* result = create_path(*object, "1");
+    CHECK(path == result);
+    free(result);
+
+    result = create_path(*object, 1);
+    CHECK(path == result);
+    free(result);
+
+    result = create_path(*m2mresource_stub::object_instance, "resource");
+    CHECK(res_path == result);
+    free(result);
+
+    char* path3 = (char*)malloc(9);
+    strcpy(path3, "resource");
+
+    M2MResource* res = new M2MResource(*m2mresource_stub::object_instance,
+                                       "resource",
+                                       "type",
+                                       M2MResourceInstance::INTEGER,
+                                       false,
+                                       path3);
+
+    result = create_path(*res, 1);
+    CHECK(res_path_instance == result);
+    free(result);
+
+    delete m2mresource_stub::object_instance;
+    delete object;
+    delete res;
+}
+
+void Test_M2MBase::test_create_report_handler()
+{
+    M2MReportHandler* report_handler = create_report_handler();
+    CHECK(report_handler != NULL);
+}
+
+void Test_M2MBase::test_validate_string_length()
+{
+    String test = "stringlengthabc";
+    CHECK(validate_string_length(test, 1, 20) == true);
+    CHECK(validate_string_length(test, 1, 2) == false);
+    CHECK(validate_string_length(test, 15, 15) == true);
+    CHECK(validate_string_length(test, 16, 15) == false);
+
+    CHECK(validate_string_length(test.c_str(), 15, 15) == true);
+    CHECK(validate_string_length(test.c_str(), 16, 15) == false);
+}
+
+void Test_M2MBase::test_is_integer()
+{
+    CHECK(is_integer("") == false);
+    CHECK(is_integer("-1a") == false);
+    CHECK(is_integer("10") == true);
+    CHECK(is_integer("+10") == true);
+    CHECK(is_integer("-10") == true);
+}
+
+void Test_M2MBase::test_alloc_copy()
+{
+    uint8_t* test_ptr = (uint8_t *)malloc(10);
+    memset(test_ptr,'a', 10);
+    uint8_t* result = alloc_copy(test_ptr, 10);
+    CHECK(memcmp(test_ptr, result, 10) == 0);
+    free(test_ptr);
+    free(result);
+}
+
+void Test_M2MBase::test_alloc_string_copy()
+{
+    char* test = "testi";
+    char* result = alloc_string_copy(test);
+    STRCMP_EQUAL(test,result);
+    free(result);
+}
+
+void Test_M2MBase::test_ctor()
+{
+    static sn_nsdl_static_resource_parameters_s params_static = {
+        (char*)"",      // resource_type_ptr
+        (char*)"",                     // interface_description_ptr
+        (uint8_t*)"",    // path
+        (uint8_t*)"",           // resource
+        0,                      // pathlen
+        0,                      // resourcelen
+        false,                  // external_memory_block
+        SN_GRS_DYNAMIC,         // mode
+        false                   // free_on_delete
+    };
+
+    static sn_nsdl_dynamic_resource_parameters_s params_dynamic = {
+        __nsdl_c_callback,
+        &params_static,
+        {NULL, NULL},                     // link
+        0, // coap_content_type
+        M2MBase::PUT_ALLOWED,   // access
+        0,                      // registered
+        false,                  // publish_uri
+        false,                  // free_on_delete
+        true                    // observable
+    };
+
+    const static M2MBase::lwm2m_parameters params = {
+        0, // max_age
+        0, // instance_id
+        0, // name_id
+        (char*)"", // name
+        &params_dynamic,
+        M2MBase::Resource, // base_type
+        false // free_on_delete
+    };
+    M2MBase* base = new M2MBase(&params);
+    delete base;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mbase/test_m2mbase.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_BASE_H
+#define TEST_M2M_BASE_H
+#include "m2mbase.h"
+#include "m2mobservationhandler.h"
+
+class Handler : public M2MObservationHandler {
+
+public:
+
+    Handler() : visited(false) {}
+    ~Handler(){}
+    void observation_to_be_sent(M2MBase *, uint16_t, m2m::Vector<uint16_t>, bool){
+        visited = true;
+    }
+    void send_delayed_response(M2MBase *){}
+    void resource_to_be_deleted(M2MBase *){visited=true;}
+    void remove_object(M2MBase *){visited = true;}
+    void value_updated(M2MBase *,const String&){visited = true;}
+
+    void clear() {visited = false;}
+    bool visited;
+};
+
+class Test_M2MBase : M2MBase
+{
+public:
+    Test_M2MBase(char* path, Handler *handler);
+
+    virtual ~Test_M2MBase();
+
+    void test_copy_constructor();
+
+    void test_set_operation();
+
+    void test_set_base_type();
+
+    void test_set_interface_description();
+
+    void test_uri_path();
+
+    void test_set_resource_type();
+
+    void test_set_coap_content_type();
+
+    void test_set_instance_id();
+
+    void test_set_observable();
+
+    void test_add_observation_level();
+
+    void test_remove_observation_level();
+
+    void test_set_under_observation();
+
+    void test_set_observation_token();
+
+    void test_observation_level();
+
+    void test_get_observation_token();
+
+    void test_mode();
+
+    void test_observation_number();
+
+    void test_name();
+
+    void test_name_id();
+
+    void test_coap_content_type();
+
+    void test_base_type();
+
+    void test_handle_observation_attribute();
+
+    void test_observation_to_be_sent();
+
+    void test_handle_get_request();
+
+    void test_handle_put_request();
+
+    void test_handle_post_request();
+
+    void test_memory_alloc();
+
+    void test_memory_free();
+
+    void test_report_handler();
+
+    void test_observation_handler();
+
+    void test_id_number();
+
+    void test_set_register_uri();
+
+    void test_set_observation_number();
+
+    void test_set_max_age();
+
+    void test_is_under_observation();
+
+    void test_value_updated_function();
+
+    void test_build_path();
+
+    void test_set_observation_handler();
+
+    void test_resource_type();
+
+    void test_resource_name_length();
+
+    void test_get_nsdl_resource();
+
+    void test_create_path();
+
+    void test_create_report_handler();
+
+    void test_validate_string_length();
+
+    void test_is_integer();
+
+    void test_alloc_copy();
+
+    void test_alloc_string_copy();
+
+    void test_ctor();
+
+    Handler *obsHandler;
+};
+
+
+#endif // TEST_M2M_BASE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mblockmessage/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,20 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mblockmessage
+        "main.cpp"
+        "m2mblockmessagetest.cpp"
+        "test_m2mblockmessage.cpp"
+        "../../../../source/m2mblockmessage.cpp"
+)
+
+target_link_libraries(m2mblockmessage
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mblockmessage
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mblockmessage")
+add_test(m2mblockmessage ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mblockmessage/m2mblockmessagetest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mblockmessage.h"
+
+TEST_GROUP(M2MBlockMessage)
+{
+    Test_M2MBlockMessage* block_message;
+    void setup()
+    {
+        block_message = new Test_M2MBlockMessage();
+    }
+    void teardown()
+    {
+        delete block_message;
+    }
+};
+
+TEST(M2MBlockMessage, Create)
+{
+    CHECK(block_message->block_message != NULL);
+}
+
+TEST(M2MBlockMessage, test_set_message_info)
+{
+    block_message->test_set_message_info();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mblockmessage/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+    return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MBlockMessage );
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mblockmessage/test_m2mblockmessage.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mblockmessage.h"
+#include "sn_coap_header.h"
+#include <string.h>
+Test_M2MBlockMessage::Test_M2MBlockMessage()
+{
+    block_message = new M2MBlockMessage();
+}
+
+Test_M2MBlockMessage::~Test_M2MBlockMessage()
+{
+    delete block_message;
+}
+
+void Test_M2MBlockMessage::test_set_message_info()
+{
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+    block_message->set_message_info(NULL);
+    CHECK(block_message->is_block_message() == false);
+    CHECK(block_message->total_message_size() == 0);
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s *)malloc(sizeof(sn_coap_options_list_s));
+    memset(coap_header->options_list_ptr, 0, sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->size1 = 0xffff;
+    coap_header->options_list_ptr->use_size1 = true;
+    coap_header->options_list_ptr->block1 = -1;
+
+    block_message->set_message_info(coap_header);
+    CHECK(block_message->total_message_size() == 0xffff);
+    CHECK(!block_message->is_block_message());
+    block_message->clear_values();
+
+    coap_header->options_list_ptr->size1 = 0xffffff;
+
+    block_message->set_message_info(coap_header);
+    CHECK(block_message->error_code() == M2MBlockMessage::EntityTooLarge);
+    block_message->clear_values();
+
+    coap_header->options_list_ptr->size1 = 0xffff;
+    coap_header->options_list_ptr->block1 = 0x010101;
+    block_message->set_message_info(coap_header);
+    CHECK(block_message->is_block_message());
+    CHECK(block_message->block_number() == 4112);
+    block_message->clear_values();
+
+    coap_header->options_list_ptr->block1 = 0x0101;
+    block_message->set_message_info(coap_header);
+    CHECK(block_message->is_block_message());
+    CHECK(block_message->block_number() == 16);
+    block_message->clear_values();
+
+    coap_header->options_list_ptr->block1 = 0x01;
+    block_message->set_message_info(coap_header);
+    CHECK(block_message->is_block_message());
+    CHECK(block_message->block_number() == 0);
+    block_message->clear_values();
+
+    coap_header->options_list_ptr->block1 = 0x010108;
+    block_message->set_message_info(coap_header);
+    CHECK(!block_message->is_last_block());
+    block_message->clear_values();
+
+    coap_header->payload_len = 10;
+    coap_header->payload_ptr = (uint8_t *)malloc(10);
+    memset(coap_header->payload_ptr, 'x', 10);
+    block_message->set_message_info(coap_header);
+    CHECK(!block_message->is_last_block());
+    CHECK(block_message->block_data_len() == 10);
+    CHECK(memcmp(coap_header->payload_ptr, block_message->block_data(),10) == 0);
+    block_message->clear_values();
+
+    free(coap_header->payload_ptr);
+    free(coap_header->options_list_ptr);
+    free(coap_header);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mblockmessage/test_m2mblockmessage.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_BLOCKMESSAGE_H
+#define TEST_M2M_BLOCKMESSAGE_H
+
+#include "m2mblockmessage.h"
+
+class Test_M2MBlockMessage
+{
+public:
+    Test_M2MBlockMessage();
+    virtual ~Test_M2MBlockMessage();
+
+    void test_set_message_info();
+
+    M2MBlockMessage* block_message;
+
+};
+
+#endif // TEST_M2M_BLOCKMESSAGE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mdevice/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,27 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mdevice
+        "main.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mobjectinstance_stub.cpp"
+        "../stub/m2mresource_stub.cpp"
+        "../stub/m2mresourceinstance_stub.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "m2mdevicetest.cpp"
+        "test_m2mdevice.cpp"
+        "../../../../source/m2mdevice.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2mdevice
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mdevice
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mdevice")
+add_test(m2mdevice ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mdevice/m2mdevicetest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mdevice.h"
+
+TEST_GROUP(M2MDevice)
+{
+  Test_M2MDevice* m2m_device;
+
+  void setup()
+  {
+    m2m_device = new Test_M2MDevice();
+  }
+  void teardown()
+  {
+    delete m2m_device;
+  }
+};
+
+TEST(M2MDevice, Create)
+{
+    CHECK(m2m_device != NULL);
+}
+
+TEST(M2MDevice, create_resource_instance)
+{
+    m2m_device->test_create_resource_instance();
+}
+
+TEST(M2MDevice, create_resource_string)
+{
+    m2m_device->test_create_resource_string();
+}
+
+TEST(M2MDevice, create_resource_int)
+{
+    m2m_device->test_create_resource_int();
+}
+
+TEST(M2MDevice, create_resource_no_param)
+{
+    m2m_device->test_create_resource_no_param();
+}
+
+TEST(M2MDevice, delete_resource)
+{
+    m2m_device->test_delete_resource();
+}
+
+TEST(M2MDevice, delete_resource_instance)
+{
+    m2m_device->test_delete_resource_instance();
+}
+
+TEST(M2MDevice, set_resource_value_int)
+{
+    m2m_device->test_set_resource_value_int();
+}
+
+TEST(M2MDevice, set_resource_value_string)
+{
+    m2m_device->test_set_resource_value_string();
+}
+
+TEST(M2MDevice, resource_value_int)
+{
+    m2m_device->test_resource_value_int();
+}
+
+TEST(M2MDevice, resource_value_string)
+{
+    m2m_device->test_resource_value_string();
+}
+
+TEST(M2MDevice, is_resource_present)
+{
+    m2m_device->test_is_resource_present();
+}
+
+TEST(M2MDevice, per_resource_count)
+{
+    m2m_device->test_per_resource_count();
+}
+
+TEST(M2MDevice, total_resource_count)
+{
+    m2m_device->test_total_resource_count();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mdevice/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MDevice);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mdevice/test_m2mdevice.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,571 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mdevice.h"
+#include "m2mobject_stub.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mresource_stub.h"
+#include "m2mresourceinstance_stub.h"
+#include "m2mbase_stub.h"
+
+Test_M2MDevice::Test_M2MDevice()
+{
+    M2MObject* obj = new M2MObject("name", "name");
+    m2mobject_stub::inst = new M2MObjectInstance(*obj,
+                                                 "name",
+                                                 "","");
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    m2mobjectinstance_stub::create_resource_instance= new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "type",
+                                                                              M2MResourceInstance::STRING,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+    m2mresource_stub::bool_value = true;
+    m2mobjectinstance_stub::create_resource = new M2MResource(*m2mobject_stub::inst,
+                                                              "name",
+                                                              "type",
+                                                              M2MResourceInstance::STRING,
+                                                              false,
+                                                              "name");
+    device = M2MDevice::get_instance();
+
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    delete m2mobjectinstance_stub::create_resource_instance;
+    m2mobjectinstance_stub::create_resource_instance = NULL;
+
+    delete obj;
+}
+
+Test_M2MDevice::~Test_M2MDevice()
+{
+    delete m2mobject_stub::inst;
+    m2mobject_stub::inst = NULL;
+
+    M2MDevice::delete_instance();
+    device = NULL;
+}
+
+void Test_M2MDevice::test_create_resource_instance()
+{
+    m2mobjectinstance_stub::create_resource_instance = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                             "name",
+                                                                             "type",
+                                                                             M2MResourceInstance::STRING,
+                                                                             0,
+                                                                             "name",
+                                                                             false);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    CHECK(device->create_resource_instance(M2MDevice::ErrorCode,5,1) != NULL);
+    CHECK(device->create_resource_instance(M2MDevice::ErrorCode,-1,1) == NULL);
+    CHECK(device->create_resource_instance(M2MDevice::ErrorCode,9,1) == NULL);
+
+    m2mbase_stub::void_value = malloc(20);
+
+    CHECK(device->create_resource_instance(M2MDevice::AvailablePowerSources,-1,0) == NULL);
+    CHECK(device->create_resource_instance(M2MDevice::AvailablePowerSources,8,0) == NULL);
+    CHECK(device->create_resource_instance(M2MDevice::AvailablePowerSources,7,0) != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+
+    CHECK(device->create_resource_instance(M2MDevice::PowerSourceVoltage,10,0) != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+
+    CHECK(device->create_resource_instance(M2MDevice::PowerSourceCurrent,10,0) != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+
+    free(m2mbase_stub::void_value);
+    delete m2mobjectinstance_stub::create_resource_instance;
+    m2mobjectinstance_stub::create_resource_instance = NULL;
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource  = NULL;
+}
+
+void Test_M2MDevice::test_create_resource_string()
+{
+    m2mresourceinstance_stub::value = NULL;
+    CHECK(device->create_resource(M2MDevice::Reboot,"test") == NULL);
+    CHECK(device->create_resource(M2MDevice::ErrorCode,"test") == NULL);
+    CHECK(device->create_resource(M2MDevice::SupportedBindingMode,"test") == NULL);
+    // Length 65, should fail
+    String max_lenght = "65656565656565656565656565656565656565656565656565656565656565656";
+    m2mobjectinstance_stub::create_resource = new M2MResource(*m2mobject_stub::inst,
+                                                              "name",
+                                                              "type",
+                                                              M2MResourceInstance::STRING,
+                                                              false,
+                                                              "name");
+
+    CHECK(device->create_resource(M2MDevice::Manufacturer,"test") != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+
+    CHECK(device->create_resource(M2MDevice::Manufacturer,max_lenght) == NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+    m2mresource_stub::bool_value = false;
+    //Duplicate resource
+    CHECK(device->create_resource(M2MDevice::Manufacturer,"test") == NULL);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    CHECK(device->create_resource(M2MDevice::DeviceType,"test") != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+    CHECK(device->create_resource(M2MDevice::DeviceType,"") != NULL);
+    CHECK(device->create_resource(M2MDevice::DeviceType,max_lenght) == NULL);
+
+    CHECK(device->create_resource(M2MDevice::ModelNumber,"test") != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+    CHECK(device->create_resource(M2MDevice::ModelNumber,max_lenght) == NULL);
+
+
+    CHECK(device->create_resource(M2MDevice::SerialNumber,"test") != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+    CHECK(device->create_resource(M2MDevice::SerialNumber,max_lenght) == NULL);
+
+
+    CHECK(device->create_resource(M2MDevice::HardwareVersion,"test") != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+    CHECK(device->create_resource(M2MDevice::HardwareVersion,max_lenght) == NULL);
+
+
+    CHECK(device->create_resource(M2MDevice::FirmwareVersion,"test") != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+    CHECK(device->create_resource(M2MDevice::FirmwareVersion,max_lenght) == NULL);
+
+
+    CHECK(device->create_resource(M2MDevice::SoftwareVersion,"test") != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+    CHECK(device->create_resource(M2MDevice::SoftwareVersion,max_lenght) == NULL);
+
+
+    CHECK(device->create_resource(M2MDevice::UTCOffset,"test") != NULL);
+    CHECK(M2MBase::GET_PUT_ALLOWED == m2mbase_stub::operation);
+    CHECK(device->create_resource(M2MDevice::UTCOffset,max_lenght) == NULL);
+
+
+    CHECK(device->create_resource(M2MDevice::Timezone,"test") != NULL);
+    CHECK(M2MBase::GET_PUT_ALLOWED == m2mbase_stub::operation);
+    CHECK(device->create_resource(M2MDevice::Timezone,max_lenght) == NULL);
+
+    CHECK(device->create_resource(M2MDevice::BatteryLevel,"test") == NULL);
+    CHECK(device->create_resource(M2MDevice::BatteryStatus,"test") == NULL);
+    CHECK(device->create_resource(M2MDevice::MemoryFree,"test") == NULL);
+    CHECK(device->create_resource(M2MDevice::MemoryTotal,"test") == NULL);
+    CHECK(device->create_resource(M2MDevice::ResetErrorCode,"test") == NULL);
+    CHECK(device->create_resource(M2MDevice::CurrentTime,"test") == NULL);
+    CHECK(device->create_resource(M2MDevice::AvailablePowerSources,"test") == NULL);
+    CHECK(device->create_resource(M2MDevice::PowerSourceVoltage,"test") == NULL);
+    CHECK(device->create_resource(M2MDevice::PowerSourceCurrent,"test") == NULL);
+    CHECK(device->create_resource(M2MDevice::FactoryReset,"test") == NULL);
+
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+}
+
+void Test_M2MDevice::test_create_resource_int()
+{
+    m2mobjectinstance_stub::create_resource = new M2MResource(*m2mobject_stub::inst,
+                                                              "name",
+                                                              "type",
+                                                              M2MResourceInstance::STRING,
+                                                              false,
+                                                              "name");
+
+    CHECK(device->create_resource(M2MDevice::Reboot,10) == NULL);
+    CHECK(device->create_resource(M2MDevice::SupportedBindingMode,10) == NULL);
+
+    CHECK(device->create_resource(M2MDevice::Manufacturer,10) == NULL);
+    CHECK(device->create_resource(M2MDevice::DeviceType,10) == NULL);
+    CHECK(device->create_resource(M2MDevice::ModelNumber,10) == NULL);
+    CHECK(device->create_resource(M2MDevice::SerialNumber,10) == NULL);
+    CHECK(device->create_resource(M2MDevice::HardwareVersion,10) == NULL);
+    CHECK(device->create_resource(M2MDevice::FirmwareVersion,10) == NULL);
+    CHECK(device->create_resource(M2MDevice::SoftwareVersion,10) == NULL);
+    CHECK(device->create_resource(M2MDevice::UTCOffset,10) == NULL);
+    CHECK(device->create_resource(M2MDevice::Timezone,10) == NULL);
+    CHECK(device->create_resource(M2MDevice::FactoryReset,10) == NULL);
+
+    m2mbase_stub::void_value = malloc(20);
+
+    CHECK(device->create_resource(M2MDevice::BatteryLevel,10) != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+
+    // Range is above 100
+    CHECK(device->create_resource(M2MDevice::BatteryLevel,101) == NULL);
+
+    CHECK(device->create_resource(M2MDevice::BatteryStatus,4) != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+
+    // Range is above 6
+    CHECK(device->create_resource(M2MDevice::BatteryStatus,10) == NULL);
+
+    CHECK(device->create_resource(M2MDevice::MemoryFree,10) != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+
+    CHECK(device->create_resource(M2MDevice::MemoryTotal,10) != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+
+    CHECK(device->create_resource(M2MDevice::CurrentTime,10) != NULL);
+    CHECK(M2MBase::GET_PUT_ALLOWED == m2mbase_stub::operation);
+
+    free(m2mbase_stub::void_value);
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+}
+
+void Test_M2MDevice::test_create_resource_no_param()
+{
+    m2mobjectinstance_stub::create_resource = new M2MResource(*m2mobject_stub::inst,
+                                                              "name",
+                                                              "type",
+                                                              M2MResourceInstance::STRING,
+                                                              false,
+                                                              "name");
+
+
+    CHECK(device->create_resource(M2MDevice::Reboot) == NULL);
+    CHECK(device->create_resource(M2MDevice::ErrorCode) == NULL);
+    CHECK(device->create_resource(M2MDevice::SupportedBindingMode) == NULL);
+
+    CHECK(device->create_resource(M2MDevice::Manufacturer) == NULL);
+    CHECK(device->create_resource(M2MDevice::DeviceType) == NULL);
+    CHECK(device->create_resource(M2MDevice::ModelNumber) == NULL);
+    CHECK(device->create_resource(M2MDevice::SerialNumber) == NULL);
+    CHECK(device->create_resource(M2MDevice::HardwareVersion) == NULL);
+    CHECK(device->create_resource(M2MDevice::FirmwareVersion) == NULL);
+    CHECK(device->create_resource(M2MDevice::SoftwareVersion) == NULL);
+    CHECK(device->create_resource(M2MDevice::UTCOffset) == NULL);
+    CHECK(device->create_resource(M2MDevice::Timezone) == NULL);
+
+    CHECK(device->create_resource(M2MDevice::BatteryLevel) == NULL);
+    CHECK(device->create_resource(M2MDevice::BatteryStatus) == NULL);
+    CHECK(device->create_resource(M2MDevice::MemoryFree) == NULL);
+    CHECK(device->create_resource(M2MDevice::MemoryTotal) == NULL);
+    CHECK(device->create_resource(M2MDevice::CurrentTime) == NULL);
+    CHECK(device->create_resource(M2MDevice::AvailablePowerSources) == NULL);
+    CHECK(device->create_resource(M2MDevice::PowerSourceVoltage) == NULL);
+    CHECK(device->create_resource(M2MDevice::PowerSourceCurrent) == NULL);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    CHECK(device->create_resource(M2MDevice::ResetErrorCode) != NULL);
+
+    CHECK(device->create_resource(M2MDevice::FactoryReset) != NULL);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    CHECK(M2MBase::POST_ALLOWED == m2mbase_stub::operation);
+
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+
+
+}
+
+void Test_M2MDevice::test_delete_resource()
+{
+    m2mobjectinstance_stub::bool_value = true;
+
+    CHECK(device->delete_resource(M2MDevice::Reboot) == false);
+    CHECK(device->delete_resource(M2MDevice::ErrorCode) == false);
+    CHECK(device->delete_resource(M2MDevice::SupportedBindingMode) == false);
+
+    CHECK(device->delete_resource(M2MDevice::Manufacturer) == true);
+    CHECK(device->delete_resource(M2MDevice::BatteryLevel) == true);
+    CHECK(device->delete_resource(M2MDevice::FactoryReset) == true);
+}
+
+void Test_M2MDevice::test_delete_resource_instance()
+{
+    m2mobjectinstance_stub::bool_value = true;
+
+    CHECK(device->delete_resource_instance(M2MDevice::Reboot,0) == false);
+    CHECK(device->delete_resource_instance(M2MDevice::ErrorCode,0) == false);
+    CHECK(device->delete_resource_instance(M2MDevice::SupportedBindingMode,0) == false);
+
+    CHECK(device->delete_resource_instance(M2MDevice::AvailablePowerSources,0) == true);
+    CHECK(device->delete_resource_instance(M2MDevice::PowerSourceVoltage,0) == true);
+    CHECK(device->delete_resource_instance(M2MDevice::PowerSourceCurrent,0) == true);
+}
+
+void Test_M2MDevice::test_set_resource_value_string()
+{
+    // Length 65, should fail
+    m2mresourceinstance_stub::value = NULL;
+    String max_lenght = "65656565656565656565656565656565656565656565656565656565656565656";
+    m2mbase_stub::bool_value = true;
+    m2mresourceinstance_stub::bool_value = true;
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+    m2mresource_stub::bool_value = false;
+
+    m2mbase_stub::void_value = malloc(20);
+
+    CHECK(device->set_resource_value(M2MDevice::Reboot,"test") == false);
+    CHECK(device->set_resource_value(M2MDevice::ErrorCode,"test") == false);
+    CHECK(device->set_resource_value(M2MDevice::SupportedBindingMode,"test") == false);
+
+    CHECK(device->set_resource_value(M2MDevice::Manufacturer,"test") == true);
+    CHECK(device->set_resource_value(M2MDevice::Manufacturer,"") == true);
+    CHECK(device->set_resource_value(M2MDevice::Manufacturer,max_lenght) == false);
+    CHECK(device->set_resource_value(M2MDevice::DeviceType,"test") == true);
+    CHECK(device->set_resource_value(M2MDevice::DeviceType,max_lenght) == false);
+    CHECK(device->set_resource_value(M2MDevice::ModelNumber,"test") == true);
+    CHECK(device->set_resource_value(M2MDevice::ModelNumber,max_lenght) == false);
+    CHECK(device->set_resource_value(M2MDevice::SerialNumber,"test") == true);
+    CHECK(device->set_resource_value(M2MDevice::SerialNumber,max_lenght) == false);
+    CHECK(device->set_resource_value(M2MDevice::HardwareVersion,"test") == true);
+    CHECK(device->set_resource_value(M2MDevice::HardwareVersion,max_lenght) == false);
+    CHECK(device->set_resource_value(M2MDevice::FirmwareVersion,"test") == true);
+    CHECK(device->set_resource_value(M2MDevice::FirmwareVersion,max_lenght) == false);
+    CHECK(device->set_resource_value(M2MDevice::SoftwareVersion,"test") == true);
+    CHECK(device->set_resource_value(M2MDevice::SoftwareVersion,max_lenght) == false);
+    CHECK(device->set_resource_value(M2MDevice::UTCOffset,"test") == true);
+    CHECK(device->set_resource_value(M2MDevice::UTCOffset,max_lenght) == false);
+    CHECK(device->set_resource_value(M2MDevice::Timezone,"test") == true);
+    CHECK(device->set_resource_value(M2MDevice::Timezone,max_lenght) == false);
+    CHECK(device->set_resource_value(M2MDevice::Timezone,"") == true);
+
+    CHECK(device->set_resource_value(M2MDevice::BatteryLevel,"test") == false);
+    CHECK(device->set_resource_value(M2MDevice::BatteryStatus,"test") == false);
+    CHECK(device->set_resource_value(M2MDevice::MemoryFree,"test") == false);
+    CHECK(device->set_resource_value(M2MDevice::MemoryTotal,"test") == false);
+    CHECK(device->set_resource_value(M2MDevice::ResetErrorCode,"test") == false);
+    CHECK(device->set_resource_value(M2MDevice::CurrentTime,"test") == false);
+    CHECK(device->set_resource_value(M2MDevice::AvailablePowerSources,"test") == false);
+    CHECK(device->set_resource_value(M2MDevice::PowerSourceVoltage,"test") == false);
+    CHECK(device->set_resource_value(M2MDevice::PowerSourceCurrent,"test") == false);
+    CHECK(device->set_resource_value(M2MDevice::FactoryReset,"test") == false);
+
+    free(m2mbase_stub::void_value);
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+}
+
+void Test_M2MDevice::test_set_resource_value_int()
+{
+    m2mresourceinstance_stub::bool_value = true;
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+    m2mresource_stub::bool_value = false;
+
+    m2mbase_stub::void_value = malloc(20);
+
+    CHECK(device->set_resource_value(M2MDevice::Reboot,10) == false);
+    CHECK(device->set_resource_value(M2MDevice::SupportedBindingMode,10) == false);
+
+    CHECK(device->set_resource_value(M2MDevice::Manufacturer,10) == false);
+    CHECK(device->set_resource_value(M2MDevice::DeviceType,10) == false);
+    CHECK(device->set_resource_value(M2MDevice::ModelNumber,10) == false);
+    CHECK(device->set_resource_value(M2MDevice::SerialNumber,10) == false);
+    CHECK(device->set_resource_value(M2MDevice::HardwareVersion,10) == false);
+    CHECK(device->set_resource_value(M2MDevice::FirmwareVersion,10) == false);
+    CHECK(device->set_resource_value(M2MDevice::SoftwareVersion,10) == false);
+    CHECK(device->set_resource_value(M2MDevice::UTCOffset,10) == false);
+    CHECK(device->set_resource_value(M2MDevice::Timezone,10) == false);
+
+    CHECK(device->set_resource_value(M2MDevice::BatteryLevel,-1) == false);
+    CHECK(device->set_resource_value(M2MDevice::BatteryLevel,10) == true);
+    CHECK(device->set_resource_value(M2MDevice::BatteryLevel,101) == false);
+    CHECK(device->set_resource_value(M2MDevice::BatteryStatus,6) == true);
+    CHECK(device->set_resource_value(M2MDevice::BatteryStatus,-1) == false);
+    CHECK(device->set_resource_value(M2MDevice::BatteryStatus,7) == false);
+    CHECK(device->set_resource_value(M2MDevice::MemoryFree,10) == true);
+    CHECK(device->set_resource_value(M2MDevice::MemoryTotal,10) == true);
+    CHECK(device->set_resource_value(M2MDevice::CurrentTime,10) == true);
+    CHECK(device->set_resource_value(M2MDevice::FactoryReset,10) == false);
+
+    free(m2mbase_stub::void_value);
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+}
+
+void Test_M2MDevice::test_resource_value_int()
+{
+    uint8_t value[] = {"10"};
+    uint8_t* ptr = (uint8_t*)malloc((uint32_t)sizeof(value));
+    m2mresourceinstance_stub::value = ptr;
+    memset(m2mresourceinstance_stub::value,0,(uint32_t)sizeof(value));
+    memcpy(m2mresourceinstance_stub::value,value,sizeof(value));
+    m2mresourceinstance_stub::int_value = (uint32_t)sizeof(value);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    m2mresourceinstance_stub::bool_value = true;
+    m2mresource_stub::bool_value = false;
+    m2mbase_stub::void_value = malloc(20);
+
+    CHECK(device->resource_value_int(M2MDevice::BatteryLevel) == 10);
+    CHECK(device->resource_value_int(M2MDevice::BatteryStatus) == 10);
+    CHECK(device->resource_value_int(M2MDevice::MemoryFree) == 10);
+    CHECK(device->resource_value_int(M2MDevice::MemoryTotal) == 10);
+    CHECK(device->resource_value_int(M2MDevice::ErrorCode) == 10);
+    CHECK(device->resource_value_int(M2MDevice::CurrentTime) == 10);
+    CHECK(device->resource_value_int(M2MDevice::AvailablePowerSources) == 10);
+    CHECK(device->resource_value_int(M2MDevice::PowerSourceVoltage) == 10);
+    CHECK(device->resource_value_int(M2MDevice::PowerSourceCurrent) == 10);
+    CHECK(device->resource_value_int(M2MDevice::Manufacturer) == -1);
+
+    m2mresource_stub::instance= new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                        "name",
+                                                        "type",
+                                                        M2MResourceInstance::STRING,
+                                                        0,
+                                                        "name",
+                                                        false);
+    m2mresource_stub::bool_value = true;
+    CHECK(device->resource_value_int(M2MDevice::AvailablePowerSources,1) == 10);
+
+    free(m2mbase_stub::void_value);
+
+    delete m2mresource_stub::instance;
+    m2mresource_stub::instance = NULL;
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    free(ptr);
+}
+
+void Test_M2MDevice::test_resource_value_string()
+{
+    String test = "string";
+    uint8_t value[] = {"string"};
+    m2mresourceinstance_stub::value = (uint8_t*)malloc((uint32_t)sizeof(value));
+    memset(m2mresourceinstance_stub::value,0,(uint32_t)sizeof(value));
+    memcpy(m2mresourceinstance_stub::value,value,sizeof(value));
+    m2mresourceinstance_stub::int_value = (uint32_t)sizeof(value);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    m2mresourceinstance_stub::bool_value = true;
+    m2mresource_stub::bool_value = false;
+    m2mbase_stub::void_value = malloc(20);
+
+    CHECK(device->resource_value_string(M2MDevice::Manufacturer) == test);
+    CHECK(device->resource_value_string(M2MDevice::DeviceType) == test);
+    CHECK(device->resource_value_string(M2MDevice::ModelNumber) == test);
+    CHECK(device->resource_value_string(M2MDevice::SerialNumber) == test);
+    CHECK(device->resource_value_string(M2MDevice::HardwareVersion) == test);
+    CHECK(device->resource_value_string(M2MDevice::FirmwareVersion) == test);
+    CHECK(device->resource_value_string(M2MDevice::SoftwareVersion) == test);
+    CHECK(device->resource_value_string(M2MDevice::UTCOffset) == test);
+    CHECK(device->resource_value_string(M2MDevice::Timezone) == test);
+    CHECK(device->resource_value_string(M2MDevice::BatteryLevel) == "");
+
+    free(m2mbase_stub::void_value);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+}
+
+void Test_M2MDevice::test_is_resource_present()
+{
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+    m2mresource_stub::bool_value = false;
+    CHECK(device->is_resource_present(M2MDevice::Reboot) == true);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    CHECK(device->is_resource_present(M2MDevice::Manufacturer) == false);
+    CHECK(device->is_resource_present(M2MDevice::DeviceType) == false);
+}
+
+void Test_M2MDevice::test_per_resource_count()
+{
+    m2mobjectinstance_stub::int_value = 1;
+    CHECK(device->per_resource_count(M2MDevice::Reboot) == 1);
+
+    m2mobjectinstance_stub::int_value = 0;
+
+    CHECK(device->per_resource_count(M2MDevice::Manufacturer) == 0);
+}
+
+void Test_M2MDevice::test_total_resource_count()
+{
+    M2MResource res(*m2mobject_stub::inst,"test","test",M2MResourceInstance::STRING,false, "test");
+
+    m2mobjectinstance_stub::resource_list.push_back(&res);
+    M2MResource res2(*m2mobject_stub::inst,"test","test",M2MResourceInstance::STRING,false, "test");
+
+    m2mobjectinstance_stub::resource_list.push_back(&res2);
+
+    CHECK(device->total_resource_count() == 2);
+
+    m2mobjectinstance_stub::resource_list.clear();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mdevice/test_m2mdevice.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_DEVICE_H
+#define TEST_M2M_DEVICE_H
+
+
+#include <m2mdevice.h>
+
+class Callback;
+
+class Test_M2MDevice
+{
+public:
+    Test_M2MDevice();
+    virtual ~Test_M2MDevice();
+
+    void test_create_resource_instance();
+
+    void test_create_resource_string();
+
+    void test_create_resource_int();
+
+    void test_create_resource_no_param();
+
+    void test_delete_resource();
+
+    void test_delete_resource_instance();
+
+    void test_set_resource_value_int();
+
+    void test_set_resource_value_string();
+
+    void test_resource_value_int();
+
+    void test_resource_value_string();
+
+    void test_is_resource_present();
+
+    void test_per_resource_count();
+
+    void test_total_resource_count();
+
+    M2MDevice* device;
+};
+
+#endif // TEST_M2M_DEVICE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mfirmware/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,27 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mfirmware
+        "main.cpp"
+        "m2mfirmwaretest.cpp"
+        "test_m2mfirmware.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mobjectinstance_stub.cpp"
+        "../stub/m2mresource_stub.cpp"
+        "../stub/m2mresourceinstance_stub.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "../../../../source/m2mfirmware.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2mfirmware
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mfirmware
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mfirmware")
+add_test(m2mfirmware ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mfirmware/m2mfirmwaretest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mfirmware.h"
+
+TEST_GROUP(M2MFirmware)
+{
+  Test_M2MFirmware* m2m_firmware;
+
+  void setup()
+  {
+    m2m_firmware = new Test_M2MFirmware();
+  }
+  void teardown()
+  {
+    delete m2m_firmware;
+  }
+};
+
+TEST(M2MFirmware, Create)
+{
+    CHECK(m2m_firmware != NULL);
+}
+
+TEST(M2MFirmware, create_resource_string)
+{
+    m2m_firmware->test_create_resource_string();
+}
+
+TEST(M2MFirmware, create_resource_int)
+{
+    m2m_firmware->test_create_resource_int();
+}
+
+TEST(M2MFirmware, delete_resource)
+{
+    m2m_firmware->test_delete_resource();
+}
+
+TEST(M2MFirmware, set_resource_value_int)
+{
+    m2m_firmware->test_set_resource_value_int();
+}
+
+TEST(M2MFirmware, set_resource_value_string)
+{
+    m2m_firmware->test_set_resource_value_string();
+}
+
+TEST(M2MFirmware, resource_value_int)
+{
+    m2m_firmware->test_resource_value_int();
+}
+
+TEST(M2MFirmware, resource_value_string)
+{
+    m2m_firmware->test_resource_value_string();
+}
+
+TEST(M2MFirmware, is_resource_present)
+{
+    m2m_firmware->test_is_resource_present();
+}
+
+TEST(M2MFirmware, per_resource_count)
+{
+    m2m_firmware->test_per_resource_count();
+}
+
+TEST(M2MFirmware, total_resource_count)
+{
+    m2m_firmware->test_total_resource_count();
+}
+
+TEST(M2MFirmware, set_resource_value_buffer)
+{
+    m2m_firmware->test_set_resource_value_buffer();
+}
+
+TEST(M2MFirmware, resource_value_buffer)
+{
+    m2m_firmware->test_resource_value_buffer();
+}
+
+TEST(M2MFirmware, resource_name)
+{
+    m2m_firmware->test_resource_name();
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mfirmware/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MFirmware );
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mfirmware/test_m2mfirmware.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,440 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mfirmware.h"
+#include "m2mobject_stub.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mresource_stub.h"
+#include "m2mresourceinstance_stub.h"
+#include "m2mbase_stub.h"
+#include "nsdlaccesshelper_stub.h"
+
+Test_M2MFirmware::Test_M2MFirmware()
+{
+    M2MObject* obj = new M2MObject("name", "name");
+    m2mobject_stub::inst = new M2MObjectInstance(*obj,
+                                                 "name","","");
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    m2mobjectinstance_stub::create_resource_instance= new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "type",
+                                                                              M2MResourceInstance::STRING,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+    m2mresource_stub::bool_value = true;
+    m2mobjectinstance_stub::create_resource = new M2MResource(*m2mobject_stub::inst,
+                                                              "name",
+                                                              "type",
+                                                              M2MResourceInstance::STRING,
+                                                              false,
+                                                              "name");
+    firmware = M2MFirmware::get_instance();
+
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    delete m2mobjectinstance_stub::create_resource_instance;
+    m2mobjectinstance_stub::create_resource_instance = NULL;
+    delete obj;
+}
+
+Test_M2MFirmware::~Test_M2MFirmware()
+{
+    delete m2mobject_stub::inst;
+    m2mobject_stub::inst = NULL;
+
+    M2MFirmware::delete_instance();
+    firmware = NULL;
+}
+
+void Test_M2MFirmware::test_create_resource_string()
+{
+    CHECK(firmware->create_resource(M2MFirmware::Package, "test") == NULL);
+    CHECK(firmware->create_resource(M2MFirmware::Update, "test") == NULL);
+    CHECK(firmware->create_resource(M2MFirmware::State, "test") == NULL);
+
+    m2mobjectinstance_stub::create_resource = new M2MResource(*m2mobject_stub::inst,
+                                                              "name",
+                                                              "type",
+                                                              M2MResourceInstance::STRING,
+                                                              false,
+                                                              "name");
+    CHECK(firmware->create_resource(M2MFirmware::PackageName,"test") != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+    CHECK(firmware->create_resource(M2MFirmware::PackageName,"") != NULL);
+
+    // Check size limit
+    String test = "";
+    for (int i = 0; i <= 255; i++) {
+        test.append("a", 1);
+    }
+    // 255 + null-termination
+    CHECK(firmware->create_resource(M2MFirmware::PackageVersion,test) == NULL);
+
+    test = "";
+    for (int i = 0; i <= 254; i++) {
+        test.append("a", 1);
+    }
+    // 254 + null-termination
+    CHECK(firmware->create_resource(M2MFirmware::PackageVersion,test) != NULL);
+    CHECK(M2MBase::GET_ALLOWED == m2mbase_stub::operation);
+
+
+    CHECK(firmware->create_resource(M2MFirmware::Package,"test") == NULL);
+    CHECK(firmware->create_resource(M2MFirmware::Update,"test") == NULL);
+    CHECK(firmware->create_resource(M2MFirmware::State,"test") == NULL);
+    CHECK(firmware->create_resource(M2MFirmware::UpdateSupportedObjects,"test") == NULL);
+    CHECK(firmware->create_resource(M2MFirmware::UpdateResult,"test") == NULL);
+
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+}
+
+void Test_M2MFirmware::test_create_resource_int()
+{
+    m2mobjectinstance_stub::create_resource = new M2MResource(*m2mobject_stub::inst,
+                                                              "name",
+                                                              "type",
+                                                              M2MResourceInstance::STRING,
+                                                              false,
+                                                              "name");
+
+    CHECK(firmware->create_resource(M2MFirmware::PackageVersion,10) == NULL);
+    CHECK(firmware->create_resource(M2MFirmware::PackageName,10) == NULL);
+    CHECK(firmware->create_resource(M2MFirmware::Package,10) == NULL);
+    CHECK(firmware->create_resource(M2MFirmware::Update,10) == NULL);
+
+    m2mbase_stub::void_value = malloc(20);
+
+    CHECK(firmware->create_resource(M2MFirmware::UpdateSupportedObjects,false) != NULL);
+    CHECK(firmware->create_resource(M2MFirmware::UpdateSupportedObjects,true) != NULL);
+    CHECK(firmware->create_resource(M2MFirmware::UpdateSupportedObjects,5) == NULL);
+    CHECK(M2MBase::GET_PUT_ALLOWED == m2mbase_stub::operation);
+
+    CHECK(firmware->create_resource(M2MFirmware::Update,10) == NULL);
+
+    free(m2mbase_stub::void_value);
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+}
+
+
+void Test_M2MFirmware::test_delete_resource()
+{
+    m2mobjectinstance_stub::bool_value = true;
+
+    CHECK(firmware->delete_resource(M2MFirmware::PackageName) == true);
+    CHECK(firmware->delete_resource(M2MFirmware::PackageVersion) == true);
+    CHECK(firmware->delete_resource(M2MFirmware::UpdateSupportedObjects) == true);
+
+    CHECK(firmware->delete_resource(M2MFirmware::Package) == false);
+    CHECK(firmware->delete_resource(M2MFirmware::PackageUri) == false);
+    CHECK(firmware->delete_resource(M2MFirmware::State) == false);
+    CHECK(firmware->delete_resource(M2MFirmware::UpdateResult) == false);
+    CHECK(firmware->delete_resource(M2MFirmware::Update) == false);
+}
+
+void Test_M2MFirmware::test_set_resource_value_string()
+{
+    m2mresourceinstance_stub::value = NULL;
+    m2mbase_stub::bool_value = true;
+    m2mresourceinstance_stub::bool_value = true;
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+    m2mresource_stub::bool_value = false;
+
+    m2mbase_stub::void_value = malloc(20);
+
+    CHECK(firmware->set_resource_value(M2MFirmware::PackageName,"test") == true);
+    CHECK(firmware->set_resource_value(M2MFirmware::PackageVersion,"test") == true);
+    CHECK(firmware->set_resource_value(M2MFirmware::PackageUri,"test") == true);
+    CHECK(firmware->set_resource_value(M2MFirmware::PackageUri,"") == true);
+
+    // Check size limit
+    String test = "";
+    for (int i = 0; i <= 255; i++) {
+        test.append("a", 1);
+    }
+    CHECK(firmware->set_resource_value(M2MFirmware::PackageUri,test) == false);
+
+    CHECK(firmware->set_resource_value(M2MFirmware::Package,"test") == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::State,"test") == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::UpdateResult,"test") == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::UpdateSupportedObjects,"test") == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::Update,"test") == false);
+
+    free(m2mbase_stub::void_value);
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+}
+
+void Test_M2MFirmware::test_set_resource_value_int()
+{
+    m2mresourceinstance_stub::bool_value = true;
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+    m2mresource_stub::bool_value = false;
+
+    m2mbase_stub::void_value = malloc(20);
+
+    CHECK(firmware->set_resource_value(M2MFirmware::PackageName,10) == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::PackageVersion,10) == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::PackageUri,10) == false);
+
+    CHECK(firmware->set_resource_value(M2MFirmware::Package,10) == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::State,2) == true);
+    CHECK(firmware->set_resource_value(M2MFirmware::State,1) == true);
+    CHECK(firmware->set_resource_value(M2MFirmware::State,3) == true);
+    CHECK(firmware->set_resource_value(M2MFirmware::State,4) == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::State,0) == true);
+    CHECK(firmware->set_resource_value(M2MFirmware::UpdateResult,2) == true);
+    CHECK(firmware->set_resource_value(M2MFirmware::UpdateResult,20) == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::UpdateSupportedObjects,true) == true);
+    CHECK(firmware->set_resource_value(M2MFirmware::Update,10) == false);
+    CHECK(firmware->check_value_range(M2MFirmware::Update,10) == false);
+
+    free(m2mbase_stub::void_value);
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+}
+
+
+void Test_M2MFirmware::test_resource_value_int()
+{
+    uint8_t value[] = {"10"};
+    uint8_t* ptr = (uint8_t*)malloc((uint32_t)sizeof(value));
+    m2mresourceinstance_stub::value = ptr;
+    memset(m2mresourceinstance_stub::value,0,(uint32_t)sizeof(value));
+    memcpy(m2mresourceinstance_stub::value, value,sizeof(value));
+    m2mresourceinstance_stub::int_value = (uint32_t)sizeof(value);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    m2mresourceinstance_stub::bool_value = true;
+    m2mresource_stub::bool_value = false;
+    m2mbase_stub::void_value = malloc(20);
+
+    CHECK(firmware->resource_value_int(M2MFirmware::State) == 10);
+    CHECK(firmware->resource_value_int(M2MFirmware::UpdateResult) == 10);
+    CHECK(firmware->resource_value_int(M2MFirmware::UpdateSupportedObjects) == 10);
+    CHECK(firmware->resource_value_int(M2MFirmware::PackageName) == -1);
+    CHECK(firmware->resource_value_int(M2MFirmware::Package) == -1);
+    CHECK(firmware->resource_value_int(M2MFirmware::PackageUri) == -1);
+    CHECK(firmware->resource_value_int(M2MFirmware::PackageVersion) == -1);
+    CHECK(firmware->resource_value_int(M2MFirmware::Update) == -1);
+
+    free(m2mbase_stub::void_value);
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    free(ptr);
+}
+
+void Test_M2MFirmware::test_resource_value_string()
+{
+    String test = "string";
+    uint8_t value[] = {"string"};
+    m2mresourceinstance_stub::value = (uint8_t*)malloc((uint32_t)sizeof(value));
+    memset(m2mresourceinstance_stub::value,0,(uint32_t)sizeof(value));
+    memcpy(m2mresourceinstance_stub::value,value,sizeof(value));
+    m2mresourceinstance_stub::int_value = (uint32_t)sizeof(value);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    m2mresourceinstance_stub::bool_value = true;
+    m2mresource_stub::bool_value = false;
+    m2mbase_stub::void_value = malloc(20);
+
+    CHECK(firmware->resource_value_string(M2MFirmware::PackageUri) == test);
+    CHECK(firmware->resource_value_string(M2MFirmware::PackageName) == test);
+    CHECK(firmware->resource_value_string(M2MFirmware::PackageVersion) == test);
+    CHECK(firmware->resource_value_string(M2MFirmware::Package) == "");
+    CHECK(firmware->resource_value_string(M2MFirmware::Update) == "");
+    CHECK(firmware->resource_value_string(M2MFirmware::UpdateResult) == "");
+    CHECK(firmware->resource_value_string(M2MFirmware::UpdateSupportedObjects) == "");
+    CHECK(firmware->resource_value_string(M2MFirmware::State) == "");
+
+    free(m2mbase_stub::void_value);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+}
+
+void Test_M2MFirmware::test_is_resource_present()
+{
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+    m2mresource_stub::bool_value = false;
+    CHECK(firmware->is_resource_present(M2MFirmware::PackageUri) == true);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    CHECK(firmware->is_resource_present(M2MFirmware::PackageName) == false);
+    CHECK(firmware->is_resource_present(M2MFirmware::PackageVersion) == false);
+}
+
+void Test_M2MFirmware::test_per_resource_count()
+{
+    m2mobjectinstance_stub::int_value = 1;
+    CHECK(firmware->per_resource_count(M2MFirmware::Package) == 1);
+
+    m2mobjectinstance_stub::int_value = 0;
+
+    CHECK(firmware->per_resource_count(M2MFirmware::PackageVersion) == 0);
+}
+
+
+
+void Test_M2MFirmware::test_total_resource_count()
+{
+    M2MResource res(*m2mobject_stub::inst,
+                    "name",
+                    "type",
+                    M2MResourceInstance::STRING,
+                    false,
+                    "name");
+
+    m2mobjectinstance_stub::resource_list.push_back(&res);
+    M2MResource res2(*m2mobject_stub::inst,
+                     "name",
+                     "type",
+                     M2MResourceInstance::STRING,
+                     false,
+                     "name");
+
+    m2mobjectinstance_stub::resource_list.push_back(&res2);
+
+    CHECK(firmware->total_resource_count() == 2);
+
+    m2mobjectinstance_stub::resource_list.clear();
+}
+
+void Test_M2MFirmware::test_resource_value_buffer()
+{
+    m2mresourceinstance_stub::bool_value = true;
+
+    uint8_t value[] = {"buffer"};
+    uint8_t *out_value = NULL;
+
+    m2mresourceinstance_stub::value = (uint8_t*)malloc((uint32_t)sizeof(value));
+    memset(m2mresourceinstance_stub::value,0,(uint32_t)sizeof(value));
+    memcpy(m2mresourceinstance_stub::value,value,sizeof(value));
+    m2mresourceinstance_stub::int_value = (uint16_t)sizeof(value);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    CHECK(firmware->resource_value_buffer(M2MFirmware::Package,out_value) != 0);
+
+    CHECK(firmware->resource_value_buffer(M2MFirmware::PackageName,out_value) == 0);
+    CHECK(firmware->resource_value_buffer(M2MFirmware::PackageUri,out_value) == 0);
+    CHECK(firmware->resource_value_buffer(M2MFirmware::PackageVersion,out_value) == 0);
+    CHECK(firmware->resource_value_buffer(M2MFirmware::Update,out_value) == 0);
+    CHECK(firmware->resource_value_buffer(M2MFirmware::State,out_value) == 0);
+    CHECK(firmware->resource_value_buffer(M2MFirmware::UpdateResult,out_value) == 0);
+    CHECK(firmware->resource_value_buffer(M2MFirmware::UpdateSupportedObjects,out_value) == 0);
+
+
+    free(out_value);
+    out_value = NULL;
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+}
+
+void Test_M2MFirmware::test_set_resource_value_buffer()
+{
+    m2mresourceinstance_stub::bool_value = true;
+
+    uint8_t value[] = {"value"};
+    uint16_t length = (uint16_t)sizeof(value);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    CHECK(firmware->set_resource_value(M2MFirmware::Package,value,length) == true);
+    CHECK(firmware->set_resource_value(M2MFirmware::PackageName,value,length) == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::PackageUri,value,length) == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::PackageVersion,value,length) == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::State,value,length) == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::Update,value,length) == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::UpdateResult,value,length) == false);
+    CHECK(firmware->set_resource_value(M2MFirmware::UpdateSupportedObjects,value,length) == false);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+}
+
+void Test_M2MFirmware::test_resource_name()
+{
+    STRCMP_EQUAL(firmware->resource_name(M2MFirmware::Package), "0");
+    STRCMP_EQUAL(firmware->resource_name(M2MFirmware::PackageUri), "1");
+    STRCMP_EQUAL(firmware->resource_name(M2MFirmware::Update), "2");
+    STRCMP_EQUAL(firmware->resource_name(M2MFirmware::State), "3");
+    STRCMP_EQUAL(firmware->resource_name(M2MFirmware::UpdateSupportedObjects), "4");
+    STRCMP_EQUAL(firmware->resource_name(M2MFirmware::UpdateResult), "5");
+    STRCMP_EQUAL(firmware->resource_name(M2MFirmware::PackageName), "6");
+    STRCMP_EQUAL(firmware->resource_name(M2MFirmware::PackageVersion), "7");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mfirmware/test_m2mfirmware.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_FIRMWARE_H
+#define TEST_M2M_FIRMWARE_H
+
+
+#include <m2mfirmware.h>
+
+class Callback;
+
+class Test_M2MFirmware
+{
+public:
+    Test_M2MFirmware();
+    virtual ~Test_M2MFirmware();
+
+    void test_create_resource_string();
+
+    void test_create_resource_int();
+
+    void test_delete_resource();
+
+    void test_set_resource_value_int();
+
+    void test_set_resource_value_string();
+
+    void test_resource_value_int();
+
+    void test_resource_value_string();
+
+    void test_is_resource_present();
+
+    void test_per_resource_count();
+
+    void test_total_resource_count();
+
+    void test_resource_value_buffer();
+
+    void test_set_resource_value_buffer();
+
+    void test_resource_name();
+
+    M2MFirmware* firmware;
+};
+
+#endif // TEST_M2M_FIRMWARE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2minterfacefactory/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2minterfacefactorytest
+        "main.cpp"
+        "m2minterfacefactorytest.cpp"
+        "test_m2minterfacefactory.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mresource_stub.cpp"
+        "../stub/m2mresourceinstance_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mobjectinstance_stub.cpp"
+        "../stub/m2mdevice_stub.cpp"
+        "../stub/m2mfirmware_stub.cpp"
+        "../stub/m2msecurity_stub.cpp"
+        "../stub/m2mserver_stub.cpp"
+        "../stub/m2mtimer_stub.cpp"
+        "../stub/m2mnsdlinterface_stub.cpp"
+        "../stub/m2minterfaceimpl_stub.cpp"
+        "../stub/m2mconnectionhandler_stub.cpp"
+        "../stub/m2mconnectionsecurity_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "../../../../source/m2minterfacefactory.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2minterfacefactorytest
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2minterfacefactorytest
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2minterfacefactorytest")
+add_test(m2minterfacefactorytest ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2minterfacefactory/m2minterfacefactorytest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2minterfacefactory.h"
+
+TEST_GROUP(M2MInterfaceFactory)
+{
+  Test_M2MInterfaceFactory* m2m_factory;
+
+  void setup()
+  {
+    m2m_factory = new Test_M2MInterfaceFactory();
+  }
+  void teardown()
+  {
+    delete m2m_factory;
+  }
+};
+
+
+TEST(M2MInterfaceFactory, create_interface)
+{
+    m2m_factory->test_create_interface();
+}
+
+TEST(M2MInterfaceFactory, create_device)
+{
+     m2m_factory->test_create_device();
+}
+
+TEST(M2MInterfaceFactory, create_security)
+{
+    m2m_factory->test_create_security();
+}
+
+TEST(M2MInterfaceFactory, create_server)
+{
+    m2m_factory->test_create_server();
+}
+
+TEST(M2MInterfaceFactory, create_object)
+{
+    m2m_factory->test_create_object();
+}
+
+TEST(M2MInterfaceFactory, create_firmware)
+{
+    m2m_factory->test_create_firmware();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2minterfacefactory/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MInterfaceFactory);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2minterfacefactory/test_m2minterfacefactory.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2minterfacefactory.h"
+#include "m2minterfaceobserver.h"
+#include "m2mserver.h"
+#include "m2mdevice.h"
+#include "m2mfirmware.h"
+
+class TestObserver : public M2MInterfaceObserver {
+
+public:
+    TestObserver(){}
+    void bootstrap_done(M2MSecurity */*server_object*/){}
+    void object_registered(M2MSecurity */*security_object*/,
+                           const M2MServer &/*server_object*/) {}
+
+    void object_unregistered(M2MSecurity */*server_object*/){}
+
+    void registration_updated(M2MSecurity */*security_object*/,
+                              const M2MServer &/*server_object*/){}
+
+    void error(M2MInterface::Error /*error*/){}
+
+    void value_updated(M2MBase */*base*/, M2MBase::BaseType /*type*/){}
+};
+
+Test_M2MInterfaceFactory::Test_M2MInterfaceFactory()
+{
+}
+
+Test_M2MInterfaceFactory::~Test_M2MInterfaceFactory()
+{
+
+}
+
+void Test_M2MInterfaceFactory::test_create_interface()
+{
+    TestObserver test_obs;
+    M2MInterface *test = M2MInterfaceFactory::create_interface(test_obs,
+                                                "endpoint_name",
+                                                "endpoint_type",
+                                                120,
+                                                8000,
+                                                "domain");
+    CHECK(test != NULL);
+    delete test;
+    test = NULL;
+
+    // Endpoint name and type of length more than 64 characters
+    test = M2MInterfaceFactory::create_interface(test_obs,
+                                                "endpoint_name-very-long-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1",
+                                                "endpoint_type-very-long-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1",
+                                                120,
+                                                8000,
+                                                "domain");
+    CHECK(test == NULL);
+    delete test;
+
+    // Domain length more than 64 characters
+    test = M2MInterfaceFactory::create_interface(test_obs,
+                                                "endpoint_name",
+                                                "endpoint_type",
+                                                120,
+                                                8000,
+                                                "domaidomaindomaindomaindomaindomaindomaindomaindomaindomaindomaindomaindomaindomain");
+    CHECK(test == NULL);
+    delete test;
+
+}
+
+void Test_M2MInterfaceFactory::test_create_security()
+{
+    M2MSecurity *test = M2MInterfaceFactory::create_security(M2MSecurity::Bootstrap);
+    CHECK(test != NULL);
+    delete test;
+    test = NULL;
+}
+
+void Test_M2MInterfaceFactory::test_create_device()
+{
+    M2MDevice *test = M2MInterfaceFactory::create_device();
+    CHECK(test != NULL);
+    delete test;
+    test = NULL;
+}
+
+void Test_M2MInterfaceFactory::test_create_firmware()
+{
+    M2MFirmware *test = M2MInterfaceFactory::create_firmware();
+    CHECK(test != NULL);
+    delete test;
+    test = NULL;
+}
+
+void Test_M2MInterfaceFactory::test_create_server()
+{
+    M2MServer *test = M2MInterfaceFactory::create_server();
+    CHECK(test != NULL);
+    delete test;
+    test = NULL;
+}
+
+void Test_M2MInterfaceFactory::test_create_object()
+{
+    M2MObject *test = M2MInterfaceFactory::create_object("name");
+    CHECK(test != NULL);
+    delete test;
+    test = NULL;
+
+    // Length 65, should fail
+    String max_lenght = "65656565656565656565656565656565656565656565656565656565656565656";
+    CHECK(M2MInterfaceFactory::create_object("") == NULL);
+    CHECK(M2MInterfaceFactory::create_object(max_lenght) == NULL);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2minterfacefactory/test_m2minterfacefactory.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_INTERFACE_FACTORY_H
+#define TEST_M2M_INTERFACE_FACTORY_H
+
+#include "m2minterfacefactory.h"
+
+class Test_M2MInterfaceFactory
+{
+
+public:
+    Test_M2MInterfaceFactory();
+    virtual ~Test_M2MInterfaceFactory();
+
+    void test_create_interface();
+
+    void test_create_security();
+
+    void test_create_device();
+
+    void test_create_firmware();
+
+    void test_create_server();
+
+    void test_create_object();
+};
+
+#endif // TEST_M2M_INTERFACE_FACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2minterfaceimpl/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,34 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2minterfaceimpl
+        "main.cpp"
+        "m2minterfaceimpltest.cpp"
+        "test_m2minterfaceimpl.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mresource_stub.cpp"
+        "../stub/m2mresourceinstance_stub.cpp"
+        "../stub/m2mobjectinstance_stub.cpp"
+        "../stub/m2msecurity_stub.cpp"
+        "../stub/m2mtimer_stub.cpp"
+        "../stub/m2mnsdlinterface_stub.cpp"
+        "../stub/m2mconnectionhandler_stub.cpp"
+        "../stub/m2mconnectionsecurity_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "../stub/m2mserver_stub.cpp"
+        "../../../../source/m2minterfaceimpl.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2minterfaceimpl
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2minterfaceimpl
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2minterfaceimpl")
+add_test(m2minterfaceimpl ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2minterfaceimpl/m2minterfaceimpltest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2minterfaceimpl.h"
+#include "m2mnsdlinterface_stub.h"
+
+TEST_GROUP(M2MInterfaceImpl)
+{
+    Test_M2MInterfaceImpl* m2m_interface_impl;
+
+    void setup()
+    {
+        m2mnsdlinterface_stub::string_value = new String();
+        m2m_interface_impl = new Test_M2MInterfaceImpl();
+    }
+    void teardown()
+    {
+        delete m2mnsdlinterface_stub::string_value;
+        delete m2m_interface_impl;
+    }
+};
+
+TEST(M2MInterfaceImpl, create)
+{
+    CHECK(m2m_interface_impl->impl != NULL);
+}
+
+TEST(M2MInterfaceImpl, test_constructor)
+{
+    m2m_interface_impl->test_constructor();
+}
+
+TEST(M2MInterfaceImpl, bootstrap)
+{
+    m2m_interface_impl->test_bootstrap();
+}
+
+TEST(M2MInterfaceImpl, cancel_bootstrap)
+{
+    m2m_interface_impl->test_cancel_bootstrap();
+}
+
+TEST(M2MInterfaceImpl, register_object)
+{
+    m2m_interface_impl->test_register_object();
+}
+
+TEST(M2MInterfaceImpl, update_registration)
+{
+    m2m_interface_impl->test_update_registration();
+}
+
+TEST(M2MInterfaceImpl, unregister_object)
+{
+    m2m_interface_impl->test_unregister_object();
+}
+
+TEST(M2MInterfaceImpl, set_queue_sleep_handler)
+{
+    m2m_interface_impl->test_set_queue_sleep_handler();
+}
+
+TEST(M2MInterfaceImpl, test_set_random_number_callback)
+{
+    m2m_interface_impl->test_set_random_number_callback();
+}
+
+TEST(M2MInterfaceImpl, test_set_entropy_callback)
+{
+    m2m_interface_impl->test_set_entropy_callback();
+}
+
+TEST(M2MInterfaceImpl, test_set_platform_network_handler)
+{
+    m2m_interface_impl->test_set_platform_network_handler();
+}
+
+TEST(M2MInterfaceImpl, coap_message_ready)
+{
+    m2m_interface_impl->test_coap_message_ready();
+}
+
+TEST(M2MInterfaceImpl, client_registered)
+{
+    m2m_interface_impl->test_client_registered();
+}
+
+TEST(M2MInterfaceImpl, test_registration_updated)
+{
+    m2m_interface_impl->test_registration_updated();
+}
+
+TEST(M2MInterfaceImpl, registration_error)
+{
+    m2m_interface_impl->test_registration_error();
+}
+
+TEST(M2MInterfaceImpl, client_unregistered)
+{
+    m2m_interface_impl->test_client_unregistered();
+}
+
+TEST(M2MInterfaceImpl, bootstrap_wait)
+{
+    m2m_interface_impl->test_bootstrap_wait();
+}
+
+TEST(M2MInterfaceImpl, bootstrap_done)
+{
+    m2m_interface_impl->test_bootstrap_done();
+}
+
+TEST(M2MInterfaceImpl, bootstrap_error)
+{
+    m2m_interface_impl->test_bootstrap_error();
+}
+
+TEST(M2MInterfaceImpl, coap_data_processed)
+{
+    m2m_interface_impl->test_coap_data_processed();
+}
+
+TEST(M2MInterfaceImpl, test_value_updated)
+{
+    m2m_interface_impl->test_value_updated();
+}
+
+TEST(M2MInterfaceImpl, data_available)
+{
+    m2m_interface_impl->test_data_available();
+}
+
+TEST(M2MInterfaceImpl, socket_error)
+{
+    m2m_interface_impl->test_socket_error();
+}
+
+TEST(M2MInterfaceImpl, address_ready)
+{
+    m2m_interface_impl->test_address_ready();
+}
+
+TEST(M2MInterfaceImpl, data_sent)
+{
+    m2m_interface_impl->test_data_sent();
+}
+
+TEST(M2MInterfaceImpl, timer_expired)
+{
+    m2m_interface_impl->test_timer_expired();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2minterfaceimpl/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MInterfaceImpl);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2minterfaceimpl/test_m2minterfaceimpl.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,767 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2minterfaceimpl.h"
+#include "m2minterfaceobserver.h"
+#include "m2mconnectionhandler_stub.h"
+#include "m2msecurity_stub.h"
+#include "m2mnsdlinterface_stub.h"
+#include "m2mobject_stub.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mbase.h"
+
+entropy_cb ent_cb;
+
+class TestObserver : public M2MInterfaceObserver {
+
+public:
+    TestObserver() : val_updated(false), error_occured(false),
+            registered(false), unregistered(false), bootstrapped(false)
+    {
+    }
+
+    virtual ~TestObserver(){}
+    void bootstrap_done(M2MSecurity */*server_object*/){
+        bootstrapped = true;
+    }
+
+    void object_registered(M2MSecurity */*security_object*/,
+                           const M2MServer &/*server_object*/) {
+        registered = true;
+    }
+
+    void object_unregistered(M2MSecurity */*server_object*/){
+        unregistered = true;
+    }
+
+    void registration_updated(M2MSecurity */*security_object*/,
+                              const M2MServer &/*server_object*/){
+        registered = true;
+    }
+
+    void error(M2MInterface::Error /*error*/){
+        error_occured = true;
+    }
+
+    void value_updated(M2MBase *, M2MBase::BaseType ){
+        val_updated = true;
+    }
+
+    bool val_updated;
+    bool error_occured;
+    bool registered;
+    bool unregistered;
+    bool bootstrapped;
+};
+
+class M2MBaseTest : public M2MBase
+{
+public:
+    M2MBaseTest() : M2MBase("a", M2MBase::Static, "type","a",false){}
+};
+
+Test_M2MInterfaceImpl::Test_M2MInterfaceImpl()
+{
+    observer = new TestObserver();
+    impl = new M2MInterfaceImpl(*observer,
+                                "endpoint_name",
+                                "endpoint_type",
+                                120,
+                                8000,
+                                "domain");
+}
+
+Test_M2MInterfaceImpl:: ~Test_M2MInterfaceImpl()
+{
+    delete observer;
+    delete impl;
+}
+
+void Test_M2MInterfaceImpl::test_constructor()
+{
+    TestObserver obs;
+
+    M2MInterfaceImpl* obj = new M2MInterfaceImpl(obs,
+                                            "endpoint_name",
+                                            "endpoint_type",
+                                            120,
+                                            8000,
+                                            "domain",
+                                            M2MInterface::TCP);
+    CHECK(obj->_current_state == 0);
+    //TODO: Check rest of variables
+    delete obj;
+    obj = new M2MInterfaceImpl(obs,
+                                            "endpoint_name",
+                                            "endpoint_type",
+                                            120,
+                                            8000,
+                                            "domain",
+                                            M2MInterface::TCP_QUEUE);
+    delete obj;
+}
+
+void Test_M2MInterfaceImpl::test_bootstrap()
+{
+    M2MSecurity *sec = new M2MSecurity(M2MSecurity::Bootstrap);
+    m2msecurity_stub::int_value = 2;
+    String *val = new String("coaps://[2001:12:12:23::23:FF]:5685");
+
+    m2msecurity_stub::string_value = val;
+    m2mnsdlinterface_stub::bool_value = true;
+    m2mconnectionhandler_stub::bool_value = true;
+
+
+    impl->bootstrap(NULL);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+
+    impl->bootstrap(sec);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_BOOTSTRAP);
+
+    delete val;
+
+    val = new String("coaps://[10.45.3.83:5685");
+
+    impl->_current_state = M2MInterfaceImpl::STATE_IDLE;
+
+    m2msecurity_stub::string_value = val;
+    m2mnsdlinterface_stub::bool_value = true;
+    m2mconnectionhandler_stub::bool_value = true;
+    impl->_security = NULL;
+    impl->bootstrap(sec);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+
+    delete val;
+
+    val = new String("coaps://10.45.3.83]:5685");
+
+    impl->_current_state = M2MInterfaceImpl::STATE_IDLE;
+
+    m2msecurity_stub::string_value = val;
+    m2mnsdlinterface_stub::bool_value = true;
+    m2mconnectionhandler_stub::bool_value = true;
+    impl->_security = NULL;
+    impl->bootstrap(sec);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+
+    delete val;
+
+    val = new String("coap://10.45.3.83:5685");
+
+    impl->_current_state = M2MInterfaceImpl::STATE_IDLE;
+    impl->_security = NULL;
+    m2msecurity_stub::string_value = val;
+    m2mnsdlinterface_stub::bool_value = true;
+    m2mconnectionhandler_stub::bool_value = true;
+    impl->bootstrap(sec);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_BOOTSTRAP);
+
+    delete val;
+
+    val = new String("coap://10.45.3.83:5685");
+    impl->_current_state = M2MInterfaceImpl::STATE_IDLE;
+    m2msecurity_stub::string_value = val;
+    m2mnsdlinterface_stub::bool_value = true;
+    m2mconnectionhandler_stub::bool_value = true;
+    impl->bootstrap(sec);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_BOOTSTRAP);
+
+    delete val;
+
+    val = new String("coap://10.45.3.83:5685");
+    m2msecurity_stub::string_value = val;
+    m2mconnectionhandler_stub::bool_value = true;
+
+    impl->bootstrap(sec);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_BOOTSTRAP);
+
+    impl->_current_state =  M2MInterfaceImpl::STATE_IDLE;
+    m2mconnectionhandler_stub::bool_value = false;
+
+    // Ignore the event.
+    impl->_current_state =  M2MInterfaceImpl::STATE_WAITING;
+    impl->bootstrap(sec);
+
+    m2mconnectionhandler_stub::bool_value = true;
+
+    impl->bootstrap(sec);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+    CHECK(observer->error_occured == true);
+
+    delete val;
+    val = NULL;
+
+    delete sec;
+}
+
+void Test_M2MInterfaceImpl::test_cancel_bootstrap()
+{
+    // Check for coverage, currently no implementation
+    impl->cancel_bootstrap();
+}
+
+void Test_M2MInterfaceImpl::test_register_object()
+{
+    M2MSecurity *sec = new M2MSecurity(M2MSecurity::M2MServer);
+    m2msecurity_stub::int_value = 2;
+
+    M2MObject *object = new M2MObject("test", "test");
+    M2MObjectInstance *ins = object->create_object_instance();
+    ins->create_dynamic_resource("test","type",M2MResourceInstance::STRING,false,false);
+
+    M2MObjectList list;
+    list.push_back(object);
+
+    String *val = new String("coaps://[2001:12:12:23::23:FF]:5685");
+    m2msecurity_stub::string_value = val;
+    m2mnsdlinterface_stub::bool_value = true;
+    m2mconnectionhandler_stub::bool_value = true;
+
+    impl->register_object(NULL,list);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+
+    impl->register_object(sec,list);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_REGISTER);
+
+    impl->_current_state = M2MInterfaceImpl::STATE_IDLE;
+    impl->register_object(sec,list);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_REGISTER);
+
+    delete val;
+    val = new String("coaps://[10.45.3.83:5685");
+    impl->_current_state = M2MInterfaceImpl::STATE_IDLE;
+    m2msecurity_stub::string_value = val;
+    m2mnsdlinterface_stub::bool_value = true;
+    m2mconnectionhandler_stub::bool_value = true;
+
+    delete impl->_security;
+    impl->_security = NULL;
+    sec = new M2MSecurity(M2MSecurity::M2MServer);
+    impl->register_object(sec,list);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->error_occured == true);
+    observer->error_occured = false;
+    delete val;
+    val = new String("coaps://10.45.3.83]:5685");
+
+    impl->_current_state = M2MInterfaceImpl::STATE_IDLE;
+
+    m2msecurity_stub::string_value = val;
+    m2mnsdlinterface_stub::bool_value = true;
+    m2mconnectionhandler_stub::bool_value = true;
+
+    delete impl->_security;
+    impl->_security = NULL;
+    sec = new M2MSecurity(M2MSecurity::M2MServer);
+    impl->register_object(sec,list);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->error_occured == true);
+
+    observer->error_occured = false;
+    delete val;
+    val = new String("coaps://10.45.3.83:5685");
+    delete impl->_security;
+    impl->_security = NULL;
+    sec = new M2MSecurity(M2MSecurity::M2MServer);
+
+    impl->_current_state = M2MInterfaceImpl::STATE_IDLE;
+
+    m2msecurity_stub::string_value = val;
+    m2mnsdlinterface_stub::bool_value = true;
+    m2mconnectionhandler_stub::bool_value = true;
+
+    impl->register_object(sec,list);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_REGISTER);
+
+    observer->error_occured = false;
+    delete val;
+    val = new String("coap://10.45.3.83:5685");
+    delete impl->_security;
+    impl->_security = NULL;
+    sec = new M2MSecurity(M2MSecurity::M2MServer);
+
+    impl->_current_state = M2MInterfaceImpl::STATE_IDLE;
+
+    m2msecurity_stub::string_value = val;
+    m2mnsdlinterface_stub::bool_value = true;
+    m2mconnectionhandler_stub::bool_value = true;
+
+    impl->register_object(sec,list);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_REGISTER);
+
+    delete val;
+    val = new String("coap://10.45.3.83:5685");
+    impl->register_object(sec,list);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_REGISTER);
+
+
+    impl->_current_state =  M2MInterfaceImpl::STATE_IDLE;
+    m2mconnectionhandler_stub::bool_value = true;
+    m2mnsdlinterface_stub::bool_value = false;
+
+    delete impl->_security;
+    impl->_security = NULL;
+    sec = new M2MSecurity(M2MSecurity::M2MServer);
+    impl->register_object(sec,list);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->error_occured == true);
+
+    impl->_current_state =  M2MInterfaceImpl::STATE_BOOTSTRAP;
+    m2mconnectionhandler_stub::bool_value = true;
+    m2mnsdlinterface_stub::bool_value = true;
+
+    impl->register_object(sec,list);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_BOOTSTRAP);
+    CHECK(observer->error_occured == true);
+
+    impl->_current_state =  M2MInterfaceImpl::STATE_BOOTSTRAP;
+    m2mconnectionhandler_stub::bool_value = true;
+    m2mnsdlinterface_stub::bool_value = true;
+
+    impl->register_object(sec,list);
+
+    CHECK(observer->error_occured == true);
+
+
+    delete val;
+    val = NULL;
+
+    list.clear();
+    delete object;
+    delete sec;
+}
+
+void Test_M2MInterfaceImpl::test_update_registration()
+{
+    impl->_current_state = M2MInterfaceImpl::STATE_REGISTERED;
+    m2mnsdlinterface_stub::bool_value = true;
+    impl->update_registration(NULL,120);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_UPDATE_REGISTRATION);
+
+    impl->_current_state = M2MInterfaceImpl::STATE_REGISTERED;
+    m2mnsdlinterface_stub::bool_value = false;
+    impl->update_registration(NULL,120);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_UPDATE_REGISTRATION);
+
+    impl->_current_state = M2MInterfaceImpl::STATE_IDLE;
+    impl->update_registration(NULL,120);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->error_occured == true);
+
+    impl->_current_state = M2MInterfaceImpl::STATE_BOOTSTRAP;
+    impl->update_registration(NULL,120);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_BOOTSTRAP);
+    CHECK(observer->error_occured == true);
+
+    impl->update_registration(NULL,30);
+    CHECK(observer->error_occured == true);
+
+    impl->update_registration(NULL,120);
+    CHECK(observer->error_occured == true);
+
+
+    M2MObject *object = new M2MObject("test", "test");
+    M2MObjectInstance *ins = object->create_object_instance();
+    ins->create_dynamic_resource("test","type",M2MResourceInstance::STRING,false,false);
+
+    M2MObjectList list;
+    list.push_back(object);
+    impl->_current_state = M2MInterfaceImpl::STATE_REGISTERED;
+    m2mnsdlinterface_stub::bool_value = false;
+    impl->update_registration(NULL, list);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_UPDATE_REGISTRATION);
+    list.clear();
+
+    impl->_current_state = M2MInterfaceImpl::STATE_REGISTERED;
+    m2mnsdlinterface_stub::bool_value = false;
+    impl->update_registration(NULL, list);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_UPDATE_REGISTRATION);
+    delete object;
+
+}
+
+void Test_M2MInterfaceImpl::test_unregister_object()
+{
+    impl->_current_state = M2MInterfaceImpl::STATE_REGISTERED;
+    m2mnsdlinterface_stub::bool_value = true;
+
+    impl->unregister_object(NULL);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+
+    impl->_current_state = M2MInterfaceImpl::STATE_REGISTERED;
+    m2mnsdlinterface_stub::bool_value = false;
+
+    impl->unregister_object(NULL);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->error_occured == true);
+
+    impl->_current_state = M2MInterfaceImpl::STATE_IDLE;
+
+    impl->unregister_object(NULL);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->error_occured == true);
+}
+
+void Test_M2MInterfaceImpl::test_set_queue_sleep_handler()
+{
+    callback_handler cb(this,&Test_M2MInterfaceImpl::test_callback_handler);
+    impl->set_queue_sleep_handler(cb);
+    CHECK(impl->_callback_handler != NULL);
+
+    callback_handler cb1(NULL);
+    impl->set_queue_sleep_handler(cb1);
+    CHECK(impl->_callback_handler == NULL);
+}
+
+
+void Test_M2MInterfaceImpl::test_set_random_number_callback()
+{
+    random_number_cb cb(&test_random_callback);
+    impl->set_random_number_callback(cb);
+}
+
+void Test_M2MInterfaceImpl::test_set_entropy_callback()
+{
+    impl->set_entropy_callback(ent_cb);
+}
+
+void Test_M2MInterfaceImpl::test_set_platform_network_handler()
+{
+    void *test = NULL;
+    impl->set_platform_network_handler(test);
+}
+
+void Test_M2MInterfaceImpl::test_coap_message_ready()
+{
+    m2mconnectionhandler_stub::bool_value = true;
+    uint8_t *data_ptr = (uint8_t *)malloc(sizeof(uint8_t));
+    uint16_t data_len = sizeof(uint8_t);
+    sn_nsdl_addr_s *address_ptr = (sn_nsdl_addr_s*)malloc(sizeof(sn_nsdl_addr_s));
+
+    impl->coap_message_ready(data_ptr,data_len,address_ptr);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+
+    impl->_current_state = M2MInterfaceImpl::STATE_WAITING;
+    impl->coap_message_ready(data_ptr,data_len,address_ptr);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+
+    m2mconnectionhandler_stub::bool_value = false;
+    impl->coap_message_ready(data_ptr,data_len,address_ptr);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->error_occured == true);
+
+    free(address_ptr);
+    free(data_ptr);
+}
+
+void Test_M2MInterfaceImpl::test_client_registered()
+{
+    impl->client_registered(NULL);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_REGISTERED);
+    CHECK(observer->registered == true);
+}
+
+void Test_M2MInterfaceImpl::test_registration_updated()
+{
+    M2MServer *server = NULL;
+    impl->registration_updated(*server);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_REGISTERED);
+    CHECK(observer->registered == true);
+}
+
+void Test_M2MInterfaceImpl::test_registration_error()
+{
+    impl->registration_error(1);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->error_occured == true);
+
+    observer->error_occured = false;
+    impl->registration_error(1, true);
+    CHECK(observer->error_occured == false);
+}
+
+void Test_M2MInterfaceImpl::test_client_unregistered()
+{
+    impl->client_unregistered();
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->unregistered == true);
+}
+
+void Test_M2MInterfaceImpl::test_bootstrap_wait()
+{
+    M2MSecurity *sec = new M2MSecurity(M2MSecurity::M2MServer);
+    impl->bootstrap_wait(sec);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_BOOTSTRAP_WAIT);
+    CHECK(impl->_security == sec);
+    CHECK(observer->bootstrapped == false);
+
+    delete sec;
+}
+
+
+void Test_M2MInterfaceImpl::test_bootstrap_done()
+{
+    M2MSecurity *sec = new M2MSecurity(M2MSecurity::M2MServer);
+    impl->bootstrap_done(sec);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_BOOTSTRAPPED);
+    CHECK(observer->bootstrapped == true);
+
+    delete sec;
+}
+
+void Test_M2MInterfaceImpl::test_bootstrap_error()
+{
+    impl->bootstrap_error();
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->error_occured == true);
+}
+
+void Test_M2MInterfaceImpl::test_coap_data_processed()
+{
+    impl->coap_data_processed();
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+}
+
+void Test_M2MInterfaceImpl::test_value_updated()
+{
+    impl->value_updated(NULL);
+    CHECK(observer->val_updated == false);
+
+    M2MBaseTest b;
+    impl->value_updated(&b);
+    CHECK(observer->val_updated == true);
+}
+
+void Test_M2MInterfaceImpl::test_data_available()
+{
+    uint8_t* data = (uint8_t*)malloc(sizeof(uint8_t));
+    uint16_t data_size = sizeof(uint8_t);
+    M2MConnectionObserver::SocketAddress *address = (M2MConnectionObserver::SocketAddress*)
+                                                    malloc(sizeof(M2MConnectionObserver::SocketAddress));
+
+    address->_stack = M2MInterface::LwIP_IPv4;
+    m2mnsdlinterface_stub::bool_value = true;
+
+    impl->data_available(data,data_size,*address);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+
+    address->_stack = M2MInterface::LwIP_IPv6;
+    m2mnsdlinterface_stub::bool_value = true;
+
+    impl->data_available(data,data_size,*address);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+
+    address->_stack = M2MInterface::LwIP_IPv4;
+    m2mnsdlinterface_stub::bool_value = false;
+
+    impl->data_available(data,data_size,*address);
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+    CHECK(observer->error_occured == true);
+
+    free(data);
+    free(address);
+}
+
+void Test_M2MInterfaceImpl::test_socket_error()
+{
+    for (int i = 0; i <= MBED_CLIENT_RECONNECTION_COUNT; i++) {
+        impl->socket_error(M2MConnectionHandler::SSL_CONNECTION_ERROR);
+        impl->_retry_timer_expired = true;
+    }
+    CHECK(observer->error_occured == true);
+
+    observer->error_occured = false;
+    impl->socket_error(M2MConnectionHandler::SOCKET_READ_ERROR, false);
+    CHECK(observer->error_occured == true);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+
+    observer->error_occured = false;
+    impl->socket_error(M2MConnectionHandler::DNS_RESOLVING_ERROR, false);
+    CHECK(observer->error_occured == true);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+
+    observer->error_occured = false;
+    impl->socket_error(M2MConnectionHandler::SOCKET_SEND_ERROR, false);
+    CHECK(observer->error_occured == true);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+
+    observer->error_occured = false;
+    impl->socket_error(M2MConnectionHandler::SSL_HANDSHAKE_ERROR, false);
+    CHECK(observer->error_occured == true);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+
+    observer->error_occured = false;
+    impl->socket_error(M2MConnectionHandler::SOCKET_ABORT, false);
+    CHECK(observer->error_occured == true);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+
+    observer->error_occured = false;
+    impl->socket_error(M2MConnectionHandler::ERROR_NONE, false);
+    CHECK(observer->error_occured == false);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+}
+
+void Test_M2MInterfaceImpl::test_address_ready()
+{
+    M2MConnectionObserver::SocketAddress *address =
+        (M2MConnectionObserver::SocketAddress*) malloc(sizeof(M2MConnectionObserver::SocketAddress));
+    M2MConnectionObserver::ServerType server_type = M2MConnectionObserver::Bootstrap;
+    uint16_t server_port = 5685;
+
+    address->_stack = M2MInterface::LwIP_IPv6;
+    m2mnsdlinterface_stub::bool_value = true;
+
+    impl->address_ready(*address,server_type,server_port);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_BOOTSTRAP_RESOURCE_CREATED);
+
+    address->_stack = M2MInterface::LwIP_IPv4;
+    m2mnsdlinterface_stub::bool_value = true;
+
+    impl->address_ready(*address,server_type,server_port);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_BOOTSTRAP_RESOURCE_CREATED);
+
+
+    address->_stack = M2MInterface::LwIP_IPv6;
+    m2mnsdlinterface_stub::bool_value = false;
+
+    impl->address_ready(*address,server_type,server_port);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->error_occured == true);
+
+    // Test for Address resolving for LWM2M server
+    server_type = M2MConnectionObserver::LWM2MServer;
+
+    address->_stack = M2MInterface::LwIP_IPv4;
+    m2mnsdlinterface_stub::bool_value = true;
+
+    impl->address_ready(*address,server_type,server_port);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_REGISTER_ADDRESS_RESOLVED);
+
+    impl->address_ready(*address,server_type,server_port);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_REGISTER_ADDRESS_RESOLVED);
+
+    address->_stack = M2MInterface::LwIP_IPv6;
+    m2mnsdlinterface_stub::bool_value = false;
+
+    impl->address_ready(*address,server_type,server_port);
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_IDLE);
+    CHECK(observer->error_occured == true);
+
+    free(address);
+}
+
+void Test_M2MInterfaceImpl::test_data_sent()
+{
+    m2mconnectionhandler_stub::bool_value = true;
+
+    impl->data_sent();
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+
+    m2mconnectionhandler_stub::bool_value = false;
+
+    impl->data_sent();
+
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+    CHECK(observer->error_occured == false);
+
+    impl->_callback_handler = callback_handler(this, &Test_M2MInterfaceImpl::test_callback_handler);
+
+    m2mconnectionhandler_stub::bool_value = true;
+
+    impl->_binding_mode = M2MInterface::UDP_QUEUE;
+    impl->data_sent();
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+
+    impl->_binding_mode = M2MInterface::TCP_QUEUE;
+    impl->data_sent();
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+
+    impl->_binding_mode = M2MInterface::SMS_QUEUE;
+    impl->data_sent();
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+
+    impl->_binding_mode = M2MInterface::UDP_SMS_QUEUE;
+    impl->data_sent();
+    CHECK(impl->_current_state == M2MInterfaceImpl::STATE_WAITING);
+}
+
+void Test_M2MInterfaceImpl::test_timer_expired()
+{
+    visited = false;
+    impl->_callback_handler = NULL;
+    impl->timer_expired(M2MTimerObserver::QueueSleep);
+    CHECK(visited == false);
+
+    impl->_callback_handler = callback_handler(this, &Test_M2MInterfaceImpl::test_callback_handler);
+
+    visited = false;
+    impl->timer_expired(M2MTimerObserver::QueueSleep);
+    CHECK(visited == true);
+    visited = false;
+
+    impl->_bootstrapped = true;
+    impl->timer_expired(M2MTimerObserver::RetryTimer);
+    CHECK(impl->_retry_timer_expired == true);
+
+    impl->_bootstrapped = false;
+    impl->timer_expired(M2MTimerObserver::RetryTimer);
+    CHECK(impl->_retry_timer_expired == true);
+
+    observer->error_occured = false;
+    impl->timer_expired(M2MTimerObserver::BootstrapTimer);
+    CHECK(observer->error_occured == true);
+}
+
+void Test_M2MInterfaceImpl::test_callback_handler()
+{
+    visited = true;
+}
+
+uint32_t test_random_callback(void)
+{
+    return 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2minterfaceimpl/test_m2minterfaceimpl.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_INTERFACE_IMPL_H
+#define TEST_M2M_INTERFACE_IMPL_H
+
+#include "m2minterfaceimpl.h"
+
+class TestObserver;
+
+uint32_t test_random_callback(void);
+
+class Test_M2MInterfaceImpl
+{
+public:
+    Test_M2MInterfaceImpl();
+
+    virtual ~Test_M2MInterfaceImpl();
+
+    void test_constructor();
+
+    void test_bootstrap();
+
+    void test_cancel_bootstrap();
+
+    void test_register_object();
+
+    void test_update_registration();
+
+    void test_unregister_object();
+
+    void test_set_queue_sleep_handler();
+
+    void test_set_random_number_callback();
+
+    void test_set_entropy_callback();
+
+    void test_set_platform_network_handler();
+
+    void test_coap_message_ready();
+
+    void test_client_registered();
+
+    void test_registration_updated();
+
+    void test_registration_error();
+
+    void test_client_unregistered();
+
+    void test_bootstrap_done();
+
+    void test_bootstrap_wait();
+
+    void test_bootstrap_error();
+
+    void test_coap_data_processed();
+
+    void test_value_updated();
+
+    void test_data_available();
+
+    void test_socket_error();
+
+    void test_address_ready();
+
+    void test_data_sent();
+
+    void test_timer_expired();
+
+    void test_callback_handler();
+
+    M2MInterfaceImpl*   impl;
+    TestObserver        *observer;
+    bool visited;
+};
+
+#endif // TEST_M2M_INTERFACE_IMPL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mnsdlinterface/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,35 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mnsdlinterface
+        "main.cpp"
+        "m2mnsdlinterfacetest.cpp"
+        "test_m2mnsdlinterface.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mserver_stub.cpp"
+        "../stub/m2mresource_stub.cpp"
+        "../stub/m2mresourceinstance_stub.cpp"
+        "../stub/m2mobjectinstance_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2msecurity_stub.cpp"
+        "../stub/m2mconnectionsecurity_stub.cpp"
+        "../stub/m2mconnectionhandler_stub.cpp"
+        "../stub/m2mtimer_stub.cpp"
+        "../stub/common_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "../stub/m2mtlvserializer_stub.cpp"
+        "../stub/m2mtlvdeserializer_stub.cpp"
+        "../../../../source/m2mnsdlinterface.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2mnsdlinterface
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mnsdlinterface
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mnsdlinterface")
+add_test(m2mnsdlinterface ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mnsdlinterface/m2mnsdlinterfacetest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mnsdlinterface.h"
+
+TEST_GROUP(M2MNsdlInterface)
+{
+  Test_M2MNsdlInterface* m2m_nsdl_interface;
+
+  void setup()
+  {
+    m2m_nsdl_interface = new Test_M2MNsdlInterface();
+  }
+  void teardown()
+  {
+    delete m2m_nsdl_interface;
+    m2m_nsdl_interface = NULL;
+  }
+};
+
+TEST(M2MNsdlInterface, create)
+{
+    CHECK(m2m_nsdl_interface->nsdl != NULL);
+}
+
+TEST(M2MNsdlInterface, memory_free)
+{
+    m2m_nsdl_interface->test_memory_free();
+}
+
+TEST(M2MNsdlInterface, memory_alloc)
+{
+    m2m_nsdl_interface->test_memory_alloc();
+}
+
+TEST(M2MNsdlInterface, send_unregister_message)
+{
+    m2m_nsdl_interface->test_send_unregister_message();
+}
+
+TEST(M2MNsdlInterface, send_update_registration)
+{
+    m2m_nsdl_interface->test_send_update_registration();
+}
+
+TEST(M2MNsdlInterface, send_register_message)
+{
+    m2m_nsdl_interface->test_send_register_message();
+}
+
+TEST(M2MNsdlInterface, create_bootstrap_resource)
+{
+    m2m_nsdl_interface->test_create_bootstrap_resource();
+}
+
+TEST(M2MNsdlInterface, delete_nsdl_resource)
+{
+    m2m_nsdl_interface->test_delete_nsdl_resource();
+}
+
+TEST(M2MNsdlInterface, delete_endpoint)
+{
+    m2m_nsdl_interface->test_delete_endpoint();
+}
+
+TEST(M2MNsdlInterface, create_endpoint)
+{
+    m2m_nsdl_interface->test_create_endpoint();
+}
+
+TEST(M2MNsdlInterface, send_to_server_callback)
+{
+    m2m_nsdl_interface->test_send_to_server_callback();
+}
+
+TEST(M2MNsdlInterface, received_from_server_callback)
+{
+    m2m_nsdl_interface->test_received_from_server_callback();
+}
+
+TEST(M2MNsdlInterface, create_nsdl_list_structure)
+{
+    m2m_nsdl_interface->test_create_nsdl_list_structure();
+}
+
+TEST(M2MNsdlInterface, resource_callback)
+{
+    m2m_nsdl_interface->test_resource_callback();
+}
+
+TEST(M2MNsdlInterface, resource_callback_get)
+{
+    m2m_nsdl_interface->test_resource_callback_get();
+}
+
+TEST(M2MNsdlInterface, resource_callback_post)
+{
+    m2m_nsdl_interface->test_resource_callback_post();
+}
+
+TEST(M2MNsdlInterface, resource_callback_delete)
+{
+    m2m_nsdl_interface->test_resource_callback_delete();
+}
+
+TEST(M2MNsdlInterface, process_received_data)
+{
+    m2m_nsdl_interface->test_process_received_data();
+}
+
+TEST(M2MNsdlInterface, timer_expired)
+{
+    m2m_nsdl_interface->test_timer_expired();
+}
+
+TEST(M2MNsdlInterface, stop_timers)
+{
+    m2m_nsdl_interface->test_stop_timers();
+}
+
+TEST(M2MNsdlInterface, observation_to_be_sent)
+{
+    m2m_nsdl_interface->test_observation_to_be_sent();
+}
+
+TEST(M2MNsdlInterface, resource_to_be_deleted)
+{
+    m2m_nsdl_interface->test_resource_to_be_deleted();
+}
+
+TEST(M2MNsdlInterface, value_updated)
+{
+    m2m_nsdl_interface->test_value_updated();
+}
+
+TEST(M2MNsdlInterface, find_resource)
+{
+    m2m_nsdl_interface->test_find_resource();
+}
+
+TEST(M2MNsdlInterface, remove_object)
+{
+    m2m_nsdl_interface->test_remove_object();
+}
+
+TEST(M2MNsdlInterface, add_object_to_list)
+{
+    m2m_nsdl_interface->test_add_object_to_list();
+}
+
+TEST(M2MNsdlInterface, test_send_delayed_response)
+{
+    m2m_nsdl_interface->test_send_delayed_response();
+}
+
+TEST(M2MNsdlInterface, resource_callback_put)
+{
+    m2m_nsdl_interface->test_resource_callback_put();
+}
+
+TEST(M2MNsdlInterface, get_nsdl_handle)
+{
+    m2m_nsdl_interface->test_get_nsdl_handle();
+}
+
+TEST(M2MNsdlInterface, endpoint_name)
+{
+    m2m_nsdl_interface->test_endpoint_name();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mnsdlinterface/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MNsdlInterface);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mnsdlinterface/test_m2mnsdlinterface.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1799 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mnsdlinterface.h"
+#include "common_stub.h"
+#include "m2msecurity_stub.h"
+#include "m2mnsdlobserver.h"
+#include "m2mobject_stub.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mresource_stub.h"
+#include "m2mresourceinstance_stub.h"
+#include "m2mresource.h"
+#include "m2mbase_stub.h"
+#include "m2mserver.h"
+#include "m2msecurity.h"
+#include "m2mtlvdeserializer_stub.h"
+class TestObserver : public M2MNsdlObserver {
+
+public:
+    TestObserver(){}
+    virtual ~TestObserver(){}
+    void coap_message_ready(uint8_t *,
+                            uint16_t,
+                            sn_nsdl_addr_s *){
+        message_ready = true;
+    }
+
+    void client_registered(M2MServer *){
+        registered = true;
+    }
+
+    void registration_updated(const M2MServer &){
+        register_updated = true;
+    }
+
+    void registration_error(uint8_t, bool retry = false){
+        register_error = true;
+    }
+
+    void client_unregistered(){
+        unregistered = true;
+    }
+
+    void bootstrap_done(M2MSecurity *sec){
+        if(sec) {
+            boot_done = true;
+            delete sec;
+            sec = NULL;
+        }
+    }
+
+    void bootstrap_wait(M2MSecurity *sec){
+        if(sec) {
+            boot_wait = true;
+            delete sec;
+            sec = NULL;
+        }
+    }
+
+    void bootstrap_error(){
+        boot_error = true;
+    }
+
+    void coap_data_processed(){
+        data_processed = true;
+    }
+
+    void value_updated(M2MBase *){
+        value_update = true;
+    }
+
+    bool register_error;
+    bool boot_error;
+    bool boot_wait;
+    bool boot_done;
+    bool registered;
+    bool register_updated;
+    bool data_processed;
+    bool unregistered;
+    bool message_ready;
+    bool value_update;
+};
+
+struct nsdl_s {
+    uint16_t update_register_msg_id;
+    uint16_t register_msg_len;
+    uint16_t update_register_msg_len;
+
+    uint16_t register_msg_id;
+    uint16_t unregister_msg_id;
+
+    uint16_t bootstrap_msg_id;
+    uint16_t oma_bs_port;                                                       /* Bootstrap port */
+    uint8_t oma_bs_address_len;                                                 /* Bootstrap address length */
+    unsigned int sn_nsdl_endpoint_registered:1;
+    bool handle_bootstrap_msg:1;
+
+    struct grs_s *grs;
+    uint8_t *oma_bs_address_ptr;                                                /* Bootstrap address pointer. If null, no bootstrap in use */
+    sn_nsdl_ep_parameters_s *ep_information_ptr;                                // Endpoint parameters, Name, Domain etc..
+    sn_nsdl_oma_server_info_t *nsp_address_ptr;                                 // NSP server address information
+
+    void (*sn_nsdl_oma_bs_done_cb)(sn_nsdl_oma_server_info_t *server_info_ptr); /* Callback to inform application when bootstrap is done */
+    void *(*sn_nsdl_alloc)(uint16_t);
+    void (*sn_nsdl_free)(void *);
+    uint8_t (*sn_nsdl_tx_callback)(struct nsdl_s *, sn_nsdl_capab_e , uint8_t *, uint16_t, sn_nsdl_addr_s *);
+    uint8_t (*sn_nsdl_rx_callback)(struct nsdl_s *, sn_coap_hdr_s *, sn_nsdl_addr_s *);
+    void (*sn_nsdl_oma_bs_done_cb_handle)(sn_nsdl_oma_server_info_t *server_info_ptr,
+                                          struct nsdl_s *handle); /* Callback to inform application when bootstrap is done with nsdl handle */
+};
+
+Test_M2MNsdlInterface::Test_M2MNsdlInterface()
+{
+    observer = new TestObserver();
+    nsdl = new M2MNsdlInterface(*observer);
+    //nsdl->_server = new M2MServer();
+}
+
+Test_M2MNsdlInterface:: ~Test_M2MNsdlInterface()
+{
+    delete nsdl;
+    nsdl = NULL;
+    delete observer;
+    observer = NULL;
+}
+
+void Test_M2MNsdlInterface::test_create_endpoint()
+{
+    u_int8_t value[]  = {"120"};
+    if( nsdl->_endpoint == NULL){
+        nsdl->_endpoint = (sn_nsdl_ep_parameters_s*)nsdl->memory_alloc(sizeof(sn_nsdl_ep_parameters_s));
+    }
+
+    nsdl->create_endpoint("name", "type",120,"domain",100,"context");
+    CHECK(nsdl->_endpoint->lifetime_len == 3);
+    CHECK(*nsdl->_endpoint->lifetime_ptr == *value);
+}
+
+void Test_M2MNsdlInterface::test_delete_endpoint()
+{
+    if( nsdl->_endpoint == NULL){
+        nsdl->_endpoint = (sn_nsdl_ep_parameters_s*)nsdl->memory_alloc(sizeof(sn_nsdl_ep_parameters_s));
+    }
+    nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(uint8_t));
+
+    nsdl->delete_endpoint();
+    CHECK(nsdl->_endpoint == NULL);
+}
+
+void Test_M2MNsdlInterface::test_create_nsdl_list_structure()
+{
+    String *name = new String("name");
+    common_stub::int_value = 0;
+    m2mbase_stub::int_value = 0;
+    M2MObject *object = new M2MObject(*name, (char*)name->c_str());
+    M2MObjectInstance* instance = new M2MObjectInstance(*object,*name, "", "name/0");
+
+    M2MResource* create_resource = new M2MResource(*instance,
+                                                   *name,
+                                                   *name,
+                                                   M2MResourceInstance::INTEGER,
+                                                   false,
+                                                   "name");
+
+    M2MResourceInstance* res_instance = new M2MResourceInstance(*create_resource, *name, *name,
+                                       M2MResourceInstance::INTEGER, 0, (char*)name->c_str(), false);
+
+    m2mobject_stub::instance_list.clear();
+    m2mobject_stub::instance_list.push_back(instance);
+
+    m2mobjectinstance_stub::resource_list.clear();
+    m2mobjectinstance_stub::resource_list.push_back(create_resource);
+
+    M2MObjectList list;
+    list.push_back(object);
+
+    m2mbase_stub::string_value = name->c_str();
+    m2mbase_stub::mode_value = M2MBase::Static;
+
+
+    CHECK(nsdl->create_nsdl_list_structure(list)== true);
+
+    m2mresource_stub::bool_value = true;
+    m2mbase_stub::mode_value = M2MBase::Dynamic;
+
+    m2mresource_stub::list.push_back(res_instance);
+    m2mresourceinstance_stub::base_type = M2MBase::Resource;
+
+    CHECK(nsdl->create_nsdl_list_structure(list)== true);
+
+    m2mbase_stub::mode_value = M2MBase::Directory;
+    CHECK(nsdl->create_nsdl_list_structure(list)== true);
+
+    list.clear();
+    delete object;
+    delete name;
+    name = NULL;
+    m2mobject_stub::instance_list.clear();
+    delete instance;
+    instance = NULL;
+    m2mobjectinstance_stub::resource_list.clear();
+    delete create_resource;
+    create_resource = NULL;
+
+    m2mresource_stub::list.clear();
+    delete res_instance;
+    res_instance = NULL;
+}
+
+void Test_M2MNsdlInterface::test_delete_nsdl_resource()
+{
+    common_stub::int_value = 0;
+    M2MObject *object = new M2MObject("name", "name");
+
+    CHECK(nsdl->remove_nsdl_resource(object) == false);
+
+    common_stub::int_value = 1;
+
+    CHECK(nsdl->remove_nsdl_resource(object) == true);
+    delete object;
+}
+
+void Test_M2MNsdlInterface::test_create_bootstrap_resource()
+{
+    common_stub::uint_value = 11;
+    CHECK(nsdl->create_bootstrap_resource(NULL, "") == true);
+
+    common_stub::uint_value = 0;
+    CHECK(nsdl->create_bootstrap_resource(NULL, "") == false);
+}
+
+void Test_M2MNsdlInterface::test_send_register_message()
+{
+    common_stub::uint_value = 12;
+    common_stub::int_value = 0;
+    CHECK(nsdl->send_register_message(NULL,4,100,SN_NSDL_ADDRESS_TYPE_IPV6) == true);
+
+    common_stub::uint_value = 0;
+    CHECK(nsdl->send_register_message(NULL,4,100,SN_NSDL_ADDRESS_TYPE_IPV6) == false);
+}
+
+void Test_M2MNsdlInterface::test_send_update_registration()
+{
+    common_stub::uint_value = 23;
+    nsdl->_nsdl_handle = (nsdl_s*)malloc(sizeof(1));
+    CHECK(nsdl->send_update_registration(120) == true);
+
+    // Update lifetime value
+    common_stub::uint_value = 1;
+    CHECK(nsdl->send_update_registration(100) == true);
+
+    // Lifetime value is 0, don't change the existing lifetime value
+    common_stub::uint_value = 1;
+    CHECK(nsdl->send_update_registration(0) == true);
+
+    free(nsdl->_nsdl_handle);
+}
+
+void Test_M2MNsdlInterface::test_send_unregister_message()
+{
+    common_stub::uint_value = 22;
+    CHECK(nsdl->send_unregister_message() == true);
+
+    // Unreg already in progress
+    common_stub::uint_value = 0;
+    CHECK(nsdl->send_unregister_message() == true);
+}
+
+void Test_M2MNsdlInterface::test_memory_alloc()
+{
+    CHECK(nsdl->memory_alloc(0) == 0);
+    uint8_t *ptr = 0;
+    ptr = (uint8_t*)nsdl->memory_alloc(sizeof(uint8_t));
+    CHECK(ptr != NULL);
+    nsdl->memory_free(ptr);
+}
+
+void Test_M2MNsdlInterface::test_memory_free()
+{
+    uint8_t *ptr = (uint8_t*)nsdl->memory_alloc(sizeof(uint8_t));
+    nsdl->memory_free((void*)ptr);
+    //memory leak test will fail, if there is a leak, so no need for CHECK
+}
+
+void Test_M2MNsdlInterface::test_send_to_server_callback()
+{
+  uint8_t *data_ptr = (uint8_t*)malloc(sizeof(uint8_t));
+  uint16_t data_len = sizeof(uint8_t);
+  sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
+
+  nsdl->send_to_server_callback(NULL, SN_NSDL_PROTOCOL_COAP, data_ptr,data_len,address);
+  CHECK(observer->message_ready == true);
+
+  free(data_ptr);
+  free(address);
+}
+
+void Test_M2MNsdlInterface::test_received_from_server_callback()
+{
+    nsdl_s* handle = (nsdl_s*)malloc(sizeof(nsdl_s));
+    memset(handle,0,sizeof(nsdl_s));
+
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CREATED;
+
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s *)malloc(sizeof(sn_coap_options_list_s));
+    memset(coap_header->options_list_ptr, 0, sizeof(sn_coap_options_list_s));
+
+    coap_header->options_list_ptr->max_age = 2;
+
+    coap_header->options_list_ptr->location_path_len = 2;
+    coap_header->options_list_ptr->location_path_ptr = (uint8_t *)malloc(sizeof(coap_header->options_list_ptr->location_path_len));
+    memset(coap_header->options_list_ptr->location_path_ptr, 0, sizeof(coap_header->options_list_ptr->location_path_len));
+
+    observer->data_processed = false;
+    observer->registered = false;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->registered == true);
+
+    free(nsdl->_endpoint->lifetime_ptr);
+    nsdl->_endpoint->lifetime_ptr = NULL;
+
+    free(nsdl->_endpoint->location_ptr);
+    nsdl->_endpoint->location_ptr = NULL;
+
+    uint8_t life1[] = {"120"};
+    nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(life1));
+    memcpy(nsdl->_endpoint->lifetime_ptr,life1,sizeof(life1));
+    nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(life1);
+
+    observer->data_processed = false;
+    observer->registered = false;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->registered == true);
+
+    free(coap_header->options_list_ptr->location_path_ptr);
+    coap_header->options_list_ptr->location_path_ptr = NULL;
+
+    free(coap_header->options_list_ptr);
+    coap_header->options_list_ptr = NULL;
+
+    free(nsdl->_endpoint->lifetime_ptr);
+    nsdl->_endpoint->lifetime_ptr = NULL;
+
+    uint8_t life[] = {"120"};
+    nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(life));
+    memcpy(nsdl->_endpoint->lifetime_ptr,life,sizeof(life));
+    nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(life);
+
+    observer->data_processed = false;
+    observer->registered = false;
+
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->registered == true);
+    free(nsdl->_endpoint->lifetime_ptr);
+    nsdl->_endpoint->lifetime_ptr = NULL;
+
+    uint8_t big_life[] = {"4000"};
+    nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(big_life));
+    memcpy(nsdl->_endpoint->lifetime_ptr,big_life,sizeof(big_life));
+    nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(big_life);
+    observer->data_processed = false;
+    observer->registered = false;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->registered == true);
+
+    free(nsdl->_endpoint->lifetime_ptr);
+    nsdl->_endpoint->lifetime_ptr = NULL;
+
+    observer->data_processed = false;
+    observer->registered = false;
+
+    uint8_t less_life[] = {"30"};
+    nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(less_life));
+    memcpy(nsdl->_endpoint->lifetime_ptr,less_life,sizeof(less_life));
+    nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(less_life);
+
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->registered == true);
+
+    observer->data_processed = false;
+    observer->registered = false;
+    observer->unregistered = false;
+    observer->register_error = false;
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->register_error == true);
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_OPTION;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->register_error == true);
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_INCOMPLETE;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->register_error == true);
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_PRECONDITION_FAILED;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->register_error == true);
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->register_error == true);
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->register_error == true);
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_UNAUTHORIZED;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->register_error == true);
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_FORBIDDEN;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->register_error == true);
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_NOT_FOUND;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->register_error == true);
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->register_error == true);
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_GATEWAY;
+    coap_header->coap_status = COAP_STATUS_BUILDER_MESSAGE_SENDING_FAILED;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->data_processed == true);
+    CHECK(observer->register_error == true);
+
+
+    coap_header->msg_id = 8;
+    handle->unregister_msg_id = 8;
+
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_DELETED;
+    observer->register_error = false;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->unregistered == true);
+
+    observer->register_error = false;
+    handle->unregister_msg_id = 8;
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CREATED;
+
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->register_error == true);
+
+    observer->register_error = false;
+    handle->unregister_msg_id = 8;
+    coap_header->coap_status = COAP_STATUS_BUILDER_MESSAGE_SENDING_FAILED;
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->register_error == true);
+
+    observer->register_error = false;
+    handle->unregister_msg_id = 8;
+    coap_header->coap_status = COAP_STATUS_PARSER_ERROR_IN_HEADER;
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->register_error == true);
+
+    observer->register_error = false;
+    handle->unregister_msg_id = 8;
+    coap_header->coap_status = COAP_STATUS_PARSER_ERROR_IN_HEADER;
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_GATEWAY_TIMEOUT;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->register_error == true);
+
+    // Receive initial bs message with error
+    handle->unregister_msg_id = 0;
+    observer->boot_error = false;
+    nsdl->_bootstrap_id = 8;
+    handle->bootstrap_msg_id = 8;
+    coap_header->coap_status = COAP_STATUS_BUILDER_MESSAGE_SENDING_FAILED;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->boot_error == true);
+
+    //_update_id == msg_id
+    handle->update_register_msg_id = 10;
+    coap_header->msg_id = 10;
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->register_updated == true);
+
+    coap_header->msg_id = 10;
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_FORBIDDEN;
+    coap_header->coap_status = COAP_STATUS_OK;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    CHECK(observer->register_error == true);
+
+    coap_header->msg_id = 11;
+    CHECK( 0== nsdl->received_from_server_callback(handle,coap_header,NULL) );
+
+    handle->update_register_msg_id = 0;
+    handle->register_msg_id = 0;
+    handle->unregister_msg_id = 0;
+    coap_header->msg_id = 10;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+
+    uint8_t object[] = {"name"};
+
+    coap_header->uri_path_ptr = object;
+    coap_header->uri_path_len = sizeof(object);
+
+    CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL));
+
+    //Test methods that are not allowed
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_GET;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+
+    //Continue testing with post method
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+
+    uint8_t object_instance[] = {"name/0"};
+
+    coap_header->uri_path_ptr = object_instance;
+    coap_header->uri_path_len = sizeof(object_instance);
+
+    coap_header->payload_ptr = (uint8_t*)malloc(1);
+    m2mobjectinstance_stub::bool_value = true;
+    CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL));
+
+    M2MObject *obj = new M2MObject("name", "name");
+
+    m2mbase_stub::string_value = "name";
+    m2mbase_stub::nsdl_resource =
+            (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
+    m2mbase_stub::nsdl_resource->static_resource_parameters =
+            (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s));
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(5);
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '\0';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 5;
+
+    nsdl->_object_list.push_back(obj);
+
+    m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", "");
+
+    m2mobject_stub::header = (sn_coap_hdr_s*) malloc(sizeof(sn_coap_hdr_s));
+    memset(m2mobject_stub::header,0,sizeof(sn_coap_hdr_s));
+
+    m2mobjectinstance_stub::header =  (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(m2mobjectinstance_stub::header, 0, sizeof(sn_coap_hdr_s));
+    m2mobjectinstance_stub::header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+    common_stub::coap_header = NULL;
+    m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance;
+
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
+    m2mobjectinstance_stub::header = NULL;
+
+    m2mobjectinstance_stub::header =  (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(m2mobjectinstance_stub::header, 0, sizeof(sn_coap_hdr_s));
+
+    m2mobjectinstance_stub::header->msg_code = COAP_MSG_CODE_RESPONSE_CREATED;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
+    m2mobjectinstance_stub::header = NULL;
+
+    free(coap_header->payload_ptr);
+    coap_header->payload_ptr = NULL;
+
+    CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL));
+
+    delete m2mobject_stub::inst;
+    nsdl->_object_list.clear();
+    delete obj;
+
+    free(coap_header->payload_ptr);
+    free(m2mobject_stub::header);
+    m2mobject_stub::header = NULL;
+
+    uint8_t object_instance1[] = {"name/65536"};
+
+    coap_header->uri_path_ptr = object_instance1;
+    coap_header->uri_path_len = sizeof(object_instance1);
+
+    obj = new M2MObject("name", "name");
+
+    nsdl->_object_list.push_back(obj);
+
+    m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", "");
+
+    m2mobject_stub::header = (sn_coap_hdr_s*) malloc(sizeof(sn_coap_hdr_s));
+    memset(m2mobject_stub::header,0,sizeof(sn_coap_hdr_s));
+
+    CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL));
+
+    delete m2mobject_stub::inst;
+    nsdl->_object_list.clear();
+    delete obj;
+
+    free(m2mobject_stub::header);
+
+    uint8_t resource[] = {"name/0/resource"};
+
+    coap_header->uri_path_ptr = resource;
+    coap_header->uri_path_len = sizeof(resource);
+
+    CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL));
+
+    // Test EMPTY ACK
+    coap_header->msg_code = COAP_MSG_CODE_EMPTY;
+    obj = new M2MObject("0", "0");
+    m2mbase_stub::string_value = "0";
+    nsdl->_object_list.push_back(obj);
+    m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", "");
+
+    uint8_t *token = (uint8_t*) malloc(4);
+    token[0] = 't';
+    token[1] = 'o';
+    token[2] = 'k';
+    token[3] = 'e';
+    coap_header->token_ptr = token;
+    coap_header->token_len = 4;
+
+    M2MResource res2(*m2mobject_stub::inst, "test","test",M2MResourceInstance::STRING,false, "test");
+    m2mbase_stub::object_token = token;
+    m2mbase_stub::object_token_len = 4;
+    m2mobject_stub::base_type = M2MBase::Resource;
+    res2.set_observation_token(token, 4);
+
+    m2mobjectinstance_stub::resource_list.push_back(&res2);
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
+
+    // Test RESET message
+    coap_header->msg_type = COAP_MSG_TYPE_RESET;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
+    m2mobject_stub::base_type = M2MBase::Object;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
+    m2mobject_stub::base_type = M2MBase::ObjectInstance;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
+    m2mobject_stub::base_type = M2MBase::ResourceInstance;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
+    free(token);
+    delete m2mobject_stub::inst;
+    delete obj;
+    nsdl->_object_list.clear();
+
+
+    // Bootstrap cases start from here
+    // handle_bootstrap_put_message() invalid object name
+    common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
+    sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
+    memset(address, 0, sizeof(sn_nsdl_addr_s));
+    address->addr_len = 1;
+    address->addr_ptr = (uint8_t *)malloc(1);
+    address->addr_ptr[0] = 1;
+    address->port = 5683;
+    handle->oma_bs_address_len = 1;
+    handle->oma_bs_port = 5683;
+    handle->oma_bs_address_ptr = (uint8_t *)malloc(1);
+    handle->oma_bs_address_ptr[0] = 1;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
+    observer->boot_error = false;
+    CHECK(0== nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+
+    // handle_bootstrap_put_message() invalid content type
+    obj = new M2MObject("0", "0");
+    m2mbase_stub::string_value = "0";
+    nsdl->_object_list.push_back(obj);
+    m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", "");
+    uint8_t security[] = {"0"};
+    coap_header->uri_path_ptr = security;
+    coap_header->uri_path_len = sizeof(security);
+    M2MResource res(*m2mobject_stub::inst,"test","test",M2MResourceInstance::STRING,false,"test");
+    m2mobjectinstance_stub::resource_list.push_back(&res);
+    observer->boot_error = false;
+    m2msecurity_stub::resource = new M2MResource(*m2mobject_stub::inst,"1","type",M2MResourceInstance::STRING,false,"1");
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+
+    // handle_bootstrap_put_message() success
+    coap_header->token_ptr = String::convert_integer_to_array(1,coap_header->token_len);
+    observer->boot_error = false;
+    m2mtlvdeserializer_stub::is_object_bool_value = true;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    coap_header->content_format = sn_coap_content_format_e(99);
+    observer->boot_error = false;
+    observer->boot_done = false;
+    m2mtlvdeserializer_stub::is_object_bool_value = true;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == false);
+
+    // handle_bootstrap_put_message() TLV parsing fails
+    observer->boot_error = false;
+    observer->boot_done = false;
+    m2mtlvdeserializer_stub::is_object_bool_value = false;
+    m2mtlvdeserializer_stub::bool_value = true;
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotAllowed;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    delete m2mobject_stub::inst;
+    nsdl->_object_list.clear();
+    delete obj;
+
+    // handle_bootstrap_put_message() TLV object instance
+    obj = new M2MObject("1", "1");
+    m2mbase_stub::string_value = "1";
+    nsdl->_object_list.push_back(obj);
+    m2mobject_stub::inst = new M2MObjectInstance(*obj, "name","", "");
+    uint8_t server[] = {"1"};
+    coap_header->uri_path_ptr = server;
+    coap_header->uri_path_len = 1;
+
+    observer->boot_error = false;
+    observer->boot_done = false;
+    m2mtlvdeserializer_stub::is_object_bool_value = false;
+    m2mtlvdeserializer_stub::bool_value = true;
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == false);
+
+    // handle_bootstrap_put_message() TLV server object
+    observer->boot_error = false;
+    observer->boot_done = false;
+    m2mtlvdeserializer_stub::is_object_bool_value = true;
+    m2mtlvdeserializer_stub::bool_value = false;
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == false);
+
+    // handle_bootstrap_put_message() TLV not resource
+    observer->boot_error = false;
+    observer->boot_done = false;
+    m2mtlvdeserializer_stub::is_object_bool_value = false;
+    m2mtlvdeserializer_stub::bool_value = false;
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    CHECK(nsdl->_security == NULL);
+
+    // handle_bootstrap_delete() object name not match
+    observer->boot_error = false;
+    nsdl->_bootstrap_id = 8;
+    handle->bootstrap_msg_id = 8;
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
+    coap_header->msg_id = 8;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    coap_header->msg_id = 18;
+    nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
+    observer->boot_done = false;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+
+    free(common_stub::coap_header);
+    common_stub::coap_header = NULL;
+
+    // handle_bootstrap_delete() _identity_accepted false
+    observer->boot_error = false;
+    observer->boot_done = false;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    CHECK(nsdl->_security == NULL);
+
+    free(common_stub::coap_header);
+    common_stub::coap_header = NULL;
+
+    // handle_bootstrap_delete() object name not match
+    observer->boot_error = false;
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
+    coap_header->msg_id = 8;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    coap_header->msg_id = 18;
+    uint8_t object_name[] = {"0/0"};
+    coap_header->uri_path_ptr = object_name;
+    coap_header->uri_path_len = 3;
+    observer->boot_done = false;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    CHECK(nsdl->_security == NULL);
+
+    free(common_stub::coap_header);
+    common_stub::coap_header = NULL;
+
+    // handle_bootstrap_delete() object name not match
+    observer->boot_error = false;
+    coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
+    coap_header->msg_id = 8;
+    nsdl->received_from_server_callback(handle,coap_header,NULL);
+    coap_header->msg_id = 18;
+    uint8_t invalid[] = {"0/0/1"};
+    coap_header->uri_path_ptr = invalid;
+    coap_header->uri_path_len = 5;
+    observer->boot_done = false;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    CHECK(nsdl->_security == NULL);
+
+    //handle_bootstrap_finished() path does not match
+    coap_header->uri_path_ptr = server;
+    coap_header->uri_path_len = 1;
+    nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
+    observer->boot_error = false;
+    observer->boot_done = false;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    CHECK(nsdl->_security == NULL);
+
+    //handle_bootstrap_finished() send coap response
+    nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
+    common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
+    m2msecurity_stub::string_value = new String("coaps://");
+    observer->boot_error = false;
+    observer->boot_done = false;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    CHECK(nsdl->_security == NULL);
+
+    //handle_bootstrap_finished() success no security
+    nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
+    m2msecurity_stub::sec_mode = M2MSecurity::NoSecurity;
+    m2msecurity_stub::int_value = true;
+    m2msecurity_stub::bool_value = false;
+    observer->boot_error = false;
+    observer->boot_wait = false;
+    observer->boot_done = false;
+    coap_header->uri_path_ptr = (uint8_t*)malloc(2);
+    coap_header->uri_path_len = 2;
+    coap_header->uri_path_ptr[0] = 'b';
+    coap_header->uri_path_ptr[1] = 's';
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == false);
+    CHECK(observer->boot_wait == true);
+    CHECK(observer->boot_done == false);
+
+    //handle_bootstrap_finished() success certificate
+    nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
+    m2msecurity_stub::sec_mode = M2MSecurity::Certificate;
+    m2mresourceinstance_stub::int_value = 10;
+    m2msecurity_stub::int_value = true;
+    m2msecurity_stub::bool_value = false;
+    observer->boot_error = false;
+    observer->boot_wait = false;
+    observer->boot_done = false;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == false);
+    CHECK(observer->boot_wait == true);
+    CHECK(observer->boot_done == false);
+
+    //handle_bootstrap_finished() fail, Psk not supported
+    nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
+    m2msecurity_stub::sec_mode = M2MSecurity::Psk;
+    m2msecurity_stub::int_value = true;
+    m2msecurity_stub::bool_value = false;
+    observer->boot_error = false;
+    observer->boot_done = false;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    CHECK(observer->boot_done == false);
+
+    //handle_bootstrap_finished() fail, Bootstrap server
+    nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
+    m2msecurity_stub::sec_mode = M2MSecurity::Certificate;
+    m2msecurity_stub::int_value = true;
+    m2msecurity_stub::bool_value = true;
+    observer->boot_error = false;
+    observer->boot_done = false;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    CHECK(observer->boot_done == false);
+
+    //handle_bootstrap_finished() fail, key size 0
+    nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
+    m2msecurity_stub::sec_mode = M2MSecurity::Certificate;
+    m2msecurity_stub::int_value = false;
+    m2msecurity_stub::bool_value = false;
+    m2mresourceinstance_stub::int_value = 0;
+    observer->boot_error = false;
+    observer->boot_done = false;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    CHECK(observer->boot_done == false);
+
+    //handle_bootstrap_finished() fail, _security null
+    m2msecurity_stub::sec_mode = M2MSecurity::Certificate;
+    m2msecurity_stub::int_value = false;
+    m2msecurity_stub::bool_value = false;
+    m2mresourceinstance_stub::int_value = 0;
+    observer->boot_error = false;
+    observer->boot_done = false;
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+    CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
+    CHECK(observer->boot_error == true);
+    CHECK(observer->boot_done == false);
+
+    delete m2mobject_stub::inst;
+    //delete m2mbase_stub::string_value;
+    //m2mbase_stub::string_value = NULL;
+    nsdl->_object_list.clear();
+    m2mobjectinstance_stub::resource_list.clear();
+    delete obj;
+    delete m2msecurity_stub::string_value;
+    delete m2msecurity_stub::resource;
+
+    free(m2mbase_stub::nsdl_resource->static_resource_parameters->path);
+    free(m2mbase_stub::nsdl_resource->static_resource_parameters);
+    free(m2mbase_stub::nsdl_resource);
+
+    free(common_stub::coap_header);
+    free(address->addr_ptr);
+    free(address);
+    free(coap_header->token_ptr);
+    free(coap_header->uri_path_ptr);
+    free(coap_header);
+    free(handle->oma_bs_address_ptr);
+    free(handle);
+}
+
+void Test_M2MNsdlInterface::test_resource_callback()
+{
+    uint8_t value[] = {"name"};
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header,0,sizeof(sn_coap_hdr_s));
+    sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
+    memset(address,0,sizeof(sn_nsdl_addr_s));
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+
+    common_stub::coap_header->payload_ptr =(uint8_t*)malloc(1);
+    common_stub::coap_header->payload_len = 1;
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    common_stub::int_value = 0;
+
+    common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+    M2MObject *object = new M2MObject("name", "name");
+    m2mbase_stub::int_value = 0;
+    m2mobject_stub::int_value = 1;
+    m2mbase_stub::nsdl_resource =
+            (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
+    m2mbase_stub::nsdl_resource->static_resource_parameters =
+            (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s));
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(5);
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '\0';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 5;
+
+    nsdl->_object_list.push_back(object);
+
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
+    m2mobject_stub::bool_value = true;
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0);
+    m2mobject_stub::base_type = M2MBase::ResourceInstance;
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0);
+
+    delete object;
+    free(m2mbase_stub::nsdl_resource->static_resource_parameters->path);
+    free(m2mbase_stub::nsdl_resource->static_resource_parameters);
+    free(m2mbase_stub::nsdl_resource);
+
+    free(common_stub::coap_header);
+    free(address);
+    free(coap_header);
+}
+
+
+void Test_M2MNsdlInterface::test_resource_callback_get()
+{
+}
+
+void Test_M2MNsdlInterface::test_resource_callback_put()
+{
+    uint8_t value[] = {"name/0/resource"};
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header,0,sizeof(sn_coap_hdr_s));
+    sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
+    memset(address,0,sizeof(sn_nsdl_addr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+
+    M2MObject *object = new M2MObject("name", "name");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object,"name","", "");
+
+    M2MResource* create_resource = new M2MResource(*instance,
+                                                   "res",
+                                                   "res",
+                                                   M2MResourceInstance::INTEGER,
+                                                   false,
+                                                   "res");
+    m2mobject_stub::int_value = 2;
+    m2mobject_stub::instance_list.push_back(instance);
+
+    m2mobjectinstance_stub::resource_list.push_back(create_resource);
+    m2mobjectinstance_stub::int_value = 1;
+
+    nsdl->_object_list.push_back(object);
+
+    m2mbase_stub::operation = M2MBase::PUT_ALLOWED;
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+
+    uint8_t query[] = {"pmax=200&pmin=120"};
+    coap_header->options_list_ptr->uri_query_ptr = (uint8_t*)malloc(sizeof(query));
+    coap_header->options_list_ptr->uri_query_len = sizeof(query);
+
+    m2mbase_stub::bool_value = true;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+    common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    m2mobject_stub::base_type = M2MBase::Resource;
+    m2mbase_stub::base_type = M2MBase::Resource;
+    m2mobject_stub::bool_value = true;
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    m2mobject_stub::base_type = M2MBase::ObjectInstance;
+    m2mbase_stub::base_type = M2MBase::ObjectInstance;
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    m2mbase_stub::base_type = M2MBase::Object;
+    m2mbase_stub::bool_value = false;
+
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    delete object;
+    m2mobject_stub::instance_list.clear();
+    delete instance;
+//    m2mobjectinstance_stub::resource_list.clear();
+    delete create_resource;
+
+    free(coap_header->options_list_ptr->uri_query_ptr);
+    free(coap_header->options_list_ptr);
+    if(common_stub::coap_header){
+        if( common_stub::coap_header->options_list_ptr){
+            free(common_stub::coap_header->options_list_ptr);
+            common_stub::coap_header->options_list_ptr = NULL;
+        }
+        free(common_stub::coap_header);
+        common_stub::coap_header = NULL;
+    }
+    free(coap_header);
+    free(address);
+
+    m2mbase_stub::clear();
+    common_stub::clear();
+    m2mobject_stub::clear();
+    m2mobjectinstance_stub::clear();
+}
+
+void Test_M2MNsdlInterface::test_resource_callback_post()
+{
+    uint8_t value[] = {"name/0/name"};
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header,0,sizeof(sn_coap_hdr_s));
+    sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
+    memset(address,0,sizeof(sn_nsdl_addr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+    m2mbase_stub::bool_value = false;
+    M2MObject *object = new M2MObject("name", "name");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object,"name","","");
+    M2MResource* create_resource = new M2MResource(*instance,
+                                                   "name",
+                                                   "name",
+                                                   M2MResourceInstance::INTEGER,
+                                                   false,
+                                                   "name");
+    m2mobject_stub::int_value = 2;
+    m2mobject_stub::instance_list.push_back(instance);
+
+    m2mobjectinstance_stub::resource_list.push_back(create_resource);
+    m2mobjectinstance_stub::int_value = 1;
+
+    nsdl->_object_list.push_back(object);
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+
+    uint8_t query[] = {"pmax=200&pmin=120"};
+    coap_header->options_list_ptr->uri_query_ptr = (uint8_t*)malloc(sizeof(query));
+    coap_header->options_list_ptr->uri_query_len = sizeof(query);
+
+    m2mbase_stub::bool_value = true;
+
+    m2mbase_stub::nsdl_resource =
+            (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
+    m2mbase_stub::nsdl_resource->static_resource_parameters =
+            (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s));
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(5);
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '\0';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 5;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+    common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    m2mobject_stub::base_type = M2MBase::Resource;
+    m2mbase_stub::base_type = M2MBase::Resource;
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    m2mobject_stub::base_type = M2MBase::ResourceInstance;
+    m2mbase_stub::base_type = M2MBase::ResourceInstance;
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    m2mobject_stub::base_type = M2MBase::ObjectInstance;
+    m2mbase_stub::base_type = M2MBase::ObjectInstance;
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    m2mbase_stub::base_type = M2MBase::Object;
+    m2mbase_stub::bool_value = false;
+
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    delete object;
+    m2mobject_stub::instance_list.clear();
+    delete instance;
+    m2mobjectinstance_stub::resource_list.clear();
+    delete create_resource;
+
+    free(coap_header->options_list_ptr->uri_query_ptr);
+    free(coap_header->options_list_ptr);
+    if(common_stub::coap_header){
+        if( common_stub::coap_header->options_list_ptr){
+            free(common_stub::coap_header->options_list_ptr);
+            common_stub::coap_header->options_list_ptr = NULL;
+        }
+        free(common_stub::coap_header);
+        common_stub::coap_header = NULL;
+    }
+    free(coap_header);
+    free(address);
+    free(m2mbase_stub::nsdl_resource->static_resource_parameters->path);
+    free(m2mbase_stub::nsdl_resource->static_resource_parameters);
+    free(m2mbase_stub::nsdl_resource);
+
+    m2mbase_stub::clear();
+    common_stub::clear();
+    m2mobject_stub::clear();
+    m2mobjectinstance_stub::clear();
+}
+
+void Test_M2MNsdlInterface::test_resource_callback_delete()
+{
+    uint8_t value[] = {"name/0"};
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header,0,sizeof(sn_coap_hdr_s));
+    sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
+    memset(address,0,sizeof(sn_nsdl_addr_s));
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
+    common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
+    common_stub::int_value = 0;
+
+    m2mbase_stub::nsdl_resource =
+            (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
+    m2mbase_stub::nsdl_resource->static_resource_parameters =
+            (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s));
+
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(7);
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '/';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[5] = '0';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->path[6] = '\0';
+    m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 7;
+
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name/0";
+    M2MObject *object = new M2MObject("name", "name");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object,"name", "", "name/0");
+    m2mbase_stub::int_value = 0;
+    m2mobject_stub::int_value = 1;
+    m2mobject_stub::bool_value = true;
+    m2mobject_stub::instance_list.push_back(instance);
+    m2mobject_stub::base_type = M2MBase::ObjectInstance;
+    nsdl->_object_list.push_back(object);
+
+    m2mbase_stub::operation = M2MBase::DELETE_ALLOWED;
+
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    m2mobject_stub::base_type = M2MBase::Object;
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
+
+    delete instance;
+    delete object;
+    free(m2mbase_stub::nsdl_resource->static_resource_parameters->path);
+    free(m2mbase_stub::nsdl_resource->static_resource_parameters);
+    free(m2mbase_stub::nsdl_resource);
+    free(common_stub::coap_header);
+    free(address);
+    free(coap_header);
+    m2mobject_stub::instance_list.clear();
+}
+
+/*
+void Test_M2MNsdlInterface::test_resource_callback_reset()
+{
+    uint8_t value[] = {"name"};
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header,0,sizeof(sn_coap_hdr_s));
+    sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
+    memset(address,0,sizeof(sn_nsdl_addr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_type = COAP_MSG_TYPE_RESET;
+    m2mobjectinstance_stub::base_type = M2MBase::Object;
+    String *name = new String("name");
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = name;
+    M2MObject *object = new M2MObject(*name);
+    M2MObjectInstance* instance = new M2MObjectInstance(*name,*object);
+    M2MResource* create_resource = new M2MResource(*instance,
+                                                   *name,
+                                                   *name,
+                                                   M2MResourceInstance::INTEGER,
+                                                   M2MResource::Dynamic,false);
+    m2mobject_stub::int_value = 2;
+    m2mobject_stub::instance_list.push_back(instance);
+
+    m2mobjectinstance_stub::resource_list.push_back(create_resource);
+    m2mobjectinstance_stub::int_value = 1;
+
+    nsdl->_object_list.push_back(object);
+    // No response for RESET message
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) == 1);
+
+
+    m2mobject_stub::base_type = M2MBase::ObjectInstance;
+    // No response for RESET message
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) == 1);
+
+    m2mobject_stub::base_type = M2MBase::Resource;
+    // No response for RESET message
+    CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) == 1);
+
+    delete instance;
+    delete object;
+    delete name;
+    delete create_resource;
+    free(address);
+    free(coap_header);
+    m2mobject_stub::instance_list.clear();
+    m2mobjectinstance_stub::resource_list.clear();
+    //nsdl->_object_list.clear();
+}
+*/
+void Test_M2MNsdlInterface::test_process_received_data()
+{
+    uint8_t *data = (uint8_t*)malloc(sizeof(uint8_t));
+    uint16_t data_size = sizeof(uint16_t);
+    sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
+
+    common_stub::int_value = 0;
+
+    CHECK(nsdl->process_received_data(data,data_size,address) == true);
+
+    common_stub::int_value = -1;
+
+    CHECK(nsdl->process_received_data(data,data_size,address) == false);
+
+    free(address);
+    free(data);
+    common_stub::clear();
+}
+
+void Test_M2MNsdlInterface::test_stop_timers()
+{
+    // Check if there is no memory leak or crash
+    nsdl->stop_timers();
+}
+
+void Test_M2MNsdlInterface::test_timer_expired()
+{
+    nsdl->timer_expired(M2MTimerObserver::NsdlExecution);
+    CHECK(nsdl->_counter_for_nsdl == 1);
+
+    if( nsdl->_endpoint == NULL){
+        nsdl->_endpoint = (sn_nsdl_ep_parameters_s*)nsdl->memory_alloc(sizeof(sn_nsdl_ep_parameters_s));
+    }
+    nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(uint8_t));
+
+    // For checking the registration update
+    nsdl->timer_expired(M2MTimerObserver::Registration);
+
+    nsdl->delete_endpoint();
+    CHECK(nsdl->_endpoint == NULL);
+}
+
+void Test_M2MNsdlInterface::test_observation_to_be_sent()
+{
+    Vector<uint16_t> instance_list_ids;
+    m2mbase_stub::clear();
+    M2MObject *object = new M2MObject("name", "name");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object, "name", "", "");
+    M2MResource *res = new M2MResource(*instance,"res", "res", M2MResourceInstance::INTEGER,false, "res");
+    M2MResource *res2 = new M2MResource(*instance,"res2", "res2", M2MResourceInstance::INTEGER,false, "res2");
+
+
+    M2MResourceInstance* res_instance = new M2MResourceInstance(*res,
+                                                                "res", "res",
+                                                                M2MResourceInstance::INTEGER,0,"",false);
+    M2MResourceInstance* res_instance_1 = new M2MResourceInstance(*res2,
+                                                                  "res2", "res2",
+                                                                  M2MResourceInstance::INTEGER,0,"",false);
+    m2mresource_stub::list.clear();
+    m2mresource_stub::list.push_back(res_instance);
+    m2mresource_stub::list.push_back(res_instance_1);
+    m2mresource_stub::int_value = 2;
+    instance_list_ids.push_back(0);
+
+    uint8_t value[] = {"value"};
+    m2mresourceinstance_stub::value = (uint8_t *)malloc(sizeof(value));
+    memset( m2mresourceinstance_stub::value, 0, sizeof(value));
+    memcpy(m2mresourceinstance_stub::value,value,sizeof(value));
+    m2mresourceinstance_stub::int_value = sizeof(value);
+
+    m2mbase_stub::uint16_value = 321;
+    m2mbase_stub::string_value = "token";
+
+    m2mresourceinstance_stub::base_type = M2MBase::Resource;
+
+    nsdl->_nsdl_handle = (nsdl_s*)malloc(sizeof(nsdl_s));
+    memset(nsdl->_nsdl_handle,0,sizeof(nsdl_s));
+    sn_nsdl_oma_server_info_t * nsp_address = (sn_nsdl_oma_server_info_t *)malloc(sizeof(sn_nsdl_oma_server_info_t));
+    memset(nsp_address,0,sizeof(sn_nsdl_oma_server_info_t));
+    sn_nsdl_addr_s* address = (sn_nsdl_addr_s*)malloc(sizeof(sn_nsdl_addr_s));
+    memset(address,0,sizeof(sn_nsdl_addr_s));
+
+    nsdl->_nsdl_handle->nsp_address_ptr = nsp_address;
+    memset(nsdl->_nsdl_handle->nsp_address_ptr,0,sizeof(sn_nsdl_oma_server_info_t));
+    nsdl->_nsdl_handle->nsp_address_ptr->omalw_address_ptr = address;
+
+    //CHECK if nothing crashes
+    common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    nsdl->observation_to_be_sent(res2, 1, instance_list_ids);
+    free(common_stub::coap_header);
+
+    m2mresourceinstance_stub::resource_type = M2MResource::OPAQUE;
+
+    //CHECK if nothing crashes
+    common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    nsdl->observation_to_be_sent(res2, 1, instance_list_ids);
+    free(common_stub::coap_header);
+
+    m2mresource_stub::list.clear();
+    m2mresource_stub::int_value = 0;
+
+    //CHECK if nothing crashes
+    common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    nsdl->observation_to_be_sent(res, 500, instance_list_ids);
+    free(common_stub::coap_header);
+
+    M2MObjectInstance *object_instance = new M2MObjectInstance(*object, "name", "","");
+    m2mobject_stub::int_value = 1;
+    m2mobject_stub::base_type = M2MBase::Object;
+    m2mobject_stub::inst = object_instance;
+    m2mobjectinstance_stub::resource_list.push_back(res);
+    nsdl->_object_list.push_back(object);
+    instance_list_ids.push_back(1);
+    //CHECK if nothing crashes
+    common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    nsdl->observation_to_be_sent(object, 1, instance_list_ids);
+    free(common_stub::coap_header);
+
+    common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    nsdl->observation_to_be_sent(object, 500, instance_list_ids, true);
+    free(common_stub::coap_header);
+
+    //CHECK if nothing crashes
+    m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance;
+    common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    nsdl->observation_to_be_sent(object_instance, 1, instance_list_ids);
+    free(common_stub::coap_header);
+
+    common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    nsdl->observation_to_be_sent(object_instance, 500, instance_list_ids);
+    free(common_stub::coap_header);
+
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+
+    m2mbase_stub::clear();
+    m2mresourceinstance_stub::clear();
+    m2mobjectinstance_stub::clear();
+    m2mobject_stub::clear();
+    m2mresource_stub::list.clear();
+    delete res;
+    res = NULL;
+
+    delete res2;
+    res2 = NULL;
+
+    delete res_instance;
+    res_instance = NULL;
+
+    delete res_instance_1;
+    res_instance_1 = NULL;
+
+    delete object_instance;
+    object_instance = NULL;
+
+    delete object;
+    object = NULL;
+
+    delete instance;
+    instance = NULL;
+
+    free(nsp_address);
+    free(address);
+    free(nsdl->_nsdl_handle);
+}
+
+void Test_M2MNsdlInterface::test_resource_to_be_deleted()
+{
+    //Checking coverage for the code
+    M2MObject *object = new M2MObject("name", "name");
+    nsdl->resource_to_be_deleted(object);
+    delete object;
+}
+
+void Test_M2MNsdlInterface::test_value_updated()
+{
+    M2MObject *object = new M2MObject("name", "name");
+    M2MObjectInstance *object_instance = new M2MObjectInstance(*object, "name", "", "");
+    M2MResource *resource = new M2MResource(*object_instance,
+                                            "resource_name",
+                                            "resource_type",
+                                            M2MResourceInstance::INTEGER,
+                                            false,
+                                            "resource_name");
+
+    M2MResourceInstance *resource_instance = new M2MResourceInstance(*resource,
+                                                                     "resource_name",
+                                                                     "resource_type",
+                                                                     M2MResourceInstance::INTEGER,
+                                                                     0,"",false);
+
+    m2mobject_stub::base_type = M2MBase::Object;
+    m2mbase_stub::string_value = "name";
+    m2mbase_stub::operation = M2MBase::GET_ALLOWED;
+    nsdl->value_updated(object,"name");
+    CHECK(observer->value_update == true);
+    observer->value_update = false;
+
+    m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance;
+
+    nsdl->value_updated(object_instance,"name/0");
+    CHECK(observer->value_update == true);
+    observer->value_update = false;
+
+    common_stub::resource = (sn_nsdl_dynamic_resource_parameters_s*)malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
+    memset(common_stub::resource,0, sizeof(sn_nsdl_dynamic_resource_parameters_s));
+
+    common_stub::resource->static_resource_parameters =
+            (sn_nsdl_static_resource_parameters_s*)malloc(sizeof(sn_nsdl_static_resource_parameters_s));
+    memset(common_stub::resource->static_resource_parameters,0, sizeof(sn_nsdl_static_resource_parameters_s));
+
+    common_stub::resource->static_resource_parameters->resource = (uint8_t*)malloc(2);
+    memset(common_stub::resource->static_resource_parameters->resource,0, 2);
+
+    common_stub::resource->static_resource_parameters->mode = SN_GRS_STATIC;
+    m2mbase_stub::mode_value = M2MBase::Static;
+
+    common_stub::resource->observable = false;
+    m2mbase_stub::bool_value = true;
+
+    m2mresourceinstance_stub::int_value = 2;
+    uint8_t value[] = "1";
+    m2mresourceinstance_stub::value = value;
+
+    m2mresourceinstance_stub::base_type = M2MBase::Resource;
+
+    nsdl->value_updated(resource,"name/0/name");
+    CHECK(observer->value_update == true);
+    observer->value_update = false;
+
+    m2mresourceinstance_stub::clear();
+    free(common_stub::resource->static_resource_parameters->resource);
+    free(common_stub::resource->static_resource_parameters);
+    free(common_stub::resource);
+    common_stub::resource = NULL;
+    common_stub::clear();
+
+    m2mresourceinstance_stub::base_type = M2MBase::ResourceInstance;
+
+    common_stub::resource = (sn_nsdl_dynamic_resource_parameters_s*)malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
+    memset(common_stub::resource,0, sizeof(sn_nsdl_dynamic_resource_parameters_s));
+
+    common_stub::resource->static_resource_parameters =
+            (sn_nsdl_static_resource_parameters_s*)malloc(sizeof(sn_nsdl_static_resource_parameters_s));
+    memset(common_stub::resource->static_resource_parameters,0, sizeof(sn_nsdl_static_resource_parameters_s));
+
+    common_stub::resource->static_resource_parameters->resource = (uint8_t*)malloc(2);
+    memset(common_stub::resource->static_resource_parameters->resource,0, 2);
+
+    common_stub::resource->static_resource_parameters->mode = SN_GRS_STATIC;
+    m2mbase_stub::mode_value = M2MBase::Static;
+
+    m2mresourceinstance_stub::int_value = 2;
+    m2mresourceinstance_stub::value = value;
+
+    nsdl->value_updated(resource_instance,"name/0/name/0");
+    CHECK(observer->value_update == true);
+    observer->value_update = false;
+
+    m2mbase_stub::is_value_updated_function_set = true;
+    nsdl->value_updated(resource_instance,"name/0/name/0");
+    CHECK(observer->value_update == false);
+    observer->value_update = false;
+
+    m2mobject_stub::clear();
+    m2mobjectinstance_stub::clear();
+
+    m2mresourceinstance_stub::clear();
+
+    free(common_stub::resource->static_resource_parameters->resource);
+    free(common_stub::resource->static_resource_parameters);
+    free(common_stub::resource);
+
+    common_stub::resource = NULL;
+    common_stub::clear();
+
+    delete resource_instance;
+    delete resource;
+    delete object_instance;
+    delete object;
+}
+
+
+void Test_M2MNsdlInterface::test_find_resource()
+{
+    m2mbase_stub::string_value = "name";
+    m2mbase_stub::object_instance_name = "name/0";
+    m2mbase_stub::resource_name_inst = "name/0/resource_name/0";
+    m2mbase_stub::resource_name = "name/0/resource_name";
+    m2mbase_stub::find_resource = true;
+    uint8_t *token = (uint8_t*) malloc(4);
+    token[0] = 't';
+    token[1] = 'o';
+    token[2] = 'k';
+    token[3] = 'e';
+    m2mbase_stub::object_token = token;
+    m2mbase_stub::object_token_len = 4;
+
+    uint8_t *inst_token = (uint8_t*) malloc(4);
+    inst_token[0] = 't';
+    inst_token[1] = 'o';
+    inst_token[2] = 'k';
+    inst_token[3] = 'k';
+    m2mbase_stub::object_inst_token = inst_token;
+    m2mbase_stub::object_inst_token_len = 4;
+
+    uint8_t *resource_token = (uint8_t*) malloc(4);
+    resource_token[0] = 't';
+    resource_token[1] = 'k';
+    resource_token[2] = 'k';
+    resource_token[3] = 'k';
+    m2mbase_stub::resource_token = resource_token;
+    m2mbase_stub::resource_token_len = 4;
+
+    M2MObject *object = new M2MObject("name", "name");
+    M2MObjectInstance *object_instance = new M2MObjectInstance(*object,"name/0", "","name/0");
+    M2MResource *resource = new M2MResource(*object_instance,
+                                            "resource_name",
+                                            "resource_type",
+                                            M2MResourceInstance::INTEGER,
+                                            false,
+                                            "resource_name");
+
+    M2MResourceInstance *resource_instance = new M2MResourceInstance(*resource,
+                                                                     "0",
+                                                                     "resource_type",
+                                                                     M2MResourceInstance::INTEGER,0,"0",false);
+
+    m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance;
+    m2mobject_stub::instance_list.push_back(object_instance);
+    m2mobjectinstance_stub::resource_list.push_back(resource);
+    m2mresource_stub::list.push_back(resource_instance);
+    m2mobject_stub::base_type = M2MBase::Object;
+    nsdl->_object_list.push_back(object);
+    m2mresource_stub::bool_value = true;
+    CHECK(nsdl->find_resource("name") == object);
+    CHECK(nsdl->find_resource("name1") == NULL);
+    CHECK(nsdl->find_resource("name", token, 4) == object);
+    CHECK(nsdl->find_resource("name", token, 5) == NULL);
+
+    m2mbase_stub::ret_counter = 0;
+    CHECK(nsdl->find_resource("name/0") == object_instance);
+    m2mbase_stub::ret_counter = 0;
+    CHECK(nsdl->find_resource("name/0", inst_token, 4) == object_instance);
+    m2mbase_stub::ret_counter = 0;
+
+    CHECK(nsdl->find_resource("name/0/resource_name") == resource);
+    m2mbase_stub::ret_counter = 0;
+    CHECK(nsdl->find_resource("name/0/resource_name", resource_token, 4) == resource);
+
+    m2mbase_stub::ret_counter = 0;
+    CHECK(nsdl->find_resource("name/0/resource_name/0") == resource_instance);
+
+    free(token);
+    free(inst_token);
+    free(resource_token);
+
+    m2mobject_stub::clear();
+    m2mobjectinstance_stub::clear();
+
+    m2mresourceinstance_stub::clear();
+    m2mresource_stub::clear();
+    m2mobjectinstance_stub::clear();
+    m2mobject_stub::clear();
+
+    delete resource_instance;
+    delete resource;
+    delete object_instance;
+    delete object;
+}
+
+void Test_M2MNsdlInterface::test_remove_object()
+{
+    M2MObject *obj = new M2MObject("name", "name");
+    nsdl->_object_list.push_back(obj);
+
+    nsdl->remove_object((M2MBase*)obj);
+
+    CHECK(nsdl->_object_list.empty() == true);
+
+    nsdl->_object_list.clear();
+    delete obj;
+}
+
+void Test_M2MNsdlInterface::test_add_object_to_list()
+{
+    M2MObject *obj = new M2MObject("name", "name");
+    nsdl->_object_list.push_back(obj);
+
+    nsdl->add_object_to_list(obj);
+    CHECK(nsdl->_object_list.size() == 1);
+
+    nsdl->_object_list.clear();
+    delete obj;
+}
+
+void Test_M2MNsdlInterface::test_send_delayed_response()
+{
+    common_stub::int_value = 0;
+    m2mbase_stub::int_value = 0;
+
+    M2MObject *object = new M2MObject("name", "name");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object, "name", "", "");
+    nsdl->_nsdl_handle = (nsdl_s*)malloc(sizeof(nsdl_s));
+    memset(nsdl->_nsdl_handle,0,sizeof(nsdl_s));
+
+    sn_nsdl_oma_server_info_t * nsp_address = (sn_nsdl_oma_server_info_t *)malloc(sizeof(sn_nsdl_oma_server_info_t));
+    memset(nsp_address,0,sizeof(sn_nsdl_oma_server_info_t));
+    sn_nsdl_addr_s* address = (sn_nsdl_addr_s*)malloc(sizeof(sn_nsdl_addr_s));
+    memset(address,0,sizeof(sn_nsdl_addr_s));
+
+    M2MResource* resource = new M2MResource(*instance,
+                                            "name",
+                                            "name",
+                                            M2MResourceInstance::INTEGER,
+                                            false,
+                                            "name");
+
+    uint8_t val[] = {"name"};
+    m2mresource_stub::delayed_token = (uint8_t*)malloc(sizeof(val));
+    memcpy(m2mresource_stub::delayed_token,val,sizeof(val));
+    m2mresource_stub::delayed_token_len = sizeof(val);
+
+    m2mresourceinstance_stub::base_type = M2MBase::Resource;
+
+    nsdl->_nsdl_handle->nsp_address_ptr = nsp_address;
+    memset(nsdl->_nsdl_handle->nsp_address_ptr,0,sizeof(sn_nsdl_oma_server_info_t));
+    nsdl->_nsdl_handle->nsp_address_ptr->omalw_address_ptr = address;
+
+    nsdl->send_delayed_response(resource);
+
+    free(nsp_address);
+    free(address);
+    free(nsdl->_nsdl_handle);
+
+    delete object;
+    delete instance;
+    delete resource;
+    free(m2mresource_stub::delayed_token);
+    m2mresource_stub::delayed_token = NULL;
+    m2mresource_stub::delayed_token_len = 0;
+}
+
+void Test_M2MNsdlInterface::test_get_nsdl_handle()
+{
+    CHECK(nsdl->get_nsdl_handle() == nsdl->_nsdl_handle);
+}
+
+void Test_M2MNsdlInterface::test_endpoint_name()
+{
+    String endpoint = "test";
+    nsdl->_endpoint_name = endpoint;
+    CHECK(nsdl->endpoint_name() == endpoint);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mnsdlinterface/test_m2mnsdlinterface.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_NSDL_INTERFACE_H
+#define TEST_M2M_NSDL_INTERFACE_H
+
+#include "m2mnsdlinterface.h"
+#include "common_stub.h"
+
+class TestObserver;
+
+class Test_M2MNsdlInterface
+{
+public:
+    Test_M2MNsdlInterface();
+
+    virtual ~Test_M2MNsdlInterface();
+
+    void test_create_endpoint();
+
+    void test_delete_endpoint();
+
+    void test_create_nsdl_list_structure();
+
+    void test_delete_nsdl_resource();
+
+    void test_create_bootstrap_resource();
+
+    void test_send_register_message();
+
+    void test_send_update_registration();
+
+    void test_send_unregister_message();
+
+    void test_memory_alloc();
+
+    void test_memory_free();
+
+    void test_send_to_server_callback();
+
+    void test_received_from_server_callback();
+
+    void test_resource_callback();
+
+    void test_resource_callback_get();
+
+    void test_resource_callback_put();
+
+    void test_resource_callback_post();
+
+    void test_resource_callback_delete();
+
+    void test_process_received_data();
+
+    void test_stop_timers();
+
+    void test_timer_expired();
+
+    void test_observation_to_be_sent();
+
+    void test_resource_to_be_deleted();
+
+    void test_value_updated();
+
+    void test_find_resource();
+
+    void test_remove_object();
+
+    void test_add_object_to_list(); //Special: Would be too difficult to test in normal ways
+
+    void test_send_delayed_response();
+
+    void test_get_nsdl_handle();
+
+    void test_endpoint_name();
+
+    M2MNsdlInterface* nsdl;
+
+    TestObserver *observer;
+};
+
+#endif // TEST_M2M_NSDL_INTERFACE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mobject/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,33 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mobject
+        "main.cpp"
+        "m2mobjecttest.cpp"
+        "test_m2mobject.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mresource_stub.cpp"
+        "../stub/m2mresourceinstance_stub.cpp"
+        "../stub/m2mobjectinstance_stub.cpp"
+        "../stub/m2mtlvserializer_stub.cpp"
+        "../stub/m2mtlvdeserializer_stub.cpp"
+        "../stub/m2mreporthandler_stub.cpp"
+        "../stub/common_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mtlvserializer_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "../../../../source/m2mobject.cpp"
+        "../stub/m2mtimer_stub.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2mobject
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mobject
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+
+set(binary "m2mobject")
+add_test(m2mobject ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mobject/m2mobjecttest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mobject.h"
+
+TEST_GROUP(M2MObject)
+{
+  Test_M2MObject* m2m_object;
+
+  void setup()
+  {
+    m2m_object = new Test_M2MObject();
+  }
+  void teardown()
+  {
+    delete m2m_object;
+  }
+};
+
+TEST(M2MObject, Create)
+{
+    CHECK(m2m_object != NULL);
+}
+
+TEST(M2MObject, base_type)
+{
+    m2m_object->test_base_type();
+}
+
+TEST(M2MObject, create_object_instance)
+{
+    m2m_object->test_create_object_instance();
+}
+
+TEST(M2MObject, remove_object_instance)
+{
+    m2m_object->test_remove_object_instance();
+}
+
+TEST(M2MObject, object_instance)
+{
+    m2m_object->test_object_instance();
+}
+
+TEST(M2MObject, instance_count)
+{
+    m2m_object->test_instance_count();
+}
+
+TEST(M2MObject, instances)
+{
+    m2m_object->test_instances();
+}
+
+TEST(M2MObject, handle_get_request)
+{
+    m2m_object->test_handle_get_request();
+}
+
+TEST(M2MObject, handle_put_request)
+{
+    m2m_object->test_handle_put_request();
+}
+
+TEST(M2MObject, handle_post_request)
+{
+    m2m_object->test_handle_post_request();
+}
+
+TEST(M2MObject, notification_update)
+{
+    m2m_object->test_notification_update();
+}
+
+TEST(M2MObject, test_ctor)
+{
+    m2m_object->test_ctor();
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mobject/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MObject);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mobject/test_m2mobject.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,618 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mobject.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mresource_stub.h"
+#include "m2mbase_stub.h"
+#include "common_stub.h"
+#include "m2mtlvdeserializer_stub.h"
+#include "m2mtlvserializer_stub.h"
+#include "m2mreporthandler_stub.h"
+#include "nsdlaccesshelper_stub.h"
+
+class TestReportObserver :  public M2MReportObserver{
+public :
+    TestReportObserver() {}
+    ~TestReportObserver() {}
+    void observation_to_be_sent(m2m::Vector<uint16_t>,bool){ }
+};
+
+class Handler : public M2MObservationHandler {
+
+public:
+
+    Handler(){}
+    ~Handler(){}
+    void observation_to_be_sent(M2MBase *, uint16_t, m2m::Vector<uint16_t>,bool){
+        visited = true;
+    }
+    void send_delayed_response(M2MBase *){}
+    void resource_to_be_deleted(M2MBase *){visited=true;}
+    void remove_object(M2MBase *){visited = true;}
+    void value_updated(M2MBase *,const String&){visited = true;}
+
+    void clear() {visited = false;}
+    bool visited;
+};
+
+Test_M2MObject::Test_M2MObject()
+{
+    handler = new Handler();
+    object = new M2MObject("name", "name");
+}
+
+Test_M2MObject::~Test_M2MObject()
+{
+    m2mobjectinstance_stub::clear();
+    m2mresource_stub::clear();
+    m2mbase_stub::clear();
+    m2mtlvdeserializer_stub::clear();
+    m2mtlvserializer_stub::clear();
+    delete object;
+    delete handler;
+}
+
+void Test_M2MObject::test_ctor()
+{
+    M2MObject *object = new M2MObject(&params);
+    delete object;
+}
+
+void Test_M2MObject::test_create_object_instance()
+{
+    m2mbase_stub::name_id_value = 1;
+    m2mbase_stub::string_value = "name";
+    CHECK(object->create_object_instance() != NULL);
+    CHECK(object->create_object_instance(&params) != NULL);
+}
+
+void Test_M2MObject::test_remove_object_instance()
+{
+    m2mbase_stub::string_value = "name";
+
+    M2MObjectInstance *ins = new M2MObjectInstance(*object,"name","type", "");
+    object->set_instance_id(0);
+    object->_instance_list.push_back(ins);
+
+    CHECK(true == object->remove_object_instance(0));
+
+    CHECK(false == object->remove_object_instance(0));
+}
+
+void Test_M2MObject::test_object_instance()
+{
+    M2MObjectInstance *ins = new M2MObjectInstance(*object, "name", "type", "");
+    object->set_instance_id(0);
+    object->_instance_list.push_back(ins);
+
+    m2mbase_stub::string_value = "name";
+
+    M2MObjectInstance *obj = object->object_instance(0);
+
+    CHECK(obj != NULL);
+    STRCMP_EQUAL(obj->name(), "name");
+    //CHECK(0 == obj->name().compare(0,test->size(),*test));
+}
+
+void Test_M2MObject::test_instances()
+{
+
+    M2MObjectInstance *ins = new M2MObjectInstance(*object, "name", "type", "");
+    ins->set_instance_id(0);
+    object->_instance_list.push_back(ins);
+
+    M2MObjectInstance *ins1 = new M2MObjectInstance(*object, "name","type", "");
+    ins1->set_instance_id(1);
+    object->_instance_list.push_back(ins1);
+
+    m2mbase_stub::string_value = "name";
+
+    M2MObjectInstanceList list = object->instances();
+
+    M2MObjectInstance *obj = list[0];
+    CHECK(2 == list.size());
+    STRCMP_EQUAL(obj->name(), "name");
+    //CHECK(0 == obj->name().compare(0,test->size(),*test));
+}
+
+void Test_M2MObject::test_instance_count()
+{
+    M2MObjectInstance *ins = new M2MObjectInstance(*object, "name", "type", "");
+    object->set_instance_id(0);
+    object->_instance_list.push_back(ins);
+
+    M2MObjectInstance *ins1 = new M2MObjectInstance(*object, "name", "type", "");
+    object->set_instance_id(1);
+    object->_instance_list.push_back(ins1);
+
+    CHECK(2 == object->instance_count());
+
+    object->_instance_list.clear();
+    delete ins;
+    delete ins1;
+}
+
+void Test_M2MObject::test_base_type()
+{
+    CHECK(M2MBase::Object == object->base_type());
+}
+
+void Test_M2MObject::test_handle_get_request()
+{
+    M2MObjectInstance *ins = new M2MObjectInstance(*object, "name", "type", "");
+    object->set_instance_id(0);
+    object->_instance_list.push_back(ins);
+
+    uint8_t value[] = {"name"};
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_GET;
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+
+    m2mbase_stub::operation = M2MBase::GET_ALLOWED;
+    m2mbase_stub::uint8_value = 200;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    m2mtlvserializer_stub::uint8_value = (uint8_t*)malloc(1);
+
+    coap_header->token_ptr = (uint8_t*)malloc(sizeof(value));
+    memcpy(coap_header->token_ptr, value, sizeof(value));
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->observe = 0;
+
+    coap_header->content_format = sn_coap_content_format_e(110);
+
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // Not OMA TLV or JSON
+    m2mbase_stub::uint8_value = 110;
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // Content type set CT_NONE
+    m2mbase_stub::uint8_value = 99;
+    coap_header->content_format = sn_coap_content_format_e(-1);
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    common_stub::coap_header->content_format = sn_coap_content_format_e(-1); // CT_NONE
+    m2mbase_stub::uint8_value = 100;
+    coap_header->content_format = sn_coap_content_format_e(-1);
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // OMA TLV
+    coap_header->content_format = sn_coap_content_format_e(99);
+    m2mbase_stub::uint8_value = 99;
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // OMA JSON
+    coap_header->content_format = sn_coap_content_format_e(100);
+    m2mbase_stub::uint8_value = 100;
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    coap_header->options_list_ptr->observe = 0;
+    m2mbase_stub::uint16_value = 0x1c1c;
+    m2mbase_stub::uint8_value = 99;
+    m2mbase_stub::bool_value = true;
+    coap_header->content_format = sn_coap_content_format_e(99);
+
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    m2mbase_stub::uint16_value = 10;
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // Not observable
+    m2mbase_stub::bool_value = false;
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    m2mbase_stub::bool_value = true;
+    coap_header->options_list_ptr->observe = 0;
+
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    coap_header->options_list_ptr->observe = 1;
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+    CHECK(object->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    CHECK(object->handle_get_request(NULL,NULL,handler) != NULL);
+
+    if(coap_header->token_ptr) {
+        free(coap_header->token_ptr);
+        coap_header->token_ptr = NULL;
+    }
+    if(coap_header->options_list_ptr) {
+        free(coap_header->options_list_ptr);
+        coap_header->options_list_ptr = NULL;
+    }
+
+    if(common_stub::coap_header){
+        if(common_stub::coap_header->options_list_ptr) {
+            free(common_stub::coap_header->options_list_ptr);
+            common_stub::coap_header->options_list_ptr = NULL;
+        }
+        free(common_stub::coap_header);
+        common_stub::coap_header = NULL;
+    }
+    free(coap_header);
+    coap_header = NULL;
+
+    if(m2mtlvserializer_stub::uint8_value) {
+        free(m2mtlvserializer_stub::uint8_value);
+    }
+    m2mtlvserializer_stub::clear();
+
+    m2mbase_stub::clear();
+    common_stub::clear();
+
+    object->_instance_list.clear();
+    delete ins;
+}
+
+void Test_M2MObject::test_handle_put_request()
+{
+    uint8_t value[] = {"name"};
+    bool execute_value_updated = false;
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+    sn_coap_hdr_s * coap_response = NULL;
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+
+    m2mbase_stub::operation = M2MBase::PUT_ALLOWED;
+    m2mbase_stub::uint8_value = 200;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+
+    coap_header->payload_ptr = (uint8_t*)malloc(1);
+
+    CHECK(object->handle_put_request(NULL,coap_header,handler,execute_value_updated) != NULL);
+    free(coap_header->payload_ptr);
+    coap_header->payload_ptr = NULL;
+
+    CHECK(object->handle_put_request(NULL,coap_header,handler,execute_value_updated) != NULL);
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->uri_query_ptr = value;
+    coap_header->options_list_ptr->uri_query_len = sizeof(value);
+
+    coap_header->content_format = sn_coap_content_format_e(99);
+    m2mtlvdeserializer_stub::bool_value = true;
+
+    m2mbase_stub::bool_value = false;
+
+    CHECK(object->handle_put_request(NULL,coap_header,handler,execute_value_updated) != NULL);
+
+    m2mtlvdeserializer_stub::bool_value = false;
+
+    CHECK(object->handle_put_request(NULL,coap_header,handler, execute_value_updated) != NULL);
+
+    coap_header->content_format = sn_coap_content_format_e(100);
+
+    CHECK(object->handle_put_request(NULL,coap_header,handler, execute_value_updated) != NULL);
+
+    m2mbase_stub::bool_value = true;
+
+    CHECK(object->handle_put_request(NULL,coap_header,handler, execute_value_updated) != NULL);
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+
+    CHECK(object->handle_put_request(NULL,coap_header,handler, execute_value_updated) != NULL);
+
+    CHECK(object->handle_put_request(NULL,NULL,handler, execute_value_updated) != NULL);
+
+    m2mbase_stub::operation = M2MBase::PUT_ALLOWED;
+
+    free(coap_header->payload_ptr);
+    coap_header->payload_ptr = NULL;
+    coap_response = object->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK(coap_response != NULL);
+    CHECK(coap_response->msg_code == COAP_MSG_CODE_RESPONSE_CHANGED);
+
+    m2mbase_stub::bool_value = false;
+    coap_response = object->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK(coap_response != NULL);
+    CHECK(coap_response->msg_code == COAP_MSG_CODE_RESPONSE_BAD_REQUEST);
+
+    free(coap_header->options_list_ptr);
+    coap_header->options_list_ptr = NULL;
+    coap_response = object->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK(coap_response != NULL);
+    CHECK(coap_response->msg_code == COAP_MSG_CODE_RESPONSE_BAD_REQUEST);
+
+    free(coap_header->options_list_ptr);
+    free(common_stub::coap_header);
+    free(coap_header);
+
+    m2mtlvdeserializer_stub::clear();
+    common_stub::clear();
+    m2mbase_stub::clear();
+}
+
+void Test_M2MObject::test_handle_post_request()
+{
+    uint8_t value[] = {"name"};
+    bool execute_value_updated = false;
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mbase_stub::uint8_value = 200;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+
+    m2mbase_stub::bool_value = false;
+
+    sn_coap_hdr_s * coap_response = NULL;
+    m2mbase_stub::uint8_value = 99;
+
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+
+    m2mbase_stub::uint8_value = 100;
+
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    coap_header->payload_ptr = (uint8_t*)malloc(1);
+
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mbase_stub::uint8_value = 99;
+
+    object->_max_instance_count = 0;
+
+    M2MObjectInstance *ins = new M2MObjectInstance(*object, "name", "type", "");
+    ins->set_instance_id(0);
+    object->_instance_list.push_back(ins);
+    coap_header->content_format = sn_coap_content_format_e(-1);
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    object->remove_object_instance(0);
+
+
+    object->_max_instance_count = 65535;
+
+    m2mbase_stub::uint8_value = 0;
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->uri_query_ptr = value;
+    coap_header->options_list_ptr->uri_query_len = sizeof(value);
+
+    coap_header->content_format = sn_coap_content_format_e(99);
+    m2mtlvdeserializer_stub::is_object_bool_value = true;
+    m2mtlvdeserializer_stub::bool_value = false;
+    m2mbase_stub::bool_value = false;
+
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None;
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr->location_path_ptr) {
+            free(coap_response->options_list_ptr->location_path_ptr);
+            coap_response->options_list_ptr->location_path_ptr = NULL;
+        }
+//        if (coap_response->options_list_ptr) {
+//            free(coap_response->options_list_ptr);
+//            coap_response->options_list_ptr = NULL;
+//        }
+    }
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mtlvdeserializer_stub::is_object_bool_value = true;
+    m2mtlvdeserializer_stub::bool_value = false;
+    m2mtlvdeserializer_stub::int_value = 10;
+    m2mbase_stub::bool_value = false;
+
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotAllowed;
+
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+//            free(coap_response->options_list_ptr);
+//            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mtlvdeserializer_stub::is_object_bool_value = false;
+    m2mtlvdeserializer_stub::bool_value = true;
+    m2mbase_stub::bool_value = false;
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None;
+
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+//            free(coap_response->options_list_ptr);
+//            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mtlvdeserializer_stub::is_object_bool_value = false;
+    m2mtlvdeserializer_stub::bool_value = true;
+    m2mbase_stub::bool_value = false;
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotFound;
+
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+//            free(coap_response->options_list_ptr);
+//            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mtlvdeserializer_stub::bool_value = false;
+
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+//            free(coap_response->options_list_ptr);
+//            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+
+    coap_header->content_format = sn_coap_content_format_e(100);
+
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+//            free(coap_response->options_list_ptr);
+//            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+
+    m2mbase_stub::bool_value = true;
+
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+//            free(coap_response->options_list_ptr);
+//            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    coap_response = object->handle_post_request(NULL,NULL,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+//            free(coap_response->options_list_ptr);
+//            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mtlvdeserializer_stub::int_value = 0;
+    m2mtlvdeserializer_stub::is_object_bool_value = true;
+    coap_header->content_format = sn_coap_content_format_e(99);
+    coap_response = object->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+//            free(coap_response->options_list_ptr);
+//            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    free(coap_header->options_list_ptr);
+    free(coap_header->payload_ptr);
+    free(common_stub::coap_header->options_list_ptr);
+    free(common_stub::coap_header);
+    free(coap_header);
+
+    m2mtlvdeserializer_stub::clear();
+    common_stub::clear();
+    m2mbase_stub::clear();
+}
+
+void Test_M2MObject::test_notification_update()
+{
+    TestReportObserver obs;
+    m2mbase_stub::report = new M2MReportHandler(obs);
+    m2mbase_stub::bool_value = true;
+
+    object->notification_update(0);
+
+    delete m2mbase_stub::report;
+    m2mbase_stub::report = NULL;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mobject/test_m2mobject.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_OBJECT_H
+#define TEST_M2M_OBJECT_H
+
+#include "m2mobject.h"
+
+class Handler;
+
+class Test_M2MObject
+{
+public:
+    Test_M2MObject();
+    virtual ~Test_M2MObject();
+
+    void test_create_object_instance();
+
+    void test_remove_object_instance();
+
+    void test_object_instance();
+
+    void test_instances();
+
+    void test_instance_count();
+
+    void test_base_type();
+
+    void test_handle_get_request();
+
+    void test_handle_put_request();
+
+    void test_handle_post_request();
+
+    void test_notification_update();
+
+    void test_ctor();
+
+    M2MObject* object;
+
+    Handler*    handler;
+};
+
+#endif // TEST_M2M_OBJECT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mobjectinstance/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mobjectinstance
+        "main.cpp"
+        "m2mobjectinstancetest.cpp"
+        "test_m2mobjectinstance.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mresource_stub.cpp"
+        "../stub/m2mresourceinstance_stub.cpp"
+        "../stub/common_stub.cpp"
+        "../stub/m2mtlvserializer_stub.cpp"
+        "../stub/m2mtlvdeserializer_stub.cpp"
+        "../stub/m2mreporthandler_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mtimer_stub.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "../../../../source/m2mobjectinstance.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2mobjectinstance
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mobjectinstance
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mobjectinstance")
+add_test(m2mobjectinstance ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mobjectinstance/m2mobjectinstancetest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mobjectinstance.h"
+
+TEST_GROUP(M2MObjectInstance)
+{
+  Test_M2MObjectInstance* m2m_object_instance;
+
+  void setup()
+  {
+    m2m_object_instance = new Test_M2MObjectInstance();
+  }
+  void teardown()
+  {
+    delete m2m_object_instance;
+  }
+};
+
+TEST(M2MObjectInstance, Create)
+{
+    CHECK(m2m_object_instance != NULL);
+}
+
+TEST(M2MObjectInstance, create_static_resource)
+{
+    m2m_object_instance->test_create_static_resource();
+}
+
+TEST(M2MObjectInstance, create_static_resource_instance)
+{
+    m2m_object_instance->test_create_static_resource_instance();
+}
+
+TEST(M2MObjectInstance, create_dynamic_resource)
+{
+    m2m_object_instance->test_create_dynamic_resource();
+}
+
+TEST(M2MObjectInstance, create_dynamic_resource_instance)
+{
+    m2m_object_instance->test_create_dynamic_resource_instance();
+}
+
+TEST(M2MObjectInstance, remove_resource)
+{
+    m2m_object_instance->test_remove_resource();
+}
+
+TEST(M2MObjectInstance, remove_resource_instance)
+{
+    m2m_object_instance->test_remove_resource_instance();
+}
+
+TEST(M2MObjectInstance, resource)
+{
+    m2m_object_instance->test_resource();
+}
+
+TEST(M2MObjectInstance, resources)
+{
+    m2m_object_instance->test_resources();
+}
+
+TEST(M2MObjectInstance, resource_count)
+{
+    m2m_object_instance->test_resource_count();
+}
+
+TEST(M2MObjectInstance, total_resource_count)
+{
+    m2m_object_instance->test_total_resource_count();
+}
+
+TEST(M2MObjectInstance, base_type)
+{
+    m2m_object_instance->test_base_type();
+}
+
+TEST(M2MObjectInstance, handle_get_request)
+{
+    m2m_object_instance->test_handle_get_request();
+}
+
+TEST(M2MObjectInstance, handle_put_request)
+{
+    m2m_object_instance->test_handle_put_request();
+}
+
+TEST(M2MObjectInstance, handle_post_request)
+{
+    m2m_object_instance->test_handle_post_request();
+}
+
+TEST(M2MObjectInstance, notification_update)
+{
+    m2m_object_instance->test_notification_update();
+}
+
+TEST(M2MObjectInstance, test_ctor)
+{
+    m2m_object_instance->test_ctor();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mobjectinstance/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MObjectInstance);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mobjectinstance/test_m2mobjectinstance.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,867 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mobjectinstance.h"
+#include "m2mresource_stub.h"
+#include "common_stub.h"
+#include "m2mresourceinstance_stub.h"
+#include "m2mbase_stub.h"
+#include "m2mtlvdeserializer_stub.h"
+#include "m2mtlvserializer_stub.h"
+#include "m2mreporthandler_stub.h"
+#include "m2mobject_stub.h"
+
+class Handler : public M2MObservationHandler {
+
+public:
+
+    Handler(){}
+    ~Handler(){}
+    void observation_to_be_sent(M2MBase *, uint16_t, m2m::Vector<uint16_t>,bool){
+        visited = true;
+    }
+    void send_delayed_response(M2MBase *){}
+    void resource_to_be_deleted(M2MBase *){visited=true;}
+    void remove_object(M2MBase *){visited = true;}
+    void value_updated(M2MBase *,const String&){visited = true;}
+
+    void clear() {visited = false;}
+    bool visited;
+};
+
+class TestReportObserver :  public M2MReportObserver{
+public :
+    TestReportObserver() {}
+    ~TestReportObserver() {}
+    void observation_to_be_sent(m2m::Vector<uint16_t>,bool){ }
+};
+
+Test_M2MObjectInstance::Test_M2MObjectInstance()
+{
+    handler = new Handler();
+    object = new M2MObject("name", "name");
+    object_instance = new M2MObjectInstance(*object, "name", "type", "");
+}
+
+Test_M2MObjectInstance::~Test_M2MObjectInstance()
+{
+    delete object;
+    delete object_instance;
+    delete handler;
+    m2mresource_stub::clear();
+    m2mbase_stub::clear();
+    m2mtlvdeserializer_stub::clear();
+    m2mtlvserializer_stub::clear();
+}
+
+void Test_M2MObjectInstance::test_ctor()
+{
+    M2MObject* obj = new M2MObject("name", "name");
+    M2MObjectInstance *instance = new M2MObjectInstance(*obj,&params);
+    delete instance;
+    delete obj;
+}
+
+void Test_M2MObjectInstance::test_create_static_resource()
+{
+    m2mbase_stub::string_value = "name";
+    u_int8_t value[] = {"value"};
+
+    m2mbase_stub::bool_value = true;
+
+    m2mbase_stub::uint8_value = 99;
+    M2MResource * res = object_instance->create_static_resource("name","type",M2MResourceInstance::STRING,value,(u_int32_t)sizeof(value),false);
+
+    CHECK(res != NULL);
+    res = object_instance->create_static_resource("name2","type",M2MResourceInstance::STRING,value,(u_int32_t)sizeof(value),true);
+
+    CHECK(res != NULL);
+    CHECK(2 == object_instance->_resource_list.size());
+
+    m2mbase_stub::bool_value = false;
+    res = object_instance->create_static_resource("","type",M2MResourceInstance::STRING,value,(u_int32_t)sizeof(value));
+    CHECK(res == NULL);
+
+    m2mbase_stub::bool_value = true;
+    res = object_instance->create_static_resource(&params,M2MResourceInstance::STRING);
+    CHECK(res != NULL);
+
+    m2mbase_stub::bool_value = false;
+    res = object_instance->create_static_resource(&params,M2MResourceInstance::STRING);
+    CHECK(res == NULL);
+
+}
+
+void Test_M2MObjectInstance::test_create_static_resource_instance()
+{
+    m2mbase_stub::string_value = "name";
+    u_int8_t value[] = {"value"};
+
+    m2mbase_stub::bool_value = true;
+    m2mresource_stub::bool_value = true;
+    m2mbase_stub::uint8_value = 99;
+    M2MResourceInstance *ins = object_instance->create_static_resource_instance("name","type",
+                                                                M2MResourceInstance::STRING,
+                                                                value,(u_int32_t)sizeof(value),
+                                                                0);
+
+    CHECK(ins != NULL);
+    CHECK(1 == object_instance->_resource_list.size());
+
+    delete ins;
+
+    ins = object_instance->create_static_resource_instance("name","type",
+                                                  M2MResourceInstance::STRING,
+                                                  value,(u_int32_t)sizeof(value),
+                                                  1);
+
+    CHECK(ins != NULL);
+    CHECK(1 == object_instance->_resource_list.size());
+
+    delete ins;
+
+    m2mbase_stub::bool_value = false;
+    ins = object_instance->create_static_resource_instance("","type",
+                                                  M2MResourceInstance::STRING,value,
+                                                  (u_int32_t)sizeof(value),0);
+    CHECK(ins == NULL);
+    delete ins;
+}
+
+void Test_M2MObjectInstance::test_create_dynamic_resource_instance()
+{
+    m2mbase_stub::string_value = "name";
+
+    m2mresource_stub::bool_value = true;
+    m2mbase_stub::uint8_value = 99;
+    m2mbase_stub::bool_value = true;
+    M2MResourceInstance * ins = object_instance->create_dynamic_resource_instance("name","type",
+                                                                         M2MResourceInstance::STRING,
+                                                                         false,0);
+    CHECK(ins != NULL);
+    CHECK(1 == object_instance->_resource_list.size());
+
+    delete ins;
+
+    ins = object_instance->create_dynamic_resource_instance("name","type",
+                                                   M2MResourceInstance::STRING,
+                                                   false,1);
+    CHECK(ins != NULL);
+    CHECK(1 == object_instance->_resource_list.size());
+
+    delete ins;
+
+    // Name empty, validate returns false
+    m2mbase_stub::bool_value = false;
+    ins = object_instance->create_dynamic_resource_instance("","type",
+                                                   M2MResourceInstance::STRING,
+                                                   false,1);
+
+    CHECK(ins == NULL);
+}
+
+void Test_M2MObjectInstance::test_create_dynamic_resource()
+{
+    m2mbase_stub::string_value = "name";
+    m2mbase_stub::uint8_value = 99;
+    m2mbase_stub::bool_value = true;
+    M2MResource * res = object_instance->create_dynamic_resource("name","type",M2MResourceInstance::STRING,false,false);
+    CHECK(res != NULL);
+    CHECK(1 == object_instance->_resource_list.size());
+
+    res = object_instance->create_dynamic_resource("multiple","type",M2MResourceInstance::STRING,false,true);
+    CHECK(res != NULL);
+    CHECK(2 == object_instance->_resource_list.size());
+
+    M2MResource * res1 = object_instance->create_dynamic_resource("name1","type",M2MResourceInstance::STRING,false,false);
+    CHECK(res1 != NULL);
+    CHECK(3 == object_instance->_resource_list.size());
+
+    m2mbase_stub::bool_value = false;
+    M2MResource * res2 = object_instance->create_dynamic_resource("","type",M2MResourceInstance::STRING,false,false);
+    CHECK(res2 == NULL);
+
+    m2mbase_stub::bool_value = true;
+    M2MResource * res3 = object_instance->create_dynamic_resource(&params,M2MResourceInstance::STRING,false);
+    CHECK(res3 != NULL);
+
+    m2mbase_stub::bool_value = false;
+    res3 = object_instance->create_dynamic_resource(&params,M2MResourceInstance::STRING,false);
+    CHECK(res3 == NULL);
+}
+
+void Test_M2MObjectInstance::test_remove_resource()
+{
+    CHECK(false == object_instance->remove_resource("name"));
+    M2MResource *res = new M2MResource(*object_instance,"name","type",M2MResourceInstance::STRING,false, "name");
+    object_instance->_resource_list.push_back(res);
+
+    m2mbase_stub::string_value = "name";
+    m2mbase_stub::int_value = 0;
+    m2mbase_stub::void_value = malloc(20);
+
+    m2mresource_stub::bool_value = true;
+    CHECK(true == object_instance->remove_resource("name"));
+    CHECK(0 == object_instance->_resource_list.size());
+
+    free(m2mbase_stub::void_value);
+}
+
+void Test_M2MObjectInstance::test_remove_resource_instance()
+{
+    CHECK(false == object_instance->remove_resource_instance("name",0));
+
+    M2MResource *res = new M2MResource(*object_instance,"name","type",M2MResourceInstance::STRING,false, "name");
+    object_instance->_resource_list.push_back(res);
+
+    m2mbase_stub::string_value = "name";
+    m2mbase_stub::int_value = 0;
+    m2mbase_stub::void_value = malloc(20);
+
+    m2mresource_stub::bool_value = true;
+    M2MResourceInstance *ins = new M2MResourceInstance(*res,"name","type",M2MResourceInstance::STRING,0,"name",false);
+
+    m2mresource_stub::list.push_back(ins);
+
+    CHECK(true == object_instance->remove_resource_instance("name",0));
+    CHECK(0 == object_instance->_resource_list.size());
+
+    free(m2mbase_stub::void_value);
+
+    delete ins;
+    ins = NULL;
+}
+
+
+void Test_M2MObjectInstance::test_resource()
+{
+    M2MResource *res = new M2MResource(*object_instance,"name","type",M2MResourceInstance::STRING,false, "name");
+    object_instance->_resource_list.push_back(res);
+
+    m2mbase_stub::string_value = "name";
+    m2mbase_stub::int_value = 0;
+
+    M2MResource *result = object_instance->resource("name");
+    CHECK(result != NULL);
+
+    res = new M2MResource(*object_instance,"name","type",M2MResourceInstance::STRING,false, "name");
+    object_instance->_resource_list.push_back(res);
+
+    m2mbase_stub::int_value = 1;
+
+    result = object_instance->resource("name");
+    CHECK(result != NULL);
+}
+
+void Test_M2MObjectInstance::test_resources()
+{
+    M2MResource *res = new M2MResource(*object_instance,"name","type",M2MResourceInstance::STRING,false, "name");
+    m2mbase_stub::string_value = "name";
+    object_instance->_resource_list.push_back(res);
+
+    res = new M2MResource(*object_instance,"name","type",M2MResourceInstance::STRING,false, "name");
+    object_instance->_resource_list.push_back(res);
+
+    M2MResourceList resources =object_instance->resources();
+
+    CHECK(2 == resources.size());
+}
+
+void Test_M2MObjectInstance::test_resource_count()
+{
+    M2MResource *res = new M2MResource(*object_instance,"name","type",M2MResourceInstance::STRING,false, "name");
+    m2mbase_stub::string_value = "name";
+    object_instance->_resource_list.push_back(res);
+
+    res = new M2MResource(*object_instance,"name","type",M2MResourceInstance::STRING,false, "name");
+    object_instance->_resource_list.push_back(res);
+
+
+    m2mbase_stub::int_value = 0;
+    m2mresource_stub::bool_value = true;
+    m2mresource_stub::int_value = 1;
+
+    CHECK(2 == object_instance->resource_count("name"));
+
+    m2mresource_stub::bool_value = false;
+
+    CHECK(2 == object_instance->resource_count("name"));
+}
+
+void Test_M2MObjectInstance::test_total_resource_count()
+{
+    M2MResource *res = new M2MResource(*object_instance,"name","type",M2MResourceInstance::STRING,false, "name");
+    m2mbase_stub::string_value = "name";
+    object_instance->_resource_list.push_back(res);
+
+    res = new M2MResource(*object_instance,"name","type",M2MResourceInstance::STRING,false, "name");
+    object_instance->_resource_list.push_back(res);
+
+    m2mresource_stub::bool_value = true;
+    m2mresource_stub::int_value = 1;
+
+    CHECK(2 == object_instance->resource_count());
+
+    m2mresource_stub::bool_value = false;
+
+    CHECK(2 == object_instance->resource_count());
+}
+
+void Test_M2MObjectInstance::test_base_type()
+{
+    m2mbase_stub::base_type = M2MBase::ObjectInstance;
+    CHECK(M2MBase::ObjectInstance == object_instance->base_type());
+}
+
+void Test_M2MObjectInstance::test_handle_get_request()
+{
+    M2MResource *res = new M2MResource(*object_instance,"name1","type1",M2MResourceInstance::STRING,false, "name1");
+    object_instance->_resource_list.push_back(res);
+    m2mbase_stub::string_value = "name1";
+    uint8_t value[] = {"name"};
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_GET;
+
+    common_stub::int_value = 0;
+
+    m2mbase_stub::operation = M2MBase::GET_ALLOWED;
+    m2mbase_stub::uint8_value = 200;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+
+    m2mtlvserializer_stub::uint8_value = (uint8_t*)malloc(1);
+
+    coap_header->token_ptr = (uint8_t*)malloc(sizeof(value));
+    memcpy(coap_header->token_ptr, value, sizeof(value));
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->observe = 0;
+    coap_header->content_format = sn_coap_content_format_e(110);
+
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    if(common_stub::coap_header->options_list_ptr) {
+        free(common_stub::coap_header->options_list_ptr);
+        common_stub::coap_header->options_list_ptr = NULL;
+    }
+
+    // Not OMA TLV or JSON
+    m2mbase_stub::uint8_value = 110;
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    if(common_stub::coap_header->options_list_ptr) {
+        free(common_stub::coap_header->options_list_ptr);
+        common_stub::coap_header->options_list_ptr = NULL;
+    }
+
+    // Content type set CT_NONE
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    m2mbase_stub::uint8_value = 99;
+    coap_header->content_format = sn_coap_content_format_e(-1);
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    common_stub::coap_header->content_format = sn_coap_content_format_e(-1); // CT_NONE
+    m2mbase_stub::uint8_value = 100;
+    coap_header->content_format = sn_coap_content_format_e(-1);
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // OMA TLV
+    m2mbase_stub::uint8_value = 99;
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // OMA JSON
+    m2mbase_stub::uint8_value = 100;
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    coap_header->options_list_ptr->observe = 0;
+    m2mbase_stub::uint16_value = 0x1c1c;
+    m2mbase_stub::uint8_value = 99;
+    m2mbase_stub::bool_value = true;
+
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    m2mbase_stub::uint16_value = 10;
+
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+    // Not observable
+    m2mbase_stub::bool_value = false;
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    m2mbase_stub::bool_value = true;
+    coap_header->options_list_ptr->observe = 0;
+
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+    coap_header->options_list_ptr->observe = 1;
+    m2mbase_stub::uint8_value = 99;
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+    CHECK(object_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    CHECK(object_instance->handle_get_request(NULL,NULL,handler) != NULL);
+
+    if(coap_header->token_ptr) {
+        free(coap_header->token_ptr);
+        coap_header->token_ptr = NULL;
+    }
+    if(coap_header->options_list_ptr) {
+        free(coap_header->options_list_ptr);
+        coap_header->options_list_ptr = NULL;
+    }
+
+    if(common_stub::coap_header){
+        if(common_stub::coap_header->options_list_ptr) {
+            free(common_stub::coap_header->options_list_ptr);
+            common_stub::coap_header->options_list_ptr = NULL;
+        }
+        free(common_stub::coap_header);
+        common_stub::coap_header = NULL;
+    }
+    free(coap_header);
+    coap_header = NULL;
+
+    if(m2mtlvserializer_stub::uint8_value) {
+        free(m2mtlvserializer_stub::uint8_value);
+    }
+    m2mtlvserializer_stub::clear();
+    common_stub::clear();
+}
+
+void Test_M2MObjectInstance::test_handle_put_request()
+{
+    uint8_t value[] = {"name"};
+    bool execute_value_updated = false;
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+
+    m2mbase_stub::operation = M2MBase::PUT_ALLOWED;
+    m2mbase_stub::uint8_value = 200;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+
+    coap_header->payload_ptr = (uint8_t*)malloc(1);
+    coap_header->content_format = sn_coap_content_format_e(-1);
+    sn_coap_hdr_s *coap_response = NULL;
+    m2mbase_stub::uint8_value = 99;
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mbase_stub::uint8_value = 0;
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->uri_query_ptr = value;
+    coap_header->options_list_ptr->uri_query_len = sizeof(value);
+
+    coap_header->content_format = sn_coap_content_format_e(99);
+    m2mtlvdeserializer_stub::bool_value = true;
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None;
+
+    m2mbase_stub::bool_value = false;
+
+
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mbase_stub::bool_value = true;
+
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    free(coap_header->options_list_ptr);
+    coap_header->options_list_ptr = NULL;
+
+    m2mbase_stub::bool_value = false;
+
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotFound;
+
+    m2mbase_stub::bool_value = false;
+
+
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotValid;
+
+    m2mbase_stub::bool_value = false;
+
+
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotAllowed;
+
+    m2mbase_stub::bool_value = false;
+
+
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mtlvdeserializer_stub::bool_value = false;
+
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    coap_header->content_format = sn_coap_content_format_e(100);
+
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    free(coap_header->payload_ptr);
+    coap_header->payload_ptr = NULL;
+
+    m2mbase_stub::bool_value = true;
+
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mbase_stub::bool_value = false;
+
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+
+    coap_response = object_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    coap_response = object_instance->handle_put_request(NULL,NULL,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    //free(coap_header->options_list_ptr);
+    free(common_stub::coap_header);
+    free(coap_header);
+
+    m2mtlvdeserializer_stub::clear();
+    common_stub::clear();
+    m2mbase_stub::clear();
+}
+
+void Test_M2MObjectInstance::test_handle_post_request()
+{
+    uint8_t value[] = {"name"};
+    bool execute_value_updated = false;
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mbase_stub::uint8_value = 200;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+
+    m2mbase_stub::bool_value = false;
+
+    sn_coap_hdr_s * coap_response = NULL;
+    m2mbase_stub::uint8_value = 99;
+
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->content_format = sn_coap_content_format_e(-1);
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    m2mbase_stub::uint8_value = 100;
+
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+    coap_header->payload_ptr = (uint8_t*)malloc(1);
+
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+    m2mbase_stub::uint8_value = 99;
+
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    m2mbase_stub::uint8_value = 0;
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->uri_query_ptr = value;
+    coap_header->options_list_ptr->uri_query_len = sizeof(value);
+
+    coap_header->content_format = sn_coap_content_format_e(99);
+    m2mtlvdeserializer_stub::is_object_bool_value = true;
+    m2mtlvdeserializer_stub::bool_value = false;
+    m2mbase_stub::bool_value = false;
+
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None;
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mtlvdeserializer_stub::is_object_bool_value = true;
+    m2mtlvdeserializer_stub::bool_value = false;
+    m2mbase_stub::bool_value = false;
+
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotAllowed;
+
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotValid;
+
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mtlvdeserializer_stub::is_object_bool_value = false;
+    m2mtlvdeserializer_stub::bool_value = true;
+    m2mbase_stub::bool_value = false;
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None;
+
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mtlvdeserializer_stub::is_object_bool_value = false;
+    m2mtlvdeserializer_stub::bool_value = true;
+    m2mbase_stub::bool_value = false;
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotFound;
+
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mtlvdeserializer_stub::bool_value = false;
+
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+
+    coap_header->content_format = sn_coap_content_format_e(100);
+
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+
+    m2mbase_stub::bool_value = true;
+
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+
+    coap_response = object_instance->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    coap_response = object_instance->handle_post_request(NULL,NULL,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+    if(coap_response) {
+        if (coap_response->options_list_ptr) {
+            if (coap_response->options_list_ptr->location_path_ptr) {
+                free(coap_response->options_list_ptr->location_path_ptr);
+                coap_response->options_list_ptr->location_path_ptr = NULL;
+            }
+            free(coap_response->options_list_ptr);
+            coap_response->options_list_ptr = NULL;
+        }
+    }
+
+    free(coap_header->options_list_ptr);
+    free(coap_header->payload_ptr);
+    free(common_stub::coap_header);
+    free(coap_header);
+    m2mtlvdeserializer_stub::clear();
+    common_stub::clear();
+    m2mbase_stub::clear();
+
+}
+
+void Test_M2MObjectInstance::test_notification_update()
+{
+    M2MBase::Observation obs_level = M2MBase::O_Attribute;
+
+    object_instance->notification_update(obs_level);
+    //CHECK(callback->visited == true);
+
+    obs_level = M2MBase::OI_Attribute;
+
+    TestReportObserver obs;
+    m2mbase_stub::report = new M2MReportHandler(obs);
+    m2mbase_stub::bool_value = true;
+
+    object_instance->notification_update(obs_level);
+
+    delete m2mbase_stub::report;
+    m2mbase_stub::report = NULL;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mobjectinstance/test_m2mobjectinstance.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_OBJECT_INSTANCE_H
+#define TEST_M2M_OBJECT_INSTANCE_H
+
+#include "m2mobjectinstance.h"
+
+class Handler;
+class Callback;
+
+class Test_M2MObjectInstance
+{
+public:
+    Test_M2MObjectInstance();
+
+    virtual ~Test_M2MObjectInstance();
+
+    void test_create_static_resource();
+
+    void test_create_static_resource_instance();
+
+    void test_create_dynamic_resource();
+
+    void test_create_dynamic_resource_instance();
+
+    void test_remove_resource();
+
+    void test_remove_resource_instance();
+
+    void test_resource();
+
+    void test_resources();
+
+    void test_resource_count();
+
+    void test_total_resource_count();
+
+    void test_base_type();
+
+    void test_handle_get_request();
+
+    void test_handle_put_request();
+
+    void test_handle_post_request();
+
+    void test_notification_update();
+
+    void test_ctor();
+
+    M2MObjectInstance* object_instance;
+
+    Handler* handler;
+
+    M2MObject* object;
+};
+
+#endif // TEST_M2M_OBJECT_INSTANCE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mreporthandler/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+
+
+add_executable(m2mreporthandler
+        "main.cpp"
+        "m2mreporthandlertest.cpp"
+        "test_m2mreporthandler.cpp"
+        "../stub/m2mtimer_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../../../../source/m2mreporthandler.cpp"
+
+)
+target_link_libraries(m2mreporthandler
+    CppUTest
+    CppUTestExt
+)
+
+set_target_properties(m2mreporthandler
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mreporthandler")
+add_test(m2mreporthandler ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mreporthandler/m2mreporthandlertest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "CppUTestExt/MockSupport.h"
+#include "test_m2mreporthandler.h"
+
+
+TEST_GROUP(M2MReportHandler)
+{
+  Test_M2MReportHandler* m2m_reporthandler;
+
+  void setup()
+  {
+    m2m_reporthandler = new Test_M2MReportHandler();
+  }
+  void teardown()
+  {
+    delete m2m_reporthandler;
+    mock().clear();
+  }
+};
+
+TEST(M2MReportHandler, Create)
+{
+    CHECK(m2m_reporthandler != NULL);
+}
+
+TEST(M2MReportHandler, test_set_under_observation)
+{
+    m2m_reporthandler->test_set_under_observation();
+}
+
+TEST(M2MReportHandler, test_parse_notification_attribute)
+{
+    m2m_reporthandler->test_parse_notification_attribute();
+}
+
+TEST(M2MReportHandler, test_timer_expired)
+{
+    m2m_reporthandler->test_timer_expired();
+}
+
+TEST(M2MReportHandler, test_set_value)
+{
+    m2m_reporthandler->test_set_value();
+}
+
+TEST(M2MReportHandler, test_trigger_object_notification)
+{
+    m2m_reporthandler->test_trigger_object_notification();
+}
+
+TEST(M2MReportHandler, test_set_string_notification_trigger)
+{
+    m2m_reporthandler->test_set_string_notification_trigger();
+}
+
+TEST(M2MReportHandler, test_timers)
+{
+    m2m_reporthandler->test_timers();
+}
+
+TEST(M2MReportHandler, test_attribute_flags)
+{
+    m2m_reporthandler->test_attribute_flags();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mreporthandler/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MReportHandler);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mreporthandler/test_m2mreporthandler.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,456 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "CppUTestExt/MockSupport.h"
+#include "m2mtimer_stub.h"
+#include "test_m2mreporthandler.h"
+#include "m2mobservationhandler.h"
+#include "m2mtimer.h"
+#include "m2mtimerobserver.h"
+#include "m2mbase.h"
+
+class Observer : public M2MReportObserver{
+
+public:
+
+    Observer() : visited(false) {}
+    virtual ~Observer(){}
+    void observation_to_be_sent(m2m::Vector<uint16_t>,bool){
+        visited = true;
+    }
+    bool visited;
+};
+
+class TimerObserver : public M2MTimerObserver
+{
+public:
+    TimerObserver() : visited(false) {}
+    virtual ~TimerObserver(){}
+
+    virtual void timer_expired(M2MTimerObserver::Type ){
+        visited = true;
+    }
+
+    bool visited;
+};
+
+Test_M2MReportHandler::Test_M2MReportHandler()
+{
+    _observer = new Observer();
+    M2MReportHandler handler(*_observer);
+    _handler = new M2MReportHandler(*_observer);
+}
+
+Test_M2MReportHandler::~Test_M2MReportHandler()
+{
+    delete _handler;
+    delete _observer;
+    m2mtimer_stub::clear();
+}
+
+void Test_M2MReportHandler::test_set_under_observation()
+{    
+    m2mtimer_stub::enable_mock = true;
+
+    _observer->visited = false;
+
+    mock().clear();
+    mock().expectOneCall("stop_timer").onObject(&_handler->_pmin_timer);
+    mock().expectOneCall("stop_timer").onObject(&_handler->_pmax_timer);
+    _handler->set_under_observation(true);
+    CHECK(false == _observer->visited);
+
+    mock().expectOneCall("stop_timer").onObject(&_handler->_pmin_timer);
+    mock().expectOneCall("stop_timer").onObject(&_handler->_pmax_timer);
+    _observer->visited = false;    
+    _handler->set_under_observation(false);
+    CHECK(false == _observer->visited);
+    mock().checkExpectations();
+
+    m2mtimer_stub::enable_mock = false;
+}
+
+void Test_M2MReportHandler::test_parse_notification_attribute()
+{
+    char* val = {"value"};
+    CHECK(false == _handler->parse_notification_attribute(val, M2MBase::ObjectInstance ));
+
+    char* val2 = {"value&eval"};
+    CHECK(false == _handler->parse_notification_attribute(val2, M2MBase::ObjectInstance ));
+
+    char* val3 = {"toolongvaluevaluevaluevaluevalue&toolongvaluevaluevaluevaluevalue"};
+    CHECK(false == _handler->parse_notification_attribute(val3, M2MBase::ObjectInstance ));
+
+    char* val_real = {"st=6&pmax=3&lt=1&gt=100"};
+    CHECK(true == _handler->parse_notification_attribute(val_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    char* val_real1 = {"a=1&pmin=2&pmax=3&gt=4&lt=5&st=6"};
+    CHECK(false == _handler->parse_notification_attribute(val_real1, M2MBase::Resource,
+                                                          M2MResourceInstance::INTEGER ));
+
+    char* val2_real = {"st=6&lt=50&gt=1"};
+    CHECK(false == _handler->parse_notification_attribute(val2_real, M2MBase::Resource,
+                                                          M2MResourceInstance::INTEGER ));
+
+    char* val3_real = {"gt=40&lt=5&st=6"};
+    CHECK(true == _handler->parse_notification_attribute(val3_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    _handler->set_default_values();
+
+    char* val5_real = {"pmin=10"};
+    CHECK(true == _handler->parse_notification_attribute(val5_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    char* val6_real = {"pmin=100&pmax=5"};
+    CHECK(false == _handler->parse_notification_attribute(val6_real, M2MBase::Resource,
+                                                          M2MResourceInstance::INTEGER ));
+
+    char* val7_real = {"st=6&pmax=30&lt=1&gt=100&pmin=0"};    
+    CHECK(true == _handler->parse_notification_attribute(val7_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    char* val8_real = {"pmax=30&lt=10&gt=5&pmin=1"};
+    CHECK(false == _handler->parse_notification_attribute(val8_real, M2MBase::Resource,
+                                                          M2MResourceInstance::INTEGER ));
+
+    // low = lt + 2 * st = 18
+    char* val9_real = {"pmax=30&lt=10&gt=17&pmin=1&st=4"};
+    CHECK(false == _handler->parse_notification_attribute(val9_real, M2MBase::Resource,
+                                                          M2MResourceInstance::INTEGER ));
+
+    // low = lt + 2 * st = 18
+    char* val10_real = {"pmax=30&lt=10&gt=19&pmin=1&st=4"};
+    CHECK(true == _handler->parse_notification_attribute(val10_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    char* val11_real = {"pmax=30&pmin=30"};
+    CHECK(true == _handler->parse_notification_attribute(val11_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    _handler->set_default_values();
+
+    char* inst_real = {"st=6&pmax=3&lt=1&gt=100"};
+    CHECK(true == _handler->parse_notification_attribute(inst_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    char* inst1_real1 = {"a=1&pmin=2&pmax=3&gt=4&lt=5&st=6"};
+    CHECK(false == _handler->parse_notification_attribute(inst1_real1, M2MBase::Resource,
+                                                          M2MResourceInstance::INTEGER ));
+
+    char* inst2_real = {"st=6&lt=50&gt=1"};
+    CHECK(false == _handler->parse_notification_attribute(inst2_real, M2MBase::Resource,
+                                                          M2MResourceInstance::INTEGER ));
+
+    char* inst3_real = {"gt=40&lt=5&st=6"};
+    CHECK(true == _handler->parse_notification_attribute(inst3_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    _handler->set_default_values();
+    char* inst5_real = {"pmin=10"};
+    CHECK(true == _handler->parse_notification_attribute(inst5_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    char* inst6_real = {"pmin=100&pmax=5"};
+    CHECK(false == _handler->parse_notification_attribute(inst6_real, M2MBase::Resource,
+                                                          M2MResourceInstance::INTEGER ));
+
+    char* inst7_real = {"st=6&pmax=30&lt=1&gt=100&pmin=0"};
+    CHECK(true == _handler->parse_notification_attribute(inst7_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    char* inst8_real = {"pmax=30&lt=10&gt=5&pmin=1"};
+    CHECK(false == _handler->parse_notification_attribute(inst8_real, M2MBase::Resource,
+                                                          M2MResourceInstance::INTEGER ));
+
+    // low = lt + 2 * st = 18
+    char* inst9_real = {"pmax=30&lt=10&gt=17&pmin=1&st=4"};
+    CHECK(false == _handler->parse_notification_attribute(inst9_real, M2MBase::Resource,
+                                                          M2MResourceInstance::INTEGER ));
+
+    // low = lt + 2 * st = 18
+    char* inst10_real = {"pmax=30&lt=10&gt=19&pmin=1&st=4"};
+    CHECK(true == _handler->parse_notification_attribute(inst10_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    char* inst11_real = {"pmax=30&pmin=30"};
+    CHECK(true == _handler->parse_notification_attribute(inst11_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    char* inst12_real = {"pmax=&pmin=30"};
+    CHECK(false == _handler->parse_notification_attribute(inst12_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+    char* inst13_real = {"st="};
+    CHECK(false == _handler->parse_notification_attribute(inst13_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    _handler->set_default_values();
+
+    char* inst14_real = {"stp=10"};
+    CHECK(true == _handler->parse_notification_attribute(inst14_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+    char* inst15_real = {"stp=10&st=15"};
+    CHECK(true == _handler->parse_notification_attribute(inst15_real, M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER ));
+
+    _handler->set_default_values();
+
+    DOUBLES_EQUAL(0,_handler->_lt,0);
+    DOUBLES_EQUAL(0,_handler->_gt,0);
+    DOUBLES_EQUAL(-1,_handler->_pmax,0);
+    DOUBLES_EQUAL(1,_handler->_pmin,0);
+    DOUBLES_EQUAL(0,_handler->_st,0);
+    DOUBLES_EQUAL(0,_handler->_high_step,0);
+    DOUBLES_EQUAL(0,_handler->_low_step,0);
+    DOUBLES_EQUAL(-1,_handler->_last_value,0);
+    DOUBLES_EQUAL(0,_handler->_attribute_state,0);
+    CHECK_FALSE(_handler->_pmin_exceeded);
+    CHECK_FALSE(_handler->_pmax_exceeded);
+}
+
+void Test_M2MReportHandler::test_timer_expired()
+{
+    _handler->timer_expired(M2MTimerObserver::Notdefined);
+    CHECK(_observer->visited == false);
+
+    _handler->_notify = true;
+    _handler->_pmin_exceeded = true;
+    _handler->timer_expired(M2MTimerObserver::PMaxTimer);
+    CHECK(_observer->visited == true);
+
+    _handler->_pmin_exceeded = false;
+    _handler->_notify = false;
+    _handler->_attribute_state = M2MReportHandler::Pmax;
+    _handler->_current_value = 100;
+    _handler->timer_expired(M2MTimerObserver::PMinTimer);
+    CHECK(_handler->_pmin_exceeded == true);
+
+    _observer->visited = false;
+    _handler->_notify = true;
+    _handler->timer_expired(M2MTimerObserver::PMinTimer);
+    CHECK(_observer->visited == true);
+
+    _handler->_notify = true;
+    _handler->_pmin_exceeded = true;
+    _handler->timer_expired(M2MTimerObserver::PMinTimer);
+    CHECK(_handler->_pmin_exceeded == true);
+
+    _handler->_notify = true;
+    _handler->_pmin_exceeded = false;
+    _handler->_attribute_state = M2MReportHandler::Pmax;
+    _handler->timer_expired(M2MTimerObserver::PMaxTimer);
+    CHECK(_handler->_pmax_exceeded == true);
+}
+
+void Test_M2MReportHandler::test_set_value()
+{
+    _handler->_notify = true;
+    _handler->_pmin_exceeded = false;
+    _observer->visited = false;
+
+    _handler->set_value(1);
+    _handler->set_value(10);
+    CHECK(_observer->visited == true);
+
+    char* query = {"st=6"};
+    _handler->_attribute_state = 0;
+    CHECK(true == _handler->parse_notification_attribute(query,
+                                                         M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER));
+    _observer->visited = false;
+    _handler->set_value(15);
+    CHECK(_observer->visited == false);
+
+    _observer->visited = false;
+    _handler->set_value(21);
+    CHECK(_observer->visited == true);
+
+    _handler->set_value(10);
+    char* query2 = {"st=3&lt=10&gt=100"};
+    _handler->_attribute_state = 0;
+    CHECK(true == _handler->parse_notification_attribute(query2,
+                                                         M2MBase::Resource,
+                                                         M2MResourceInstance::INTEGER));    
+
+    _observer->visited = false;
+    _handler->set_value(12);
+    CHECK(_observer->visited == false);
+
+    _observer->visited = false;
+    _handler->set_value(15);
+    CHECK(_observer->visited == true);
+
+    _observer->visited = false;
+    _handler->set_value(5);
+    CHECK(_observer->visited == true);
+
+    _observer->visited = false;
+    _handler->set_value(4);
+    CHECK(_observer->visited == true);
+
+    _observer->visited = false;
+    _handler->set_value(101);
+    CHECK(_observer->visited == true);
+
+    _observer->visited = false;
+    _handler->set_value(102);
+    CHECK(_observer->visited == true);
+
+    char* query3 = {"lt=10"};    
+    _handler->set_default_values();
+    CHECK(true == _handler->parse_notification_attribute(query3, M2MBase::Resource, M2MResourceInstance::INTEGER));
+    _observer->visited = false;
+    _handler->set_value(9);
+    CHECK(_observer->visited == true);
+
+    _observer->visited = false;
+    _handler->set_value(15);
+    CHECK(_observer->visited == false);
+
+    char* query4 = {"gt=10"};    
+    _handler->set_default_values();
+    CHECK(true == _handler->parse_notification_attribute(query4, M2MBase::Resource, M2MResourceInstance::INTEGER));
+
+    // Instantiate timers
+    _handler->_attribute_state |= M2MReportHandler::Pmin;
+    _handler->handle_timers();
+    _observer->visited = false;
+    _handler->set_value(9);
+    CHECK(_observer->visited == false);    
+    // Stop timers and reset flag to previous state
+    _handler->stop_timers();
+    _handler->_attribute_state = M2MReportHandler::Gt;
+
+    _observer->visited = false;
+    _handler->set_value(15);
+    CHECK(_observer->visited == true);
+
+    _observer->visited = false;
+    _handler->set_value(16);
+    CHECK(_observer->visited == true);
+
+    _observer->visited = false;
+    char* query5 = {"gt=10"};
+    _handler->set_default_values();
+    CHECK(false == _handler->parse_notification_attribute(query5, M2MBase::Resource, M2MResourceInstance::STRING));
+
+    _observer->visited = false;
+    char* query6 = {"pmin=10"};
+    _handler->set_default_values();
+    CHECK(true == _handler->parse_notification_attribute(query6, M2MBase::Resource, M2MResourceInstance::STRING));
+
+    _observer->visited = false;
+    char* query7 = {"pmin=10&pmax=20"};
+    _handler->set_default_values();
+    CHECK(true == _handler->parse_notification_attribute(query7, M2MBase::Resource, M2MResourceInstance::OPAQUE));
+
+    _observer->visited = false;
+    _handler->handle_timers();
+    _handler->set_value(26);
+    _handler->_pmin_exceeded = true;
+    _handler->timer_expired(M2MTimerObserver::PMaxTimer);
+    CHECK(_observer->visited == true);
+}
+
+void Test_M2MReportHandler::test_trigger_object_notification()
+{
+    _handler->_notify = true;
+    _handler->_pmin_exceeded = true;
+    _handler->set_notification_trigger();
+    CHECK(_handler->_pmin_exceeded == false);
+    CHECK(_observer->visited == true);
+
+    _handler->_changed_instance_ids.push_back(0);
+    _handler->_changed_instance_ids.push_back(1);
+    _handler->_changed_instance_ids.push_back(2);
+
+    _handler->set_notification_trigger();
+    CHECK(_handler->_pmin_exceeded == false);
+    CHECK(_observer->visited == true);
+
+}
+
+void Test_M2MReportHandler::test_set_string_notification_trigger()
+{
+    _handler->_notify = true;
+    _handler->_pmin_exceeded = true;
+    _handler->set_notification_trigger();
+    CHECK(_handler->_pmin_exceeded == false);
+}
+
+void Test_M2MReportHandler::test_timers()
+{
+    m2mtimer_stub::enable_mock = true;
+    // No timers should start when _attribute_state == 0
+    _handler->handle_timers();
+    mock().checkExpectations();
+
+    // pmin starts when _attribute_state |= pmin
+    mock().clear();
+    mock().expectOneCall("start_timer").onObject(&_handler->_pmin_timer);
+    _handler->_attribute_state |= M2MReportHandler::Pmin;
+    _handler->handle_timers();
+    mock().checkExpectations();
+
+    // pmin gets stopped
+    mock().clear();
+    mock().expectOneCall("stop_timer").onObject(&_handler->_pmin_timer);
+    mock().expectOneCall("stop_timer").onObject(&_handler->_pmax_timer);
+    _handler->stop_timers();
+    mock().checkExpectations();
+
+    // pmin starts when _attribute_state |= pmin & pmax but _pmax value is default -1
+    // pmax should not start
+    mock().clear();
+    mock().expectOneCall("start_timer").onObject(&_handler->_pmin_timer);
+    _handler->_attribute_state |= M2MReportHandler::Pmax;
+    _handler->handle_timers();
+    mock().checkExpectations();
+
+    // pmin and pmax get stopped
+    mock().clear();
+    mock().expectOneCall("stop_timer").onObject(&_handler->_pmin_timer);
+    mock().expectOneCall("stop_timer").onObject(&_handler->_pmax_timer);
+    _handler->stop_timers();
+    mock().checkExpectations();
+
+    // max timer is started when pmax == pmin
+    mock().clear();
+    mock().expectOneCall("start_timer").onObject(&_handler->_pmax_timer);
+    _handler->_pmax = 2;
+    _handler->_pmin = 2;
+    _handler->handle_timers();
+    mock().checkExpectations();
+    CHECK(_handler->_pmin_exceeded == true);
+
+    /*
+    mock().clear();
+    mock().expectOneCall("stop_timer").onObject(&_handler->_pmin_timer);
+    mock().expectOneCall("stop_timer").onObject(&_handler->_pmax_timer);
+    _handler->stop_timers();
+    mock().checkExpectations();
+*/
+    m2mtimer_stub::enable_mock = false;
+}
+
+void Test_M2MReportHandler::test_attribute_flags()
+{
+    CHECK(_handler->attribute_flags() == 0);
+    _handler->_attribute_state = M2MReportHandler::Pmax | M2MReportHandler::Pmin |
+            M2MReportHandler::St | M2MReportHandler::Gt | M2MReportHandler::Lt | M2MReportHandler::Cancel;
+    CHECK(_handler->attribute_flags() == (1 << 6) - 1);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mreporthandler/test_m2mreporthandler.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_REPORT_HANDLER_H
+#define TEST_M2M_REPORT_HANDLER_H
+
+#include "m2mreporthandler.h"
+
+class Observer;
+
+class Test_M2MReportHandler
+{
+public:    
+    Test_M2MReportHandler();
+
+    virtual ~Test_M2MReportHandler();
+
+    void test_set_under_observation();
+
+    void test_parse_notification_attribute();
+
+    void test_timer_expired();
+
+    void test_set_value();
+
+    void test_trigger_object_notification();
+
+    void test_set_string_notification_trigger();
+
+    void test_timers();
+
+    void test_attribute_flags();
+
+    M2MReportHandler *_handler;
+    Observer         * _observer;
+};
+
+
+#endif // TEST_M2M_BASE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mresource/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,31 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mresource
+        "../../../../source/m2mresource.cpp"
+        "main.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mtimer_stub.cpp"
+        "../stub/m2mreporthandler_stub.cpp"
+        "../stub/m2mresourceinstance_stub.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mobjectinstance_stub.cpp"
+        "../stub/m2mtlvdeserializer_stub.cpp"
+        "../stub/m2mtlvserializer_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "../stub/common_stub.cpp"
+        "m2mresourcetest.cpp"
+        "test_m2mresource.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2mresource
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mresource
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mresource")
+add_test(m2mresource ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mresource/m2mresourcetest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mresource.h"
+
+TEST_GROUP(M2MResource)
+{
+  Test_M2MResource* m2m_resource;
+
+  void setup()
+  {
+    m2m_resource = new Test_M2MResource();
+  }
+  void teardown()
+  {
+    delete m2m_resource;
+  }
+};
+
+TEST(M2MResource, Create)
+{
+    CHECK(m2m_resource != NULL);
+}
+
+TEST(M2MResource, static_resource)
+{
+    m2m_resource->test_static_resource();
+}
+
+TEST(M2MResource, base_type)
+{
+    m2m_resource->test_base_type();
+}
+
+TEST(M2MResource, muliptle_instances)
+{
+    m2m_resource->test_muliptle_instances();
+}
+
+TEST(M2MResource, test_handle_observation_attribute)
+{
+    m2m_resource->test_handle_observation_attribute();
+}
+
+TEST(M2MResource, test_add_resource_instance)
+{
+    m2m_resource->test_add_resource_instance();
+}
+
+TEST(M2MResource, test_remove_resource_instance)
+{
+    m2m_resource->test_remove_resource_instance();
+}
+
+TEST(M2MResource, test_resource_instance_count)
+{
+    m2m_resource->test_resource_instance_count();
+}
+
+TEST(M2MResource, test_resource_instances)
+{
+    m2m_resource->test_resource_instances();
+}
+
+TEST(M2MResource, test_resource_instance)
+{
+    m2m_resource->test_resource_instance();
+}
+
+TEST(M2MResource, test_add_observation_level)
+{
+    m2m_resource->test_add_observation_level();
+}
+
+TEST(M2MResource, test_remove_observation_level)
+{
+    m2m_resource->test_remove_observation_level();
+}
+
+TEST(M2MResource, test_handle_get_request)
+{
+    m2m_resource->test_handle_get_request();
+}
+
+TEST(M2MResource, test_handle_put_request)
+{
+    m2m_resource->test_handle_put_request();
+}
+
+TEST(M2MResource, test_handle_post_request)
+{
+    m2m_resource->test_handle_post_request();
+}
+
+TEST(M2MResource, test_notification_update)
+{
+    m2m_resource->test_notification_update();
+}
+
+TEST(M2MResource, test_set_delayed_response)
+{
+    m2m_resource->test_set_delayed_response();
+}
+
+TEST(M2MResource, test_send_delayed_post_response)
+{
+    m2m_resource->test_send_delayed_post_response();
+}
+
+TEST(M2MResource, test_get_delayed_token)
+{
+    m2m_resource->test_get_delayed_token();
+}
+
+TEST(M2MResource, test_delayed_response)
+{
+    m2m_resource->test_delayed_response();
+}
+
+TEST(M2MResource, test_execute_params)
+{
+    m2m_resource->test_execute_params();
+}
+
+TEST(M2MResource, test_ctor)
+{
+    m2m_resource->test_ctor();
+}
+
+TEST(M2MResource, test_get_parent_object_instance)
+{
+    m2m_resource->test_get_parent_object_instance();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mresource/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MResource);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mresource/test_m2mresource.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,632 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mresource.h"
+#include "CppUTest/MemoryLeakDetectorMallocMacros.h"
+#include "m2mbase_stub.h"
+#include "m2mresourceinstance_stub.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mtlvdeserializer_stub.h"
+#include "m2mreporthandler_stub.h"
+#include "m2mobject_stub.h"
+#include "common_stub.h"
+#include "m2mreporthandler.h"
+
+class TestReportObserver :  public M2MReportObserver{
+public :
+    TestReportObserver() {}
+    ~TestReportObserver() {}
+    void observation_to_be_sent(m2m::Vector<uint16_t>,bool){ }
+};
+
+class Handler : public M2MObservationHandler {
+
+public:
+
+    Handler(){}
+    ~Handler(){}
+    void observation_to_be_sent(M2MBase *, uint16_t,m2m::Vector<uint16_t>,bool){
+        visited = true;
+    }
+    void send_delayed_response(M2MBase *){}
+    void resource_to_be_deleted(M2MBase *){visited=true;}
+    void remove_object(M2MBase *){visited = true;}
+    void value_updated(M2MBase *,const String&){visited = true;}
+
+    void clear() {visited = false;}
+    bool visited;
+};
+
+Test_M2MResource::Test_M2MResource()
+{
+    handler = new Handler();
+    object = new M2MObject("name", "name");
+    object_instance = new M2MObjectInstance(*object, "name", "type", "");
+    resource = new M2MResource(*object_instance,
+                               "name","resource_type",
+                               M2MResourceInstance::INTEGER,false, "name");
+}
+
+Test_M2MResource::~Test_M2MResource()
+{
+    delete object;
+    delete object_instance;
+    delete resource;
+    delete handler;
+    m2mtlvdeserializer_stub::clear();
+}
+
+void Test_M2MResource::test_static_resource()
+{
+    u_int8_t value[] = {"value"};
+    M2MResource *res = new M2MResource(*m2mobject_stub::inst,
+                                       "name",
+                                      "resource_type",
+                                      M2MResourceInstance::INTEGER,
+                                      value,
+                                      (uint32_t)sizeof(value),"name");
+
+    CHECK(res != NULL);
+    delete res;
+
+}
+
+void Test_M2MResource::test_base_type()
+{
+    m2mresourceinstance_stub::base_type = M2MBase::Resource;
+    CHECK(M2MBase::Resource == resource->base_type());
+}
+
+void Test_M2MResource::test_muliptle_instances()
+{
+    CHECK(false == resource->supports_multiple_instances());
+}
+
+void Test_M2MResource::test_handle_observation_attribute()
+{
+    char *d = "s";
+
+    m2mresourceinstance_stub::resource_type = M2MResourceInstance::INTEGER;
+    CHECK(false == resource->handle_observation_attribute(d));
+
+    m2mresourceinstance_stub::resource_type = M2MResourceInstance::FLOAT;
+    CHECK(false == resource->handle_observation_attribute(d));
+
+    M2MResourceInstance *res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "type",
+                                                                              M2MResourceInstance::INTEGER,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+
+    resource->add_resource_instance(res);
+
+    TestReportObserver obs;
+    m2mbase_stub::report = new M2MReportHandler(obs);
+
+    m2mbase_stub::bool_value = true;
+    CHECK(false == resource->handle_observation_attribute(d));
+
+    resource->_resource_type = M2MResourceInstance::INTEGER;
+    m2mreporthandler_stub::bool_return = true;
+    CHECK(true == resource->handle_observation_attribute(d));
+
+    m2mbase_stub::bool_value = false;
+    CHECK(true == resource->handle_observation_attribute(d));
+
+    delete m2mbase_stub::report;
+    m2mbase_stub::report = NULL;
+}
+
+void Test_M2MResource::test_add_resource_instance()
+{
+    M2MResourceInstance *res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "type",
+                                                                              M2MResourceInstance::INTEGER,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+    resource->add_resource_instance(res);
+    CHECK(resource->_resource_instance_list.size() == 1);
+}
+
+void Test_M2MResource::test_remove_resource_instance()
+{
+    M2MResourceInstance *res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "type",
+                                                                              M2MResourceInstance::STRING,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+    resource->_resource_instance_list.push_back(res);
+    CHECK(resource->remove_resource_instance(0) == true);
+}
+
+void Test_M2MResource::test_resource_instance()
+{
+    M2MResourceInstance *res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "type",
+                                                                              M2MResourceInstance::STRING,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+    resource->_resource_instance_list.push_back(res);
+    CHECK(resource->resource_instance(0) != NULL);
+}
+
+void Test_M2MResource::test_resource_instances()
+{
+    M2MResourceInstance *res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "type",
+                                                                              M2MResourceInstance::STRING,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+    resource->_resource_instance_list.push_back(res);
+    M2MResourceInstanceList list = resource->resource_instances();
+    CHECK(list.size() ==1);
+}
+
+void Test_M2MResource::test_resource_instance_count()
+{
+    M2MResourceInstance *res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "type",
+                                                                              M2MResourceInstance::STRING,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+    resource->_resource_instance_list.push_back(res);
+    CHECK(resource->resource_instance_count() ==1);
+}
+
+void Test_M2MResource::test_add_observation_level()
+{
+    M2MResourceInstance *res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "type",
+                                                                              M2MResourceInstance::STRING,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+    resource->_resource_instance_list.push_back(res);
+
+    M2MBase::Observation obs_level = M2MBase::R_Attribute;
+
+    resource->add_observation_level(obs_level);
+}
+
+void Test_M2MResource::test_remove_observation_level()
+{
+    M2MResourceInstance *res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "type",
+                                                                              M2MResourceInstance::STRING,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+    resource->_resource_instance_list.push_back(res);
+
+    M2MBase::Observation obs_level = M2MBase::R_Attribute;
+
+    resource->remove_observation_level(obs_level);
+}
+
+void Test_M2MResource::test_handle_get_request()
+{
+    uint8_t value[] = {"name"};
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_GET;
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+
+    m2mbase_stub::operation = M2MBase::GET_ALLOWED;
+    m2mbase_stub::uint8_value = 200;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+
+    coap_header->token_ptr = (uint8_t*)malloc(sizeof(value));
+    memcpy(coap_header->token_ptr, value, sizeof(value));
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->observe = 0;
+
+    coap_header->content_format = sn_coap_content_format_e(110);
+
+    m2mresourceinstance_stub::header = NULL;
+
+    M2MResourceInstance *res_instance = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "res2",
+                                                                              M2MResourceInstance::STRING,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+
+    M2MResourceInstance *res_instance_1 = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                              "name",
+                                                                              "res2",
+                                                                              M2MResourceInstance::STRING,
+                                                                              0,
+                                                                              "name",
+                                                                              false);
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) == NULL);
+
+    resource->_has_multiple_instances = true;
+    resource->add_resource_instance(res_instance);
+    resource->add_resource_instance(res_instance_1);
+
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) != NULL);
+
+
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // Not OMA TLV or JSON
+    common_stub::coap_header->content_format = sn_coap_content_format_e(-1);
+    m2mbase_stub::uint8_value = 110;
+    coap_header->content_format = sn_coap_content_format_e(-1);
+
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // OMA TLV
+    m2mbase_stub::uint8_value = 99;
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // OMA JSON
+    m2mbase_stub::uint8_value = 100;
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    coap_header->options_list_ptr->observe = 0;
+    m2mbase_stub::uint16_value = 0x1c1c;
+    m2mbase_stub::bool_value = true;
+
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    m2mbase_stub::uint16_value = 10;
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    coap_header->options_list_ptr->observe = 0;
+
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    coap_header->options_list_ptr->observe = 1;
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // Not observable
+    m2mbase_stub::bool_value = false;
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+    CHECK(resource->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    CHECK(resource->handle_get_request(NULL,NULL,handler) != NULL);
+
+    if(coap_header->token_ptr) {
+        free(coap_header->token_ptr);
+        coap_header->token_ptr = NULL;
+    }
+    if(coap_header->options_list_ptr) {
+        free(coap_header->options_list_ptr);
+        coap_header->options_list_ptr = NULL;
+    }
+
+    if(common_stub::coap_header){
+        if(common_stub::coap_header->options_list_ptr) {
+            free(common_stub::coap_header->options_list_ptr);
+            common_stub::coap_header->options_list_ptr = NULL;
+        }
+        free(common_stub::coap_header);
+        common_stub::coap_header = NULL;
+    }
+    free(coap_header);
+    coap_header = NULL;
+
+    m2mbase_stub::clear();
+    common_stub::clear();
+}
+
+void Test_M2MResource::test_handle_put_request()
+{
+    uint8_t value[] = {"name"};
+    bool execute_value_updated = false;
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    TestReportObserver obs;
+    m2mbase_stub::report = new M2MReportHandler(obs);
+
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+
+    m2mbase_stub::operation = M2MBase::PUT_ALLOWED;
+    m2mbase_stub::uint8_value = 200;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+
+    coap_header->payload_ptr = (uint8_t*)malloc(1);
+
+    sn_coap_hdr_s *coap_response = NULL;
+
+    m2mresourceinstance_stub::header = NULL;
+
+    CHECK(resource->handle_put_request(NULL,coap_header,handler,execute_value_updated) == NULL);
+
+    resource->_has_multiple_instances = true;
+    m2mbase_stub::uint8_value = 99;
+    coap_header->content_format = sn_coap_content_format_e(-1);
+    coap_response = resource->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mbase_stub::uint8_value = 0;
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->uri_query_ptr = value;
+    coap_header->options_list_ptr->uri_query_len = sizeof(value);
+
+    coap_header->content_format = sn_coap_content_format_e(99);
+    m2mtlvdeserializer_stub::bool_value = true;
+
+    m2mbase_stub::bool_value = false;
+
+
+    coap_response = resource->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    free(coap_header->options_list_ptr);
+    coap_header->options_list_ptr = NULL;
+
+    coap_response = resource->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mtlvdeserializer_stub::bool_value = false;
+
+    coap_response = resource->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotFound;
+    coap_response = resource->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotValid;
+    coap_response = resource->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotAllowed;
+    coap_response = resource->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    coap_header->content_format = sn_coap_content_format_e(100);
+
+    coap_response = resource->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    m2mbase_stub::bool_value = true;
+
+    coap_response = resource->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+
+    coap_response = resource->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    coap_response = resource->handle_put_request(NULL,NULL,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    //free(coap_header->options_list_ptr);
+    free(coap_header->payload_ptr);
+    free(common_stub::coap_header);
+    free(coap_header);
+    delete m2mbase_stub::report;
+    m2mbase_stub::report = NULL;
+    m2mtlvdeserializer_stub::clear();
+    common_stub::clear();
+    m2mbase_stub::clear();
+}
+
+void Test_M2MResource::test_handle_post_request()
+{
+    uint8_t value[] = {"name"};
+    bool execute_value_updated = false;
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
+
+    String *name = new String("name");
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+
+    m2mbase_stub::operation = M2MBase::POST_ALLOWED;
+    m2mbase_stub::uint8_value = 200;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+
+    coap_header->payload_ptr = (uint8_t*)malloc(1);
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->uri_query_ptr = value;
+    coap_header->options_list_ptr->uri_query_len = sizeof(value);
+
+    coap_header->content_format = sn_coap_content_format_e(99);
+
+
+    resource->_delayed_response = true;
+    resource->_delayed_token = (uint8_t*)malloc(1);
+    *resource->_delayed_token  = 2;
+    coap_header->token_ptr = (uint8_t*)malloc(1);
+    *coap_header->token_ptr = 1;
+    coap_header->token_len = 1;
+
+    m2mbase_stub::bool_value = false;
+    m2mresourceinstance_stub::string_value = name;
+
+    CHECK(resource->handle_post_request(NULL,coap_header,handler,execute_value_updated) != NULL);
+
+    coap_header->content_format = sn_coap_content_format_e(0);
+
+    CHECK(resource->handle_post_request(NULL,coap_header,handler,execute_value_updated) != NULL);
+
+    m2mresourceinstance_stub::int_value = sizeof(value);
+    m2mresourceinstance_stub::value = value;
+
+    resource->_delayed_response = false;
+    sn_coap_hdr_s *coap_response = resource->handle_post_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK(coap_response != NULL);
+    free(coap_response->payload_ptr);
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+    CHECK(resource->handle_post_request(NULL,coap_header,handler,execute_value_updated) != NULL);
+
+    CHECK(resource->handle_post_request(NULL,NULL,handler,execute_value_updated) != NULL);
+
+    free(coap_header->token_ptr);
+    free(coap_header->options_list_ptr);
+    free(coap_header->payload_ptr);
+
+    delete name;
+    free(coap_header);
+    free(common_stub::coap_header);
+
+    m2mbase_stub::clear();
+    common_stub::clear();
+}
+
+void Test_M2MResource::test_notification_update()
+{
+    TestReportObserver obs;
+    m2mbase_stub::report = new M2MReportHandler(obs);
+    m2mbase_stub::bool_value = true;
+
+    resource->notification_update();
+
+    delete m2mbase_stub::report;
+    m2mbase_stub::report = NULL;
+}
+
+void Test_M2MResource::test_set_delayed_response()
+{
+    resource->set_delayed_response(true);
+    CHECK(resource->_delayed_response == true);
+}
+
+void Test_M2MResource::test_send_delayed_post_response()
+{
+    resource->_delayed_response = true;
+    m2mbase_stub::observe = handler;
+    CHECK(resource->send_delayed_post_response() == true);
+}
+
+void Test_M2MResource::test_get_delayed_token()
+{
+    uint8_t value[] = {"1"};
+    uint8_t *token = NULL;
+    uint8_t token_len = 0;
+    resource->_delayed_token_len = 1;
+    resource->_delayed_token = (uint8_t*)malloc(sizeof(1));
+    memcpy(resource->_delayed_token,value,1);
+    resource->get_delayed_token(token,token_len);
+    CHECK(token != NULL);
+    free(token);
+
+    token = NULL;
+    token = (uint8_t*)malloc(1);
+    token_len = 1;
+    resource->get_delayed_token(token,token_len);
+    CHECK(token != NULL);
+    free(token);
+
+}
+
+void Test_M2MResource::test_delayed_response()
+{
+    resource->_delayed_response = false;
+    CHECK(resource->delayed_response() == false);
+}
+
+void Test_M2MResource::test_execute_params()
+{
+    M2MResource::M2MExecuteParameter *params = new M2MResource::M2MExecuteParameter();
+    CHECK(params->get_argument_value() == NULL);
+    CHECK(params->get_argument_value_length() == 0);
+    CHECK(params->get_argument_object_name() == "");
+    CHECK(params->get_argument_resource_name() == "");
+    CHECK(params->get_argument_object_instance_id() == 0);
+
+    uint8_t value[] = {"test"};
+    int length = sizeof(value);
+    params->_value = (uint8_t*)malloc(length);
+    memcpy(params->_value,value,length);
+    params->_value_length = length;
+    params->_object_name = "object";
+    params->_resource_name = "resource";
+    params->_object_instance_id = 0;
+    CHECK(params->_value == params->get_argument_value());
+    CHECK(params->_value_length == params->get_argument_value_length());
+    CHECK(params->_resource_name == params->get_argument_resource_name());
+    CHECK(params->_object_name == params->get_argument_object_name());
+    CHECK(params->_object_instance_id == params->get_argument_object_instance_id());
+
+    delete params;
+}
+
+void Test_M2MResource::test_ctor()
+{
+    M2MResource* res = new M2MResource(*m2mobject_stub::inst,&params,M2MResourceInstance::INTEGER,0);
+    delete res;
+}
+
+void Test_M2MResource::test_get_parent_object_instance()
+{
+    M2MResource* res = new M2MResource(*m2mobject_stub::inst,&params,M2MResourceInstance::INTEGER,0);
+
+    // Only for the code coverage
+    res->get_parent_object_instance();
+    delete res;
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mresource/test_m2mresource.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_RESOURCE_H
+#define TEST_M2M_RESOURCE_H
+
+#include "m2mresource.h"
+
+class Callback;
+class Handler;
+
+class Test_M2MResource
+{
+public:
+
+    Test_M2MResource();
+
+    virtual ~Test_M2MResource();
+
+    void test_static_resource();
+
+    void test_base_type();
+
+    void test_muliptle_instances();
+
+    void test_handle_observation_attribute();
+
+    void test_add_resource_instance();
+
+    void test_remove_resource_instance();
+
+    void test_resource_instance();
+
+    void test_resource_instances();
+
+    void test_resource_instance_count();
+
+    void test_add_observation_level();
+
+    void test_remove_observation_level();
+
+    void test_handle_get_request();
+
+    void test_handle_put_request();
+
+    void test_handle_post_request();
+
+    void test_notification_update();
+
+    void test_set_delayed_response();
+
+    void test_send_delayed_post_response();
+
+    void test_get_delayed_token();
+
+    void test_delayed_response();
+
+    void test_execute_params();
+
+    void test_ctor();
+
+    void test_get_parent_object_instance();
+
+    M2MObjectInstance* object_instance;
+    M2MObject* object;
+    M2MResource* resource;
+    Handler* handler;
+};
+
+#endif // TEST_M2M_RESOURCE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mresourceinstance/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mresourceinstance
+        "../../../../source/m2mresourceinstance.cpp"
+        "main.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mtimer_stub.cpp"
+        "../stub/m2mreporthandler_stub.cpp"
+        "../stub/common_stub.cpp"
+        "../stub/m2mtlvdeserializer_stub.cpp"
+        "../stub/m2mblockmessage_stub.cpp"
+        "../stub/m2mobjectinstance_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "../stub/m2mresource_stub.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "m2mresourceinstancetest.cpp"
+        "test_m2mresourceinstance.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2mresourceinstance
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mresourceinstance
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mresourceinstance")
+add_test(m2mresourceinstance ${binary})
+
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mresourceinstance/m2mresourceinstancetest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mresourceinstance.h"
+
+TEST_GROUP(M2MResourceInstance)
+{
+  Test_M2MResourceInstance* m2m_resourceinstance;
+
+  void setup()
+  {
+    m2m_resourceinstance = new Test_M2MResourceInstance();
+  }
+  void teardown()
+  {
+    delete m2m_resourceinstance;
+  }
+};
+
+TEST(M2MResourceInstance, Create)
+{
+    CHECK(m2m_resourceinstance != NULL);
+}
+
+TEST(M2MResourceInstance, test_static_resource_instance)
+{
+    m2m_resourceinstance->test_static_resource_instance();
+}
+
+TEST(M2MResourceInstance, base_type)
+{
+    m2m_resourceinstance->test_base_type();
+}
+
+TEST(M2MResourceInstance, test_handle_observation_attribute)
+{
+    m2m_resourceinstance->test_handle_observation_attribute();
+}
+
+TEST(M2MResourceInstance, test_set_execute_function)
+{
+    m2m_resourceinstance->test_set_execute_function();
+}
+
+TEST(M2MResourceInstance, test_execute)
+{
+    m2m_resourceinstance->test_execute();
+}
+
+TEST(M2MResourceInstance, test_resource_instance_type)
+{
+    m2m_resourceinstance->test_resource_instance_type();
+}
+
+TEST(M2MResourceInstance, test_set_value)
+{
+    m2m_resourceinstance->test_set_value();
+}
+
+TEST(M2MResourceInstance, test_clear_value)
+{
+    m2m_resourceinstance->test_clear_value();
+}
+
+TEST(M2MResourceInstance, test_get_value)
+{
+    m2m_resourceinstance->test_get_value();
+}
+
+TEST(M2MResourceInstance, test_value)
+{
+    m2m_resourceinstance->test_value();
+}
+
+TEST(M2MResourceInstance, test_value_length)
+{
+    m2m_resourceinstance->test_value_length();
+}
+
+TEST(M2MResourceInstance, test_handle_get_request)
+{
+    m2m_resourceinstance->test_handle_get_request();
+}
+
+TEST(M2MResourceInstance, test_handle_put_request)
+{
+    m2m_resourceinstance->test_handle_put_request();
+}
+
+TEST(M2MResourceInstance, test_set_resource_observer)
+{
+    m2m_resourceinstance->test_set_resource_observer();
+}
+
+TEST(M2MResourceInstance, test_get_object_instance_id)
+{
+    m2m_resourceinstance->test_get_object_instance_id();
+}
+
+TEST(M2MResourceInstance, test_get_object_name)
+{
+    m2m_resourceinstance->test_get_object_name();
+}
+
+TEST(M2MResourceInstance, test_set_notification_sent_function)
+{
+    m2m_resourceinstance->test_set_notification_sent_function();
+}
+
+TEST(M2MResourceInstance, test_notification_sent)
+{
+    m2m_resourceinstance->test_notification_sent();
+}
+
+TEST(M2MResourceInstance, test_ctor)
+{
+    m2m_resourceinstance->test_ctor();
+}
+
+TEST(M2MResourceInstance, test_get_parent_resource)
+{
+    m2m_resourceinstance->test_get_parent_resource();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mresourceinstance/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MResourceInstance);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mresourceinstance/test_m2mresourceinstance.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,658 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mresourceinstance.h"
+#include "CppUTest/MemoryLeakDetectorMallocMacros.h"
+#include "m2mbase_stub.h"
+#include "m2mobservationhandler.h"
+#include "m2mreporthandler.h"
+#include "m2mreporthandler_stub.h"
+#include "common_stub.h"
+#include "m2mtlvdeserializer_stub.h"
+#include "m2mblockmessage_stub.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mobject_stub.h"
+#include "m2mresource_stub.h"
+
+static bool cb_visited = false;
+static void callback_function(void *args)
+{
+    cb_visited = true;
+}
+static void global_notification_sent_function()
+{
+    cb_visited = true;
+}
+
+class MyTest{
+public:
+    void execute_function(void */*argument*/) {
+        visited = true;
+    }
+    void block_message_received(M2MBlockMessage */*argument*/) {
+        block_received = true;
+    }
+    void block_message_requested(const String& /*resource*/, uint8_t *&/*data*/, uint32_t &/*len*/) {
+        block_requested = true;
+    }
+    void notification_sent() {
+        visited = true;
+    }
+
+    bool visited;
+    bool block_received;
+    bool block_requested;
+};
+
+class ResourceCallback : public M2MResourceCallback {
+
+public:
+
+    ResourceCallback() : visited(false) {}
+    ~ResourceCallback(){}
+    void notification_update() {
+        visited = true;
+    }
+
+    void clear() {visited = false;}
+    bool visited;
+};
+
+class TestReportObserver :  public M2MReportObserver{
+public :
+    TestReportObserver() {}
+    ~TestReportObserver() {}
+    void observation_to_be_sent(m2m::Vector<uint16_t>,bool){ }
+};
+
+class Handler : public M2MObservationHandler {
+
+public:
+
+    Handler(){}
+    ~Handler(){}
+    void observation_to_be_sent(M2MBase *, uint16_t, m2m::Vector<uint16_t>, bool){
+        visited = true;
+    }
+    void send_delayed_response(M2MBase *){}
+    void resource_to_be_deleted(M2MBase *){visited=true;}
+    void remove_object(M2MBase *){visited = true;}
+    void value_updated(M2MBase *,const String&){visited = true;}
+
+    void clear() {visited = false;}
+    bool visited;
+};
+
+Test_M2MResourceInstance::Test_M2MResourceInstance()
+{
+    handler = new Handler();
+    obj = new M2MObject("name", "name");
+    m2mresource_stub::object_instance = new M2MObjectInstance(*obj, "name", "", "");
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mresource_stub::object_instance,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    resource_instance = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                          "name",
+                          "resource_type",
+                          M2MResourceInstance::STRING,
+                          0,
+                          "name",
+                          false);
+}
+
+Test_M2MResourceInstance::~Test_M2MResourceInstance()
+{
+    delete m2mresource_stub::object_instance;
+    delete m2mobjectinstance_stub::resource;
+    delete resource_instance;
+    delete obj;
+    delete handler;
+}
+
+void Test_M2MResourceInstance::test_resource_instance_type()
+{
+    CHECK(resource_instance->resource_instance_type() == M2MResourceInstance::STRING);
+}
+
+void Test_M2MResourceInstance::test_static_resource_instance()
+{
+    u_int8_t value[] = {"value"};
+    m2mbase_stub::mode_value = M2MBase::Dynamic;
+    M2MResourceInstance *res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                       "name1",
+                                                       "type1",
+                                                       M2MResourceInstance::INTEGER,
+                                                       value, (uint32_t)sizeof(value),
+                                                       0,
+                                                       "name1",
+                                                       false);
+
+    CHECK(res != NULL);
+    delete res;
+    res = NULL;
+
+    m2mbase_stub::mode_value = M2MBase::Static;
+    m2mbase_stub::nsdl_resource = (sn_nsdl_dynamic_resource_parameters_s*)malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
+    m2mbase_stub::nsdl_resource->static_resource_parameters =
+            (sn_nsdl_static_resource_parameters_s*)malloc(sizeof(sn_nsdl_static_resource_parameters_s));
+
+    res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                       "name1",
+                                                       "type1",
+                                                       M2MResourceInstance::INTEGER,
+                                                       value, (uint32_t)sizeof(value),
+                                                       0,
+                                                       "name1",
+                                                       false);
+
+    free(m2mbase_stub::nsdl_resource->static_resource_parameters->resource);
+    free(m2mbase_stub::nsdl_resource->static_resource_parameters);
+    free(m2mbase_stub::nsdl_resource);
+    CHECK(res != NULL);
+    delete res;
+}
+
+void Test_M2MResourceInstance::test_base_type()
+{
+    m2mbase_stub::base_type = M2MBase::Resource;
+    CHECK(M2MBase::Resource == resource_instance->base_type());
+}
+
+void Test_M2MResourceInstance::test_handle_observation_attribute()
+{
+    char *d = "s";
+    TestReportObserver obs;
+    m2mbase_stub::report = new M2MReportHandler(obs);
+
+    CHECK(false == resource_instance->handle_observation_attribute(d));
+
+    resource_instance->_resource_type = M2MResourceInstance::INTEGER;
+    CHECK(false == resource_instance->handle_observation_attribute(d));
+
+    resource_instance->_resource_type = M2MResourceInstance::FLOAT;
+    CHECK(false == resource_instance->handle_observation_attribute(d));
+
+    m2mreporthandler_stub::bool_return = true;
+    CHECK(true == resource_instance->handle_observation_attribute(d));
+
+    m2mbase_stub::bool_value = false;
+    CHECK(true == resource_instance->handle_observation_attribute(d));
+
+    delete m2mbase_stub::report;
+    m2mbase_stub::report = NULL;
+}
+
+void Test_M2MResourceInstance::test_set_execute_function()
+{
+    MyTest test;
+    resource_instance->set_execute_function(execute_callback(&test,&MyTest::execute_function));
+    resource_instance->set_execute_function(callback_function);
+}
+
+void Test_M2MResourceInstance::test_execute()
+{
+    MyTest test;
+    void *args = NULL;
+
+    resource_instance->set_execute_function(execute_callback(&test,&MyTest::execute_function));
+    resource_instance->execute(args);
+
+    cb_visited = false;
+    resource_instance->set_execute_function(callback_function);
+    resource_instance->execute(args);
+    CHECK(true == cb_visited);
+
+    // Check delete
+    cb_visited = false;
+    resource_instance->set_execute_function(callback_function);
+    resource_instance->execute(args);
+    CHECK(true == cb_visited);
+}
+
+void Test_M2MResourceInstance::test_set_value()
+{
+    u_int8_t value[] = {"value2"};
+    resource_instance->_value = (u_int8_t*)malloc(sizeof(u_int8_t));
+    m2mbase_stub::bool_value = true;
+
+    CHECK(resource_instance->set_value(value,(u_int32_t)sizeof(value)) == true);
+    CHECK( resource_instance->_value_length == sizeof(value));
+    CHECK( *resource_instance->_value == *value);
+
+    m2mbase_stub::observe = (M2MObservationHandler*)handler;
+
+    u_int8_t value2[] = {"12"};
+    CHECK(resource_instance->set_value(value2,(u_int32_t)sizeof(value2)) == true);
+
+    u_int8_t value3[] = {"13"};
+    CHECK(resource_instance->set_value(value3,(u_int32_t)sizeof(value3)) == true);
+
+    CHECK(resource_instance->set_value(123456789) == true);
+    CHECK(memcmp(resource_instance->_value, "123456789", 9) == 0);
+
+    // verify int value helper
+    CHECK(resource_instance->get_value_int() == 123456789);
+
+    // verify string value helper
+    CHECK(resource_instance->get_value_string() == "123456789");
+
+    free(resource_instance->_value);
+    resource_instance->_value_length = 0;
+
+    CHECK(resource_instance->set_value(NULL,0) == false);
+
+    CHECK(resource_instance->set_value(NULL,0) == false);
+
+    m2mbase_stub::observation_level_value = M2MBase::R_Attribute;
+    resource_instance->_value = (u_int8_t*)malloc(sizeof(value)+1);
+    memset(resource_instance->_value,0,sizeof(value)+1);
+    memcpy(resource_instance->_value,value,sizeof(value));
+    resource_instance->_value_length = sizeof(value);
+    TestReportObserver obs;
+    m2mbase_stub::report = new M2MReportHandler(obs);
+
+    u_int8_t value4[] = {"value4"};
+    CHECK(resource_instance->set_value(value4,(u_int32_t)sizeof(value4)) == true);
+
+
+    m2mbase_stub::base_type = M2MBase::ResourceInstance;
+    m2mbase_stub::observation_level_value = M2MBase::O_Attribute;
+    resource_instance->_resource_type = M2MResourceInstance::INTEGER;
+    m2mbase_stub::mode_value = M2MBase::Dynamic;
+    ResourceCallback *resource_cb = new ResourceCallback();
+    resource_instance->set_resource_observer(resource_cb);
+    CHECK(resource_instance->set_value(value2,(u_int32_t)sizeof(value2)) == true);
+
+    // XXX: the callback will not be called on current code with combination of
+    // M2MBase::Dynamic and M2MBase::R_Attribute.
+    CHECK(resource_cb->visited == false);
+
+    resource_cb->visited = false;
+    m2mbase_stub::observation_level_value = M2MBase::R_Attribute;
+    CHECK(resource_instance->set_value(value3,(u_int32_t)sizeof(value3)) == true);
+    CHECK(resource_cb->visited == true);
+
+    resource_instance->set_resource_observer(NULL);
+    resource_cb->visited = false;
+    m2mbase_stub::observation_level_value = M2MBase::R_Attribute;
+    CHECK(resource_instance->set_value(value2,(u_int32_t)sizeof(value2)) == true);
+    CHECK(resource_cb->visited == false);
+
+
+    CHECK(resource_instance->set_value(value3,(u_int32_t)sizeof(value3)) == true);
+
+    m2mbase_stub::observation_level_value = M2MBase::OI_Attribute;
+
+    resource_instance->_resource_type = M2MResourceInstance::INTEGER;
+
+    m2mbase_stub::mode_value = M2MBase::Dynamic;
+
+    CHECK(resource_instance->set_value(value2,(u_int32_t)sizeof(value2)) == true);
+
+    m2mbase_stub::observation_level_value = M2MBase::OOI_Attribute;
+
+    resource_instance->_resource_type = M2MResourceInstance::INTEGER;
+
+    m2mbase_stub::mode_value = M2MBase::Dynamic;
+
+    CHECK(resource_instance->set_value(value2,(u_int32_t)sizeof(value2)) == true);
+
+    delete m2mbase_stub::report;
+    m2mbase_stub::report = NULL;
+    delete resource_cb;
+}
+
+void Test_M2MResourceInstance::test_clear_value()
+{
+    u_int8_t value[] = {"value"};
+    resource_instance->_value = (u_int8_t*)malloc(sizeof(u_int8_t));
+
+    m2mbase_stub::observe = handler;
+    TestReportObserver obs;
+    m2mbase_stub::report = new M2MReportHandler(obs);
+
+    CHECK(resource_instance->set_value(value,(u_int32_t)sizeof(value)) == true);
+    CHECK( resource_instance->_value_length == sizeof(value));
+    CHECK( *resource_instance->_value == *value);
+    resource_instance->clear_value();
+
+    CHECK( resource_instance->_value_length == 0);
+    CHECK( resource_instance->_value == NULL);
+
+    m2mbase_stub::bool_value = true;
+    m2mbase_stub::mode_value = M2MBase::Dynamic;
+    m2mbase_stub::observation_level_value = M2MBase::R_Attribute;
+    resource_instance->_resource_type = M2MResourceInstance::INTEGER;
+    resource_instance->clear_value();
+
+    CHECK( resource_instance->_value_length == 0);
+    CHECK( resource_instance->_value == NULL);
+
+    delete m2mbase_stub::report;
+    m2mbase_stub::report = NULL;
+}
+
+void Test_M2MResourceInstance::test_get_value()
+{
+    u_int8_t test_value[] = {"value3"};
+    u_int32_t value_length((u_int32_t)sizeof(test_value));
+
+    resource_instance->_value = (u_int8_t *)malloc(value_length);
+    resource_instance->_value_length = value_length;
+    memcpy((u_int8_t *)resource_instance->_value, (u_int8_t *)test_value, value_length);
+
+    uint8_t* buffer = (uint8_t*)malloc(5);
+    uint32_t val_size = 0;
+    resource_instance->get_value(buffer, val_size);
+    CHECK(val_size == value_length);
+    free(buffer);
+
+    resource_instance->clear_value();
+    CHECK(resource_instance->_value == NULL);
+
+
+}
+
+void Test_M2MResourceInstance::test_value()
+{
+    CHECK(resource_instance->value() == NULL);
+}
+
+void Test_M2MResourceInstance::test_value_length()
+{
+    CHECK(resource_instance->value_length() == 0);
+}
+
+void Test_M2MResourceInstance::test_handle_get_request()
+{
+    uint8_t value[] = {"name"};
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_GET;
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+
+    m2mbase_stub::operation = M2MBase::GET_ALLOWED;
+    m2mbase_stub::uint8_value = 200;
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+
+    coap_header->token_ptr = (uint8_t*)malloc(sizeof(value));
+    memcpy(coap_header->token_ptr, value, sizeof(value));
+
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->observe = 0;
+
+    coap_header->content_format = sn_coap_content_format_e(110);
+
+    CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    MyTest test;
+    test.block_requested = false;
+    resource_instance->set_incoming_block_message_callback(
+                incoming_block_message_callback(&test, &MyTest::block_message_received));
+    resource_instance->set_outgoing_block_message_callback(
+        outgoing_block_message_callback(&test,&MyTest::block_message_requested));
+    m2mblockmessage_stub::is_block_message = true;
+    CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+    CHECK(test.block_requested == true);
+    m2mblockmessage_stub::is_block_message = false;
+
+    // OMA OPAQUE
+    resource_instance->_resource_type = M2MResourceInstance::OPAQUE;
+
+    CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // Not OMA TLV or JSON
+    m2mbase_stub::uint8_value = 110;
+    CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // OMA TLV
+    m2mbase_stub::uint8_value = 99;
+    CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+    // OMA JSON
+    m2mbase_stub::uint8_value = 100;
+    CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    coap_header->options_list_ptr->observe = 0;
+    m2mbase_stub::uint16_value = 0x1c1c;
+    m2mbase_stub::bool_value = true;
+
+    CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    // Not observable
+    m2mbase_stub::bool_value = false;
+    CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    m2mbase_stub::bool_value = true;
+
+    coap_header->options_list_ptr->observe = 0;
+
+    CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    coap_header->options_list_ptr->observe = 1;
+    CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+    CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
+
+    CHECK(resource_instance->handle_get_request(NULL,NULL,handler) != NULL);
+
+    if(coap_header->token_ptr) {
+        free(coap_header->token_ptr);
+        coap_header->token_ptr = NULL;
+    }
+    if(coap_header->options_list_ptr) {
+        free(coap_header->options_list_ptr);
+        coap_header->options_list_ptr = NULL;
+    }
+
+    if(common_stub::coap_header){
+        if(common_stub::coap_header->options_list_ptr) {
+            free(common_stub::coap_header->options_list_ptr);
+            common_stub::coap_header->options_list_ptr = NULL;
+        }
+        free(common_stub::coap_header);
+        common_stub::coap_header = NULL;
+    }
+    free(coap_header);
+    coap_header = NULL;
+
+    m2mbase_stub::clear();
+    common_stub::clear();
+}
+
+void Test_M2MResourceInstance::test_handle_put_request()
+{
+    uint8_t value[] = {"name"};
+    bool execute_value_updated = false;
+    sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
+    memset(coap_header, 0, sizeof(sn_coap_hdr_s));
+
+    coap_header->uri_path_ptr = value;
+    coap_header->uri_path_len = sizeof(value);
+
+    coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
+
+    common_stub::int_value = 0;
+    m2mbase_stub::string_value = "name";
+
+    m2mbase_stub::operation = M2MBase::PUT_ALLOWED;
+    m2mbase_stub::uint8_value = 200;
+
+    common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
+    memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
+
+    coap_header->payload_ptr = (uint8_t*)malloc(1);
+
+    coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
+    coap_header->options_list_ptr->uri_query_ptr = value;
+    coap_header->options_list_ptr->uri_query_len = sizeof(value);
+
+    coap_header->content_format = sn_coap_content_format_e(99);
+    m2mtlvdeserializer_stub::bool_value = true;
+
+    m2mbase_stub::bool_value = false;
+
+    sn_coap_hdr_s *coap_response = NULL;
+    coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    free(coap_header->options_list_ptr);
+    coap_header->options_list_ptr = NULL;
+
+    coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK( coap_response != NULL);
+
+    m2mtlvdeserializer_stub::bool_value = false;
+
+    coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    coap_header->content_format = sn_coap_content_format_e(100);
+
+    coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    m2mbase_stub::bool_value = true;
+
+    coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+
+    coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    coap_response = resource_instance->handle_put_request(NULL,NULL,handler,execute_value_updated);
+
+    CHECK( coap_response != NULL);
+
+    MyTest test;
+    test.block_received = false;
+    m2mbase_stub::operation = M2MBase::PUT_ALLOWED;
+    m2mblockmessage_stub::is_block_message = true;
+    m2mblockmessage_stub::is_last_block = false;
+    resource_instance->set_incoming_block_message_callback(
+                incoming_block_message_callback(&test, &MyTest::block_message_received));
+    coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK(test.block_received == true);
+    CHECK( coap_response != NULL);
+
+    test.block_received = false;
+    m2mblockmessage_stub::is_block_message = true;
+    m2mblockmessage_stub::is_last_block = true;
+    coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK(test.block_received == true);
+    CHECK( coap_response != NULL);
+
+    test.block_received = false;
+    m2mblockmessage_stub::is_block_message = false;
+    m2mblockmessage_stub::is_last_block = false;
+    coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
+    CHECK(test.block_received == false);
+    CHECK( coap_response != NULL);
+
+    free(coap_header->options_list_ptr);
+    free(coap_header->payload_ptr);
+    free(common_stub::coap_header);
+    free(coap_header);
+
+    m2mtlvdeserializer_stub::clear();
+    common_stub::clear();
+    m2mbase_stub::clear();
+}
+
+void Test_M2MResourceInstance::test_set_resource_observer()
+{
+    ResourceCallback *resource_cb = new ResourceCallback();
+    resource_instance->set_resource_observer(resource_cb);
+    CHECK(resource_instance->_resource_callback == resource_cb)
+    delete resource_cb;
+}
+
+
+void Test_M2MResourceInstance::test_get_object_name()
+{
+    m2mbase_stub::string_value = "name";
+    CHECK(resource_instance->object_name() == "name");
+}
+
+void Test_M2MResourceInstance::test_get_object_instance_id()
+{
+    resource_instance->_object_instance_id = 100;
+    CHECK(resource_instance->object_instance_id() == 100);
+}
+
+void Test_M2MResourceInstance::test_set_notification_sent_function()
+{
+    MyTest test;
+    resource_instance->set_notification_sent_callback(
+                notification_sent_callback(&test,&MyTest::notification_sent));
+    resource_instance->set_notification_sent_callback(global_notification_sent_function);
+}
+
+void Test_M2MResourceInstance::test_notification_sent()
+{
+    MyTest test;
+    void *args = NULL;
+
+    resource_instance->set_notification_sent_callback(
+                notification_sent_callback(&test,&MyTest::notification_sent));
+    resource_instance->notification_sent();
+
+    cb_visited = false;
+    resource_instance->set_notification_sent_callback(global_notification_sent_function);
+    resource_instance->notification_sent();
+    CHECK(true == cb_visited);
+
+    // Check delete
+    cb_visited = false;
+    resource_instance->set_notification_sent_callback(global_notification_sent_function);
+    resource_instance->notification_sent();
+    CHECK(true == cb_visited);
+}
+
+void Test_M2MResourceInstance::test_ctor()
+{
+    M2MResourceInstance* instance = new M2MResourceInstance(*m2mobjectinstance_stub::resource, &params,
+                                                            M2MResourceInstance::STRING, 0);
+    CHECK(instance != NULL);
+    delete instance;
+}
+
+void Test_M2MResourceInstance::test_get_parent_resource()
+{
+    M2MResourceInstance* instance = new M2MResourceInstance(*m2mobjectinstance_stub::resource, &params,
+                                                            M2MResourceInstance::STRING, 0);
+    // Only for the code coverage
+    instance->get_parent_resource();
+    delete instance;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mresourceinstance/test_m2mresourceinstance.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_RESOURCE_INSTANCE_H
+#define TEST_M2M_RESOURCE_INSTANCE_H
+
+#include "m2mresourceinstance.h"
+
+class Handler;
+class Callback;
+class ResourceCallback;
+
+class Test_M2MResourceInstance
+{
+public:
+    Test_M2MResourceInstance();
+
+    ~Test_M2MResourceInstance();
+
+    void test_static_resource_instance();
+
+    void test_base_type();
+
+    void test_resource_instance_type();
+
+    void test_handle_observation_attribute();
+
+    void test_set_execute_function();
+
+    void test_execute();
+
+    void test_set_value();
+
+    void test_clear_value();
+
+    void test_get_value();
+
+    void test_value();
+
+    void test_value_length();
+
+    void test_handle_get_request();
+
+    void test_handle_put_request();
+
+    void test_set_resource_observer();
+
+    void test_get_object_name();
+
+    void test_get_object_instance_id();
+
+    void test_set_notification_sent_function();
+
+    void test_notification_sent();
+
+    void test_ctor();
+
+    void test_get_parent_resource();
+
+    M2MResourceInstance* resource_instance;
+
+    M2MObject* obj;
+    Callback *callback;
+
+    Handler* handler;
+};
+
+#endif // TEST_M2M_RESOURCE_INSTANCE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2msecurity/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,28 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2msecurity
+        "main.cpp"
+        "m2msecuritytest.cpp"
+        "test_m2msecurity.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mobjectinstance_stub.cpp"
+        "../stub/m2mresource_stub.cpp"
+        "../stub/m2mresourceinstance_stub.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "../../../../source/m2msecurity.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2msecurity
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2msecurity
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+
+set(binary "m2msecurity")
+add_test(m2msecurity ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2msecurity/m2msecuritytest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2msecurity.h"
+
+TEST_GROUP(M2MSecurity)
+{
+  Test_M2MSecurity* m2m_security;
+
+  void setup()
+  {
+    m2m_security = new Test_M2MSecurity();
+  }
+  void teardown()
+  {
+    delete m2m_security;
+  }
+};
+
+TEST(M2MSecurity, Create)
+{
+    CHECK(m2m_security != NULL);
+}
+
+TEST(M2MSecurity, create_resource_int)
+{
+    m2m_security->test_create_resource_int();
+}
+
+TEST(M2MSecurity, delete_resource)
+{
+    m2m_security->test_delete_resource();
+}
+
+TEST(M2MSecurity, set_resource_value_int)
+{
+    m2m_security->test_set_resource_value_int();
+}
+
+TEST(M2MSecurity, set_resource_value_string)
+{
+    m2m_security->test_set_resource_value_string();
+}
+
+TEST(M2MSecurity, set_resource_value_buffer)
+{
+    m2m_security->test_set_resource_value_buffer();
+}
+
+TEST(M2MSecurity, resource_value_int)
+{
+    m2m_security->test_resource_value_int();
+}
+
+TEST(M2MSecurity, resource_value_string)
+{
+    m2m_security->test_resource_value_string();
+}
+
+TEST(M2MSecurity, resource_value_buffer)
+{
+    m2m_security->test_resource_value_buffer();
+}
+
+TEST(M2MSecurity, is_resource_present)
+{
+    m2m_security->test_is_resource_present();
+}
+
+TEST(M2MSecurity, total_resource_count)
+{
+    m2m_security->test_total_resource_count();
+}
+
+TEST(M2MSecurity, m2m_server_constructor)
+{
+    m2m_security->test_m2m_server_constructor();
+}
+
+TEST(M2MSecurity, server_type)
+{
+    m2m_security->test_server_type();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2msecurity/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MSecurity);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2msecurity/test_m2msecurity.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,405 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2msecurity.h"
+#include "m2mobject_stub.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mresource_stub.h"
+#include "m2mresourceinstance_stub.h"
+#include "m2mbase_stub.h"
+#include "nsdlaccesshelper_stub.h"
+
+Test_M2MSecurity::Test_M2MSecurity()
+{
+    M2MObject* obj = new M2MObject("name", "name");
+    m2mobject_stub::inst = new M2MObjectInstance(*obj,"name","type", "name");
+    m2mresource_stub::bool_value = true;
+    m2mobjectinstance_stub::create_resource = new M2MResource(*m2mobject_stub::inst,
+                                                              "name",
+                                                              "type",
+                                                              M2MResourceInstance::STRING,
+                                                              false,
+                                                              "name");
+    security = new M2MSecurity(M2MSecurity::Bootstrap);
+
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+
+    delete obj;
+}
+
+Test_M2MSecurity::~Test_M2MSecurity()
+{
+    delete m2mobject_stub::inst;
+    m2mobject_stub::inst = NULL;
+    m2mobject_stub::clear();
+    m2mobjectinstance_stub::clear();
+    m2mresource_stub::clear();
+    m2mbase_stub::clear();
+    delete security;
+}
+
+void Test_M2MSecurity::test_create_resource_int()
+{
+    m2mobjectinstance_stub::create_resource = new M2MResource(*m2mobject_stub::inst,
+                                                              "name",
+                                                              "type",
+                                                              M2MResourceInstance::STRING,
+                                                              false,
+                                                              "name");
+
+    CHECK(security->create_resource(M2MSecurity::M2MServerUri,10) == NULL);
+    CHECK(security->create_resource(M2MSecurity::BootstrapServer,10) == NULL);
+    CHECK(security->create_resource(M2MSecurity::SecurityMode,10) == NULL);
+    CHECK(security->create_resource(M2MSecurity::PublicKey,10) == NULL);
+    CHECK(security->create_resource(M2MSecurity::ServerPublicKey,10) == NULL);
+    CHECK(security->create_resource(M2MSecurity::Secretkey,10) == NULL);
+    CHECK(security->create_resource(M2MSecurity::SMSBindingKey,10) == NULL);
+    CHECK(security->create_resource(M2MSecurity::SMSBindingSecretKey,10) == NULL);
+
+    CHECK(security->create_resource(M2MSecurity::M2MServerSMSNumber,10) != NULL);
+    CHECK(security->create_resource(M2MSecurity::ShortServerID,10) != NULL);
+    CHECK(security->create_resource(M2MSecurity::ClientHoldOffTime,10) != NULL);
+    CHECK(security->create_resource(M2MSecurity::SMSSecurityMode,10) != NULL);
+
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+}
+
+void Test_M2MSecurity::test_delete_resource()
+{
+    m2mresourceinstance_stub::bool_value = true;
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                      "name",
+                                                      "type",
+                                                      M2MResourceInstance::STRING,
+                                                      false,
+                                                      "name");
+
+    CHECK(security->delete_resource(M2MSecurity::SMSBindingSecretKey) == false);
+    CHECK(security->delete_resource(M2MSecurity::SMSBindingKey) == false);
+    CHECK(security->delete_resource(M2MSecurity::M2MServerUri) == false);
+    CHECK(security->delete_resource(M2MSecurity::Secretkey) == false);
+    CHECK(security->delete_resource(M2MSecurity::ServerPublicKey) == false);
+    CHECK(security->delete_resource(M2MSecurity::BootstrapServer) == false);
+    CHECK(security->delete_resource(M2MSecurity::PublicKey) == false);
+    CHECK(security->delete_resource(M2MSecurity::SecurityMode) == false);
+
+    m2mobjectinstance_stub::bool_value = true;
+
+    CHECK(security->delete_resource(M2MSecurity::M2MServerSMSNumber) == true);
+    CHECK(security->delete_resource(M2MSecurity::ShortServerID) == true);
+    CHECK(security->delete_resource(M2MSecurity::ClientHoldOffTime) == true);
+    CHECK(security->delete_resource(M2MSecurity::SMSSecurityMode) == true);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+}
+
+void Test_M2MSecurity::test_set_resource_value_string()
+{
+    m2mresourceinstance_stub::bool_value = true;
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    CHECK(security->set_resource_value(M2MSecurity::M2MServerUri,"test") == true);
+
+    CHECK(security->set_resource_value(M2MSecurity::M2MServerSMSNumber,"test") == false);
+    CHECK(security->set_resource_value(M2MSecurity::ShortServerID,"test") == false);
+    CHECK(security->set_resource_value(M2MSecurity::SMSBindingKey,"test") == false);
+    CHECK(security->set_resource_value(M2MSecurity::SMSBindingSecretKey,"test") == false);
+    CHECK(security->set_resource_value(M2MSecurity::ClientHoldOffTime,"test") == false);
+    CHECK(security->set_resource_value(M2MSecurity::SMSSecurityMode,"test") == false);
+    CHECK(security->set_resource_value(M2MSecurity::Secretkey,"test") == false);
+    CHECK(security->set_resource_value(M2MSecurity::ServerPublicKey,"test") == false);
+    CHECK(security->set_resource_value(M2MSecurity::PublicKey,"test") == false);
+    CHECK(security->set_resource_value(M2MSecurity::BootstrapServer,"test") == false);
+    CHECK(security->set_resource_value(M2MSecurity::SecurityMode,"test") == false);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+}
+
+void Test_M2MSecurity::test_set_resource_value_int()
+{
+    m2mresourceinstance_stub::bool_value = true;
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    CHECK(security->set_resource_value(M2MSecurity::M2MServerUri,10) == false);
+    CHECK(security->set_resource_value(M2MSecurity::SMSBindingKey,10) == false);
+    CHECK(security->set_resource_value(M2MSecurity::SMSBindingSecretKey,10) == false);
+    CHECK(security->set_resource_value(M2MSecurity::Secretkey,10) == false);
+    CHECK(security->set_resource_value(M2MSecurity::ServerPublicKey,10) == false);
+    CHECK(security->set_resource_value(M2MSecurity::PublicKey,10) == false);
+    CHECK(security->set_resource_value(M2MSecurity::BootstrapServer,10) == false);
+
+    CHECK(security->set_resource_value(M2MSecurity::SecurityMode,10) == true);
+    CHECK(security->set_resource_value(M2MSecurity::SMSSecurityMode,10) == true);
+    CHECK(security->set_resource_value(M2MSecurity::M2MServerSMSNumber,10) == true);
+    CHECK(security->set_resource_value(M2MSecurity::ShortServerID,10) == true);
+    CHECK(security->set_resource_value(M2MSecurity::ClientHoldOffTime,10) == true);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+}
+
+void Test_M2MSecurity::test_set_resource_value_buffer()
+{
+    m2mresourceinstance_stub::bool_value = true;
+
+    uint8_t value[] = {"value"};
+    uint16_t length = (uint16_t)sizeof(value);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    CHECK(security->set_resource_value(M2MSecurity::Secretkey,value,length) == true);
+    CHECK(security->set_resource_value(M2MSecurity::ServerPublicKey,value,length) == true);
+    CHECK(security->set_resource_value(M2MSecurity::PublicKey,value,length) == true);
+
+    CHECK(security->set_resource_value(M2MSecurity::M2MServerUri,value,length) == false);
+    CHECK(security->set_resource_value(M2MSecurity::SMSBindingKey,value,length) == false);
+    CHECK(security->set_resource_value(M2MSecurity::SMSBindingSecretKey,value,length) == false);
+    CHECK(security->set_resource_value(M2MSecurity::BootstrapServer,value,length) == false);
+
+    CHECK(security->set_resource_value(M2MSecurity::SecurityMode,value,length) == false);
+    CHECK(security->set_resource_value(M2MSecurity::SMSSecurityMode,value,length) == false);
+    CHECK(security->set_resource_value(M2MSecurity::M2MServerSMSNumber,value,length) == false);
+    CHECK(security->set_resource_value(M2MSecurity::ShortServerID,value,length) == false);
+    CHECK(security->set_resource_value(M2MSecurity::ClientHoldOffTime,value,length) == false);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+}
+
+void Test_M2MSecurity::test_resource_value_int()
+{
+    m2mresourceinstance_stub::bool_value = true;
+
+    uint8_t value[] = {"10"};
+    //m2mresourceinstance_stub::value = (uint8_t*)malloc((uint32_t)sizeof(value));
+    uint8_t size = 0;
+    m2mresourceinstance_stub::value = String::convert_integer_to_array(10,size);
+    /*memset(m2mresourceinstance_stub::value,0,(uint32_t)size);
+    memcpy(m2mresourceinstance_stub::value, 10, size);*/
+    m2mresourceinstance_stub::int_value = (uint16_t)size;
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    CHECK(security->resource_value_int(M2MSecurity::SecurityMode) == 10);
+    CHECK(security->resource_value_int(M2MSecurity::SMSSecurityMode) == 10);
+    CHECK(security->resource_value_int(M2MSecurity::M2MServerSMSNumber) == 10);
+    CHECK(security->resource_value_int(M2MSecurity::ShortServerID) == 10);
+    CHECK(security->resource_value_int(M2MSecurity::ClientHoldOffTime) == 10);
+    CHECK(security->resource_value_int(M2MSecurity::BootstrapServer) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::PublicKey) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::ServerPublicKey) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::Secretkey) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::SMSBindingSecretKey) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::SMSBindingKey) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::M2MServerUri) == 0);
+
+    security->clear_resources();
+    CHECK(security->resource_value_int(M2MSecurity::SecurityMode) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::SMSSecurityMode) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::M2MServerSMSNumber) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::ShortServerID) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::ClientHoldOffTime) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::BootstrapServer) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::PublicKey) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::ServerPublicKey) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::Secretkey) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::SMSBindingSecretKey) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::SMSBindingKey) == 0);
+    CHECK(security->resource_value_int(M2MSecurity::M2MServerUri) == 0);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+}
+
+void Test_M2MSecurity::test_resource_value_string()
+{
+    m2mresourceinstance_stub::bool_value = true;
+    String test = "string";
+    uint8_t value[] = {"string"};
+    m2mresourceinstance_stub::value = (uint8_t*)malloc((uint32_t)sizeof(value));
+    memset(m2mresourceinstance_stub::value,0,(uint32_t)sizeof(value));
+    memcpy(m2mresourceinstance_stub::value,value,sizeof(value));
+    m2mresourceinstance_stub::int_value = (uint16_t)sizeof(value);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    CHECK(security->resource_value_string(M2MSecurity::M2MServerUri) == test);
+
+    CHECK(security->resource_value_string(M2MSecurity::SMSBindingKey) == "");
+    CHECK(security->resource_value_string(M2MSecurity::SMSBindingSecretKey) == "");
+    CHECK(security->resource_value_string(M2MSecurity::Secretkey) == "");
+    CHECK(security->resource_value_string(M2MSecurity::ServerPublicKey) == "");
+    CHECK(security->resource_value_string(M2MSecurity::PublicKey) == "");
+    CHECK(security->resource_value_string(M2MSecurity::BootstrapServer) == "");
+    CHECK(security->resource_value_string(M2MSecurity::ClientHoldOffTime) == "");
+    CHECK(security->resource_value_string(M2MSecurity::ShortServerID) == "");
+    CHECK(security->resource_value_string(M2MSecurity::M2MServerSMSNumber) == "");
+    CHECK(security->resource_value_string(M2MSecurity::SMSSecurityMode) == "");
+    CHECK(security->resource_value_string(M2MSecurity::SecurityMode) == "");
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+}
+
+void Test_M2MSecurity::test_resource_value_buffer()
+{
+    m2mresourceinstance_stub::bool_value = true;
+
+    uint8_t value[] = {"buffer"};
+    uint8_t *out_value = NULL;
+
+    m2mresourceinstance_stub::value = (uint8_t*)malloc((uint32_t)sizeof(value));
+    memset(m2mresourceinstance_stub::value,0,(uint32_t)sizeof(value));
+    memcpy(m2mresourceinstance_stub::value,value,sizeof(value));
+    m2mresourceinstance_stub::int_value = (uint16_t)sizeof(value);
+
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    CHECK(security->resource_value_buffer(M2MSecurity::Secretkey,out_value) != 0);
+    CHECK(security->resource_value_buffer(M2MSecurity::ServerPublicKey,out_value) != 0);
+    CHECK(security->resource_value_buffer(M2MSecurity::PublicKey,out_value) != 0);
+
+    CHECK(security->resource_value_buffer(M2MSecurity::M2MServerUri,out_value) == 0);
+
+    CHECK(security->resource_value_buffer(M2MSecurity::SMSBindingKey,out_value) == 0);
+    CHECK(security->resource_value_buffer(M2MSecurity::SMSBindingSecretKey,out_value) == 0);
+    CHECK(security->resource_value_buffer(M2MSecurity::BootstrapServer,out_value) == 0);
+    CHECK(security->resource_value_buffer(M2MSecurity::ClientHoldOffTime,out_value) == 0);
+    CHECK(security->resource_value_buffer(M2MSecurity::ShortServerID,out_value) == 0);
+    CHECK(security->resource_value_buffer(M2MSecurity::M2MServerSMSNumber,out_value) == 0);
+    CHECK(security->resource_value_buffer(M2MSecurity::SMSSecurityMode,out_value) == 0);
+    CHECK(security->resource_value_buffer(M2MSecurity::SecurityMode,out_value) == 0);
+
+    const uint8_t *outvalue = NULL;
+    CHECK(security->resource_value_buffer(M2MSecurity::Secretkey,outvalue) != 0);
+    CHECK(security->resource_value_buffer(M2MSecurity::ServerPublicKey,outvalue) != 0);
+    CHECK(security->resource_value_buffer(M2MSecurity::PublicKey,outvalue) != 0);
+
+    free(out_value);
+    out_value = NULL;
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+}
+
+void Test_M2MSecurity::test_is_resource_present()
+{
+    m2mobjectinstance_stub::resource = new M2MResource(*m2mobject_stub::inst,
+                                                       "name",
+                                                       "type",
+                                                       M2MResourceInstance::STRING,
+                                                       false,
+                                                       "name");
+
+    CHECK(security->is_resource_present(M2MSecurity::M2MServerUri) == true);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    CHECK(security->is_resource_present(M2MSecurity::ClientHoldOffTime) == false);
+}
+
+void Test_M2MSecurity::test_total_resource_count()
+{
+    M2MResource *res = new M2MResource(*m2mobject_stub::inst,
+                                       "name",
+                                       "type",
+                                       M2MResourceInstance::STRING,
+                                       false,
+                                       "name");
+
+    m2mobjectinstance_stub::resource_list.push_back(res);
+    M2MResource *res2 = new M2MResource(*m2mobject_stub::inst,
+                                        "name",
+                                        "type",
+                                        M2MResourceInstance::STRING,
+                                        false,
+                                        "name");
+
+    m2mobjectinstance_stub::resource_list.push_back(res2);
+
+    CHECK(security->total_resource_count() == 2);
+
+    m2mobjectinstance_stub::resource_list.clear();
+
+    delete res2;
+    delete res;
+}
+
+void Test_M2MSecurity::test_m2m_server_constructor()
+{
+    m2mobjectinstance_stub::create_resource = new M2MResource(*m2mobject_stub::inst,
+                                                              "name",
+                                                              "type",
+                                                              M2MResourceInstance::STRING,
+                                                              false,
+                                                              "name");
+
+    M2MSecurity* sec = new M2MSecurity(M2MSecurity::M2MServer);
+    CHECK(M2MSecurity::M2MServer == sec->server_type());
+
+    delete sec;
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+}
+
+void Test_M2MSecurity::test_server_type()
+{
+    CHECK(M2MSecurity::Bootstrap ==security->server_type());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2msecurity/test_m2msecurity.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_SECURITY_H
+#define TEST_M2M_SECURITY_H
+
+#include "m2msecurity.h"
+
+class Callback;
+
+class Test_M2MSecurity
+{
+public:
+    Test_M2MSecurity();
+    virtual ~Test_M2MSecurity();
+
+    void test_create_resource_int();
+
+    void test_create_resource_string();
+
+    void test_delete_resource();
+
+    void test_set_resource_value_int();
+
+    void test_set_resource_value_string();
+
+    void test_set_resource_value_buffer();
+
+    void test_resource_value_int();
+
+    void test_resource_value_string();
+
+    void test_resource_value_buffer();
+
+    void test_is_resource_present();
+
+    void test_total_resource_count();
+
+    void test_m2m_server_constructor();
+
+    void test_server_type();
+
+    M2MSecurity* security;
+};
+
+#endif // TEST_M2M_SECURITY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mserver/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,28 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mserver
+        "main.cpp"
+        "m2mservertest.cpp"
+        "test_m2mserver.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mobjectinstance_stub.cpp"
+        "../stub/m2mresource_stub.cpp"
+        "../stub/m2mresourceinstance_stub.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "../../../../source/m2mserver.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+
+target_link_libraries(m2mserver
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mserver
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mserver")
+add_test(m2mserver ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mserver/m2mservertest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mserver.h"
+
+TEST_GROUP(M2MServer)
+{
+  Test_M2MServer* m2m_server;
+
+  void setup()
+  {
+    m2m_server = new Test_M2MServer();
+  }
+  void teardown()
+  {
+    delete m2m_server;
+  }
+};
+
+TEST(M2MServer, Create)
+{
+    CHECK(m2m_server->server != NULL);
+}
+
+TEST(M2MServer, create_resource_int)
+{
+    m2m_server->test_create_resource_int();
+}
+
+TEST(M2MServer, create_resource)
+{
+    m2m_server->test_create_resource();
+}
+
+TEST(M2MServer, delete_resource)
+{
+    m2m_server->test_delete_resource();
+}
+
+TEST(M2MServer, set_resource_value_int)
+{
+    m2m_server->test_set_resource_value_int();
+}
+
+TEST(M2MServer, set_resource_value_string)
+{
+    m2m_server->test_set_resource_value_string();
+}
+
+TEST(M2MServer, resource_value_int)
+{
+    m2m_server->test_resource_value_int();
+}
+
+TEST(M2MServer, resource_value_string)
+{
+    m2m_server->test_resource_value_string();
+}
+
+TEST(M2MServer, is_resource_present)
+{
+    m2m_server->test_is_resource_present();
+}
+
+TEST(M2MServer, total_resource_count)
+{
+    m2m_server->test_total_resource_count();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mserver/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MServer);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mserver/test_m2mserver.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,282 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mserver.h"
+#include "m2mobject_stub.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mresource_stub.h"
+#include "m2mresourceinstance_stub.h"
+#include "m2mbase_stub.h"
+#include "nsdlaccesshelper_stub.h"
+
+Test_M2MServer::Test_M2MServer()
+{
+    M2MObject* obj = new M2MObject("name", "name");
+    m2mobject_stub::inst = new M2MObjectInstance(*obj,"name", "type", "name");
+    m2mresource_stub::bool_value = true;
+    m2mobjectinstance_stub::create_resource =  new M2MResource(*m2mobject_stub::inst,
+                                                               "name",
+                                                               "type",
+                                                               M2MResourceInstance::STRING,
+                                                               false,
+                                                               "name");
+    server = new M2MServer();
+
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+    delete obj;
+}
+
+Test_M2MServer::~Test_M2MServer()
+{
+    delete m2mobject_stub::inst;
+    m2mobject_stub::inst = NULL;
+
+    m2mobject_stub::clear();
+    m2mobjectinstance_stub::clear();
+    m2mresource_stub::clear();
+    m2mbase_stub::clear();
+    delete server;
+}
+
+void Test_M2MServer::test_create_resource_int()
+{
+    m2mobjectinstance_stub::create_resource =  new M2MResource(*m2mobject_stub::inst,
+                                                               "name",
+                                                               "type",
+                                                               M2MResourceInstance::STRING,
+                                                               false,
+                                                               "name");
+
+    CHECK(server->create_resource(M2MServer::DefaultMinPeriod,10) != NULL);
+    CHECK(server->create_resource(M2MServer::DefaultMaxPeriod,10) != NULL);
+    CHECK(server->create_resource(M2MServer::DisableTimeout,10) != NULL);
+
+    CHECK(server->create_resource(M2MServer::ShortServerID,10) == NULL);
+    CHECK(server->create_resource(M2MServer::Lifetime,10) == NULL);
+    CHECK(server->create_resource(M2MServer::Disable,10) == NULL);
+    CHECK(server->create_resource(M2MServer::Binding,10) == NULL);
+    CHECK(server->create_resource(M2MServer::NotificationStorage,10) == NULL);
+    CHECK(server->create_resource(M2MServer::Binding,10) == NULL);
+    CHECK(server->create_resource(M2MServer::RegistrationUpdate,10) == NULL);
+
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+}
+
+void Test_M2MServer::test_create_resource()
+{
+    m2mobjectinstance_stub::create_resource =  new M2MResource(*m2mobject_stub::inst,
+                                                               "name",
+                                                               "type",
+                                                               M2MResourceInstance::STRING,
+                                                               false,
+                                                               "name");
+
+    CHECK(server->create_resource(M2MServer::Disable) != NULL);
+
+    CHECK(server->create_resource(M2MServer::DefaultMinPeriod) == NULL);
+    CHECK(server->create_resource(M2MServer::DefaultMaxPeriod) == NULL);
+    CHECK(server->create_resource(M2MServer::DefaultMaxPeriod) == NULL);
+    CHECK(server->create_resource(M2MServer::ShortServerID) == NULL);
+    CHECK(server->create_resource(M2MServer::Lifetime) == NULL);
+    CHECK(server->create_resource(M2MServer::DisableTimeout) == NULL);
+    CHECK(server->create_resource(M2MServer::Binding) == NULL);
+    CHECK(server->create_resource(M2MServer::NotificationStorage) == NULL);
+    CHECK(server->create_resource(M2MServer::RegistrationUpdate) == NULL);
+
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+}
+
+void Test_M2MServer::test_delete_resource()
+{
+    m2mobjectinstance_stub::bool_value = true;
+
+    CHECK(server->delete_resource(M2MServer::ShortServerID) == false);
+    CHECK(server->delete_resource(M2MServer::Binding) == false);
+    CHECK(server->delete_resource(M2MServer::NotificationStorage) == false);
+    CHECK(server->delete_resource(M2MServer::Lifetime) == false);
+    CHECK(server->delete_resource(M2MServer::RegistrationUpdate) == false);
+
+    CHECK(server->delete_resource(M2MServer::DefaultMinPeriod) == true);
+    CHECK(server->delete_resource(M2MServer::DefaultMaxPeriod) == true);
+    CHECK(server->delete_resource(M2MServer::DisableTimeout) == true);
+    CHECK(server->delete_resource(M2MServer::Disable) == true);
+}
+
+void Test_M2MServer::test_set_resource_value_int()
+{
+    m2mbase_stub::bool_value = true;
+
+    m2mobjectinstance_stub::resource =  new M2MResource(*m2mobject_stub::inst,
+                                                        "name",
+                                                        "type",
+                                                        M2MResourceInstance::STRING,
+                                                        false,
+                                                        "name");
+
+    CHECK(server->set_resource_value(M2MServer::DefaultMinPeriod,10) == true);
+    CHECK(server->set_resource_value(M2MServer::DefaultMaxPeriod,10) == true);
+    CHECK(server->set_resource_value(M2MServer::DisableTimeout,10) == true);
+    CHECK(server->set_resource_value(M2MServer::ShortServerID,10) == true);
+    CHECK(server->set_resource_value(M2MServer::NotificationStorage,10) == true);
+    CHECK(server->set_resource_value(M2MServer::Lifetime,10) == true);
+
+    CHECK(server->set_resource_value(M2MServer::Binding,10) == false);
+    CHECK(server->set_resource_value(M2MServer::RegistrationUpdate,10) == false);
+    CHECK(server->set_resource_value(M2MServer::Disable,10) == false);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+}
+
+void Test_M2MServer::test_set_resource_value_string()
+{
+    m2mresourceinstance_stub::bool_value = true;
+
+    m2mobjectinstance_stub::resource =  new M2MResource(*m2mobject_stub::inst,
+                                                        "name",
+                                                        "type",
+                                                        M2MResourceInstance::STRING,
+                                                        false,
+                                                        "name");
+
+    CHECK(server->set_resource_value(M2MServer::Binding,"test") == true);
+
+    CHECK(server->set_resource_value(M2MServer::DefaultMinPeriod,"test") == false);
+    CHECK(server->set_resource_value(M2MServer::DefaultMaxPeriod,"test") == false);
+    CHECK(server->set_resource_value(M2MServer::DisableTimeout,"test") == false);
+    CHECK(server->set_resource_value(M2MServer::ShortServerID,"test") == false);
+    CHECK(server->set_resource_value(M2MServer::NotificationStorage,"test") == false);
+    CHECK(server->set_resource_value(M2MServer::Lifetime,"test") == false);
+    CHECK(server->set_resource_value(M2MServer::RegistrationUpdate,"test") == false);
+    CHECK(server->set_resource_value(M2MServer::Disable,"test") == false);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+}
+
+void Test_M2MServer::test_resource_value_int()
+{
+    uint8_t value[] = {"10"};
+    m2mresourceinstance_stub::value = (uint8_t*)malloc((uint32_t)sizeof(value));
+    memset(m2mresourceinstance_stub::value,0,(uint32_t)sizeof(value));
+    memcpy(m2mresourceinstance_stub::value,value,sizeof(value));
+    m2mresourceinstance_stub::int_value = (uint32_t)sizeof(value);
+
+    m2mobjectinstance_stub::resource =  new M2MResource(*m2mobject_stub::inst,
+                                                        "name",
+                                                        "type",
+                                                        M2MResourceInstance::STRING,
+                                                        false,
+                                                        "name");
+
+   CHECK(server->resource_value_int(M2MServer::ShortServerID) == 10);
+   CHECK(server->resource_value_int(M2MServer::DefaultMinPeriod) == 10);
+   CHECK(server->resource_value_int(M2MServer::DefaultMaxPeriod) == 10);
+   CHECK(server->resource_value_int(M2MServer::DisableTimeout) == 10);
+   CHECK(server->resource_value_int(M2MServer::NotificationStorage) == 10);
+   CHECK(server->resource_value_int(M2MServer::Lifetime) == 10);
+   CHECK(server->resource_value_int(M2MServer::Binding) == 0);
+   CHECK(server->resource_value_int(M2MServer::RegistrationUpdate) == 0);
+   CHECK(server->resource_value_int(M2MServer::Disable) == 0);
+
+   delete m2mobjectinstance_stub::resource;
+   m2mobjectinstance_stub::resource = NULL;
+
+   free(m2mresourceinstance_stub::value);
+   m2mresourceinstance_stub::value = NULL;
+}
+
+void Test_M2MServer::test_resource_value_string()
+{
+    String test = "string";
+    uint8_t value[] = {"string"};
+
+    m2mresourceinstance_stub::value = (uint8_t*)malloc((uint32_t)sizeof(value));
+    memset(m2mresourceinstance_stub::value,0,(uint32_t)sizeof(value));
+    memcpy(m2mresourceinstance_stub::value,value,sizeof(value));
+    m2mresourceinstance_stub::int_value = (uint32_t)sizeof(value);
+
+    m2mobjectinstance_stub::resource =  new M2MResource(*m2mobject_stub::inst,
+                                                        "name",
+                                                        "type",
+                                                        M2MResourceInstance::STRING,
+                                                        false,
+                                                        "name");
+
+    CHECK(server->resource_value_string(M2MServer::Binding) == test);
+
+    CHECK(server->resource_value_string(M2MServer::Disable) == "");
+    CHECK(server->resource_value_string(M2MServer::RegistrationUpdate) == "");
+    CHECK(server->resource_value_string(M2MServer::Lifetime) == "");
+    CHECK(server->resource_value_string(M2MServer::NotificationStorage) == "");
+    CHECK(server->resource_value_string(M2MServer::DisableTimeout) == "");
+    CHECK(server->resource_value_string(M2MServer::DefaultMaxPeriod) == "");
+    CHECK(server->resource_value_string(M2MServer::DefaultMinPeriod) == "");
+    CHECK(server->resource_value_string(M2MServer::ShortServerID) == "");
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+}
+
+void Test_M2MServer::test_is_resource_present()
+{
+    m2mobjectinstance_stub::resource =  new M2MResource(*m2mobject_stub::inst,
+                                                        "name",
+                                                        "type",
+                                                        M2MResourceInstance::STRING,
+                                                        false,
+                                                        "name");
+
+    CHECK(server->is_resource_present(M2MServer::ShortServerID) == true);
+
+    delete m2mobjectinstance_stub::resource;
+    m2mobjectinstance_stub::resource = NULL;
+
+    CHECK(server->is_resource_present(M2MServer::DefaultMinPeriod) == false);
+}
+
+void Test_M2MServer::test_total_resource_count()
+{
+    M2MResource *res =  new M2MResource(*m2mobject_stub::inst,
+                                        "name",
+                                        "type",
+                                        M2MResourceInstance::STRING,
+                                        false,
+                                        "name");
+
+    m2mobjectinstance_stub::resource_list.push_back(res);
+    M2MResource *res2 =  new M2MResource(*m2mobject_stub::inst,
+                                         "name",
+                                         "type",
+                                         M2MResourceInstance::STRING,
+                                         false,
+                                         "name");
+
+    m2mobjectinstance_stub::resource_list.push_back(res2);
+
+    CHECK(server->total_resource_count() == 2);
+
+    m2mobjectinstance_stub::resource_list.clear();
+
+    delete res2;
+    delete res;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mserver/test_m2mserver.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_SERVER_H
+#define TEST_M2M_SERVER_H
+
+#include "m2mserver.h"
+
+class Callback;
+
+class Test_M2MServer
+{
+public:
+    Test_M2MServer();
+    virtual ~Test_M2MServer();
+
+    void test_create_resource();
+
+    void test_create_resource_int();
+
+    void test_delete_resource();
+
+    void test_set_resource_value_int();
+
+    void test_set_resource_value_string();
+
+    void test_resource_value_int();
+
+    void test_resource_value_string();
+
+    void test_is_resource_present();
+
+    void test_total_resource_count();
+
+    M2MServer* server;
+};
+
+#endif // TEST_M2M_SERVER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mstring/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,21 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mstring
+        "main.cpp"
+        "test_m2mstring.cpp"
+        "m2mstringtest.cpp"
+        "../../../../source/m2mstring.cpp"
+)
+
+target_link_libraries(m2mstring
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mstring
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+
+set(binary "m2mstring")
+add_test(m2mstring ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mstring/m2mstringtest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mstring.h"
+
+TEST_GROUP(M2MString)
+{
+  Test_M2MString* m2m_string;
+
+  void setup()
+  {
+    m2m_string = new Test_M2MString();
+  }
+  void teardown()
+  {
+    delete m2m_string;
+  }
+};
+
+TEST(M2MString, Create)
+{
+    CHECK(m2m_string != NULL);
+}
+
+TEST(M2MString, string_and_len_constructor)
+{
+    m2m_string->test_string_and_len_constructor();
+}
+
+TEST(M2MString, copy_constructor)
+{
+    m2m_string->test_copy_constructor();
+}
+
+TEST(M2MString, test_operator_assign)
+{
+    m2m_string->test_operator_assign();
+}
+
+TEST(M2MString, test_operator_add)
+{
+    m2m_string->test_operator_add();
+}
+
+TEST(M2MString, test_push_back)
+{
+    m2m_string->test_push_back();
+}
+
+TEST(M2MString, test_operator_equals)
+{
+    m2m_string->test_operator_equals();
+}
+
+TEST(M2MString, test_clear)
+{
+    m2m_string->test_clear();
+}
+
+TEST(M2MString, test_size)
+{
+    m2m_string->test_size();
+}
+
+TEST(M2MString, test_length)
+{
+    m2m_string->test_length();
+}
+
+TEST(M2MString, test_capacity)
+{
+    m2m_string->test_capacity();
+}
+
+TEST(M2MString, test_empty)
+{
+    m2m_string->test_empty();
+}
+
+TEST(M2MString, test_c_str)
+{
+    m2m_string->test_c_str();
+}
+
+TEST(M2MString, test_reserve)
+{
+    m2m_string->test_reserve();
+}
+
+TEST(M2MString, test_resize)
+{
+    m2m_string->test_resize();
+}
+
+TEST(M2MString, test_swap)
+{
+    m2m_string->test_swap();
+}
+
+TEST(M2MString, test_substr)
+{
+    m2m_string->test_substr();
+}
+
+TEST(M2MString, test_operator_get)
+{
+    m2m_string->test_operator_get();
+}
+
+TEST(M2MString, test_at)
+{
+    m2m_string->test_at();
+}
+
+TEST(M2MString, test_erase)
+{
+    m2m_string->test_erase();
+}
+
+TEST(M2MString, test_append)
+{
+    m2m_string->test_append();
+}
+
+TEST(M2MString, test_append_raw)
+{
+    m2m_string->test_append_raw();
+}
+
+TEST(M2MString, test_append_int)
+{
+    m2m_string->test_append_int();
+}
+
+TEST(M2MString, test_compare)
+{
+    m2m_string->test_compare();
+}
+
+TEST(M2MString, test_find_last_of)
+{
+    m2m_string->test_find_last_of();
+}
+
+TEST(M2MString, test_operator_lt)
+{
+    m2m_string->test_operator_lt();
+}
+
+TEST(M2MString, test_reverse)
+{
+    m2m_string->test_reverse();
+}
+
+TEST(M2MString, test_itoa_c)
+{
+    m2m_string->test_itoa_c();
+}
+
+TEST(M2MString, test_convert_integer_to_array)
+{
+    m2m_string->test_convert_integer_to_array();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mstring/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MString);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mstring/test_m2mstring.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,421 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mstring.h"
+#include <stdio.h>
+#include <string.h>
+
+Test_M2MString::Test_M2MString()
+{
+    str = new String("test");
+}
+
+Test_M2MString::~Test_M2MString()
+{
+    delete str;
+}
+
+void Test_M2MString::test_string_and_len_constructor()
+{
+    // make sure the len parameter works as expected
+    String s("hello_world", 5);
+    CHECK(s == "hello");
+    CHECK(s.size() == 5);
+}
+
+void Test_M2MString::test_copy_constructor()
+{
+    String s("name");
+    String s1(s);
+    CHECK(s1.p[1] == 'a');
+    CHECK(s.size() == s1.size());
+}
+
+void Test_M2MString::test_operator_assign()
+{
+    String s("name");
+    String s1 = s;
+    const String s2("yes");
+    CHECK(s1.p[1] == 'a');
+
+    s1 = "yeb";
+    CHECK(s1.p[1] == 'e');
+    s = s2;
+    CHECK(s.p[1] == 'e');
+}
+
+void Test_M2MString::test_operator_add()
+{
+    String s("name");
+    String s1("yeb");
+
+    s += 'r';
+    CHECK(s.p[4] == 'r');
+
+    s += s1;
+    CHECK(s.p[5] == 'y');
+
+    s += "hoi";
+    CHECK(s.p[9] == 'o');
+
+    s1 += "somethingverylongggggggg";
+
+}
+
+void Test_M2MString::test_push_back()
+{
+    String s("name");
+
+    s.push_back('r');
+    CHECK(s.p[4] == 'r');
+}
+
+void Test_M2MString::test_operator_equals()
+{
+    String s("name");
+    String s1("yeb");
+
+    CHECK( (s == s1) == false);
+    CHECK( (s == "name") == true);
+    const char c = NULL;
+    CHECK( (s == c) == false);
+    free(s.p);
+    s.p = NULL;
+    CHECK( (s == c) == true);
+}
+
+void Test_M2MString::test_clear()
+{
+    String s("name");
+
+    s.clear();
+    CHECK(s.size_ == 0);
+}
+
+void Test_M2MString::test_size()
+{
+    String s("name");
+    String s1("yeb");
+
+    CHECK(s.size() == 4);
+}
+
+void Test_M2MString::test_length()
+{
+    String s("name");
+    String s1("yeb");
+
+    CHECK(s.length() == 4);
+}
+
+void Test_M2MString::test_capacity()
+{
+    String s("name");
+    String s1("yeb");
+
+    CHECK(s.capacity() == 4);
+}
+
+void Test_M2MString::test_empty()
+{
+    String s("name");
+    String s1("yeb");
+
+    CHECK(s.empty() == false);
+}
+
+void Test_M2MString::test_c_str()
+{
+    String s("name");
+    String s1("yeb");
+
+    CHECK( s.c_str() != NULL);
+}
+
+void Test_M2MString::test_reserve()
+{
+    String s("name");
+    String s1("yeb");
+
+    s.reserve(12);
+    CHECK(s.allocated_ == 13);
+}
+
+void Test_M2MString::test_resize()
+{
+    String s("name");
+    String s1("yeb");
+
+    s.resize(2);
+    CHECK( s.size() == 2);
+
+    s.resize(12);
+    CHECK( s.size() == 12);
+}
+
+void Test_M2MString::test_swap()
+{
+    String s("name");
+    String s1("yeb");
+
+    s.swap(s1);
+    CHECK(s1.p[1] == 'a');
+
+    CHECK(s.p[1] == 'e');
+}
+
+void Test_M2MString::test_substr()
+{
+    String s("name");
+    String s1("yeb");
+
+    CHECK(s.substr(1, 1) == "a");
+    CHECK(s.substr(3, 4) == "e");
+}
+
+void Test_M2MString::test_operator_get()
+{
+    String s("name");
+    const String s1("yeb");
+
+    CHECK(s[1] == 'a');
+    CHECK(s1[1] == 'e');
+}
+
+void Test_M2MString::test_at()
+{
+    String s("name");
+    const String s1("yeb");
+
+    CHECK(s.at(1) == 'a');
+    CHECK(s.at(14) == '\0');
+    CHECK(s1.at(1) == 'e');
+    CHECK(s1.at(31) == '\0');
+}
+
+void Test_M2MString::test_erase()
+{
+    String s("name");
+    String s1("yeb");
+
+    s.erase(1,1);
+    CHECK(s[1] == 'm');
+}
+
+void Test_M2MString::test_append()
+{
+    String s("name");
+    String s1("yeb");
+
+    s.append( s1.c_str(), 1 );
+    CHECK(s.size() == 5);
+
+    s.append( s1.c_str(), 15 );
+    CHECK(s.size() == 8);
+}
+
+void Test_M2MString::test_append_raw()
+{
+    String s("name");
+    const char test_source[] = "something";
+    String expected("namesomething");
+
+    s.append_raw(test_source, 1);
+    CHECK(s.size() == 5);
+
+    s.append_raw(test_source + 1, 8);
+    CHECK(s.size() == 13);
+
+    CHECK(s == expected);
+}
+
+void Test_M2MString::test_append_int()
+{
+    String s("source");
+    String expected("source1234");
+    String expected2("source12342147483647");
+
+    s.append_int(1234);
+    CHECK(s.size() == 10);
+
+    CHECK(s == expected);
+
+    s.append_int(INT32_MAX);
+
+    CHECK(s == expected2);
+}
+
+void Test_M2MString::test_compare()
+{
+    String s("name");
+    String s1("yeb");
+    String s2("name");
+    String s3("nam");
+
+    CHECK(s.compare(1,5, s1) < 0);
+    CHECK(s1.compare(0,5, s2) > 0);
+    CHECK(s.compare(0,4, s2) == 0);
+    CHECK(s.compare(0,4, s3) > 0);
+
+    CHECK(s.compare(1,5, "yeb") < 0);
+    CHECK(s1.compare(0,5, "name") > 0);
+    CHECK(s.compare(0,4, "name") == 0);
+    CHECK(s.compare(0,4, "nam") > 0);
+}
+
+void Test_M2MString::test_find_last_of()
+{
+    String s("namenamename");
+    String s1("yeb");
+
+    CHECK(s.find_last_of('n') == 8);
+}
+
+void Test_M2MString::test_operator_lt()
+{
+    String s("name");
+    String s1("yeb");
+    String s2("yea");
+
+    CHECK( (s < s1 ) == true);
+    CHECK( (s1 < s2 ) == false);
+}
+void Test_M2MString::test_reverse()
+{
+    char string1[] = "123";
+    char string2[] = "321";
+    m2m::reverse(string1, strlen(string1));
+    char string3[] = "9223372036854775807";
+    char string4[] = "7085774586302733229";
+    m2m::reverse(string3, strlen(string3));
+
+    CHECK(strcmp(string1, string2) == 0);
+    CHECK(strcmp(string3, string4) == 0);
+}
+void Test_M2MString::test_itoa_c()
+{
+    int64_t value1 = 0;
+    char* string1 = "0";
+    int64_t value2 = -10;
+    char* string2 = "-10";
+    int64_t value3 = 10000;
+    char* string3 = "10000";
+    int64_t value4 = 9223372036854775807;
+    char* string4 = "9223372036854775807";
+    int64_t value5 = -9223372036854775807;
+    char* string5 = "-9223372036854775807";
+
+    char *buffer = (char*)malloc(21);
+
+    if(buffer) {
+        m2m::itoa_c(value1, buffer);
+        CHECK(strcmp(string1, buffer) == 0);
+        m2m::itoa_c(value2, buffer);
+        CHECK(strcmp(string2, buffer) == 0);
+        m2m::itoa_c(value3, buffer);
+        CHECK(strcmp(string3, buffer) == 0);
+        m2m::itoa_c(value4, buffer);
+        CHECK(strcmp(string4, buffer) == 0);
+        m2m::itoa_c(value5, buffer);
+        CHECK(strcmp(string5, buffer) == 0);
+        free(buffer);
+    }
+}
+
+void Test_M2MString::test_convert_integer_to_array()
+{
+    uint8_t *max_age_ptr = NULL;
+    uint8_t max_age_len = 0;
+    uint8_t *temp = NULL;
+    uint8_t temp_len = 0;
+
+    int64_t val = 0;
+    max_age_ptr = m2m::String::convert_integer_to_array(val,max_age_len);
+    CHECK(max_age_ptr != NULL);
+    CHECK(val == m2m::String::convert_array_to_integer(max_age_ptr, max_age_len));
+    temp = m2m::String::convert_integer_to_array(0,temp_len, max_age_ptr, max_age_len);
+    CHECK(temp != NULL);
+    CHECK(val == m2m::String::convert_array_to_integer(temp, temp_len));
+    free(temp);
+    free(max_age_ptr);
+    max_age_ptr = NULL;
+
+    val = 0xff;
+    max_age_ptr = m2m::String::convert_integer_to_array(val,max_age_len);
+    CHECK(max_age_ptr != NULL);
+    CHECK(val == m2m::String::convert_array_to_integer(max_age_ptr, max_age_len));
+    temp = m2m::String::convert_integer_to_array(0,temp_len, max_age_ptr, max_age_len);
+    CHECK(temp != NULL);
+    CHECK(val == m2m::String::convert_array_to_integer(temp, temp_len));
+    free(temp);
+    free(max_age_ptr);
+    max_age_ptr = NULL;
+
+    val = 0xffff;
+    max_age_ptr = m2m::String::convert_integer_to_array(val,max_age_len);
+    CHECK(max_age_ptr != NULL);
+    CHECK(val == m2m::String::convert_array_to_integer(max_age_ptr, max_age_len));
+    free(max_age_ptr);
+    max_age_ptr = NULL;
+
+    val = 0xffffff;
+    max_age_ptr = m2m::String::convert_integer_to_array(val,max_age_len);
+    CHECK(max_age_ptr != NULL);
+    CHECK(val == m2m::String::convert_array_to_integer(max_age_ptr, max_age_len));
+    free(max_age_ptr);
+    max_age_ptr = NULL;
+
+    val = 0xffffffff;
+    max_age_ptr = m2m::String::convert_integer_to_array(val,max_age_len);
+    CHECK(max_age_ptr != NULL);
+    CHECK(val == m2m::String::convert_array_to_integer(max_age_ptr, max_age_len));
+    free(max_age_ptr);
+    max_age_ptr = NULL;
+
+    val = 0xffffffffff;
+    max_age_ptr = m2m::String::convert_integer_to_array(val,max_age_len);
+    CHECK(max_age_ptr != NULL);
+    CHECK(val == m2m::String::convert_array_to_integer(max_age_ptr, max_age_len));
+    free(max_age_ptr);
+    max_age_ptr = NULL;
+
+    val = 0xffffffffffff;
+    max_age_ptr = m2m::String::convert_integer_to_array(val,max_age_len);
+    CHECK(max_age_ptr != NULL);
+    CHECK(val == m2m::String::convert_array_to_integer(max_age_ptr, max_age_len));
+    free(max_age_ptr);
+    max_age_ptr = NULL;
+
+    val = 0xffffffffffffff;
+    max_age_ptr = m2m::String::convert_integer_to_array(val,max_age_len);
+    CHECK(max_age_ptr != NULL);
+    CHECK(val == m2m::String::convert_array_to_integer(max_age_ptr, max_age_len));
+    free(max_age_ptr);
+    max_age_ptr = NULL;
+
+    val = 0xffff;
+    max_age_ptr = m2m::String::convert_integer_to_array(val,max_age_len);
+    CHECK(max_age_ptr != NULL);
+    CHECK(val == m2m::String::convert_array_to_integer(max_age_ptr, max_age_len));
+    free(max_age_ptr);
+    max_age_ptr = NULL;
+
+
+
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mstring/test_m2mstring.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_STRING_H
+#define TEST_M2M_STRING_H
+
+#include "m2mstring.h"
+
+using namespace m2m;
+
+class Test_M2MString
+{
+public:
+    Test_M2MString();
+    virtual ~Test_M2MString();
+
+    void test_string_and_len_constructor();
+    void test_copy_constructor();
+    void test_operator_assign();
+    void test_operator_add();
+    void test_push_back();
+    void test_operator_equals();
+    void test_clear();
+    void test_size();
+    void test_length();
+    void test_capacity();
+    void test_empty();
+    void test_c_str();
+    void test_reserve();
+    void test_resize();
+    void test_swap();
+    void test_substr();
+    void test_operator_get();
+    void test_at();
+    void test_erase();
+    void test_append();
+    void test_append_raw();
+    void test_append_int();
+    void test_compare();
+    void test_find_last_of();
+    void test_operator_lt();
+    void test_reverse();
+    void test_itoa_c();
+    void test_convert_integer_to_array();
+
+    String* str;
+};
+
+#endif // TEST_M2M_STRING_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mstringbufferbase/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,21 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mstringbufferbase 
+	"main.cpp"
+	"m2mstringbufferbasetest.cpp"
+	"test_m2mstringbufferbase.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+target_link_libraries(m2mstringbufferbase
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mstringbufferbase
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+set(binary "m2mstringbufferbase")
+add_test(m2mstringbufferbase ${binary})
+
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mstringbufferbase/m2mstringbufferbasetest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mstringbufferbase.h"
+
+TEST_GROUP(M2Mstringbufferbase)
+{
+  Test_M2Mstringbufferbase* stringbufferbase;
+
+  void setup()
+  {
+    stringbufferbase = new Test_M2Mstringbufferbase();
+  }
+  void teardown()
+  {
+    delete stringbufferbase;
+  }
+};
+
+TEST(M2Mstringbufferbase, Create)
+{
+    CHECK(stringbufferbase != NULL);
+}
+
+TEST(M2Mstringbufferbase, ensure_space)
+{
+    stringbufferbase->test_ensure_space();
+}
+
+TEST(M2Mstringbufferbase, append)
+{
+    stringbufferbase->test_append();
+}
+
+TEST(M2Mstringbufferbase, append_int)
+{
+    stringbufferbase->test_append_int();
+}
+
+TEST(M2Mstringbufferbase, find_last_of)
+{
+    stringbufferbase->test_find_last_of();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mstringbufferbase/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2Mstringbufferbase);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mstringbufferbase/test_m2mstringbufferbase.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mstringbufferbase.h"
+//#include "m2mstringbuffer.h"
+
+
+
+Test_M2Mstringbufferbase::Test_M2Mstringbufferbase()
+{
+}
+
+Test_M2Mstringbufferbase::~Test_M2Mstringbufferbase()
+{
+}
+
+void Test_M2Mstringbufferbase::test_ensure_space()
+{
+    CHECK(ensure_space(1, 1));
+    CHECK(!ensure_space(1, 2));
+}
+
+void Test_M2Mstringbufferbase::test_append()
+{
+    char data[2];
+
+    _curr_size = 0;
+    CHECK(append(data, 2, 'a'));
+    CHECK(!append(data, 2, 'a'));
+
+    _curr_size = 0;
+    CHECK(append(data, 2, "a"));
+    CHECK(!append(data, 2, "a"));
+
+    _curr_size = 0;
+    CHECK(!append(data, 2, "aa"));
+
+    _curr_size = 0;
+    CHECK(append(data, 2, "aa", 1));
+
+    _curr_size = 0;
+    CHECK(!append(data, 2, "aa", 2));
+
+    
+}
+
+void Test_M2Mstringbufferbase::test_append_int()
+{
+    char data[2];
+    _curr_size = 0;
+    CHECK(append_int(data, 2, 1));
+    CHECK(!append_int(data, 2, 2));
+    _curr_size = 0;
+    CHECK(!append_int(data, 2, 666));
+}
+
+void Test_M2Mstringbufferbase::test_find_last_of()
+{
+    char data[2];
+    _curr_size = 0;
+    CHECK(append(data, 2, 'a'));
+    CHECK(0 == find_last_of(data, 'a'));
+    CHECK(0 > find_last_of(data, 'b'));
+}
+
+/*
+    bool ensure_space(size_t max_size, size_t required_size) const;
+
+    bool append(char *buff, size_t max_size, char data);
+
+    bool append(char *buff, size_t max_size, const char *data);
+
+    bool append(char *buff, size_t max_size, const char *data, size_t data_len);
+
+    bool append_int(char *buff, size_t max_size, uint16_t data);
+
+    int find_last_of(const char *buff, char search_char) const;*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mstringbufferbase/test_m2mstringbufferbase.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_STRIGBUFFERBASE_H
+#define TEST_M2M_STRIGBUFFERBASE_H
+
+#include "m2mstringbufferbase.h"
+
+class Test_M2Mstringbufferbase : StringBufferBase
+{
+public:
+    Test_M2Mstringbufferbase();
+
+    virtual ~Test_M2Mstringbufferbase();
+
+    void test_ensure_space();
+    void test_append();
+    void test_append_int();
+    void test_find_last_of();
+
+};
+
+
+#endif // TEST_M2M_STRIGBUFFERBASE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mtlvdeserializer/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,31 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(m2mtlv
+        "../../../../source/m2mtlvdeserializer.cpp"
+        "../../../../source/m2mtlvserializer.cpp"
+        "main.cpp"
+        "m2mtlvdeserializertest.cpp"
+        "test_m2mtlvdeserializer.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mresource_stub.cpp"
+        "../stub/m2mresourceinstance_stub.cpp"
+        "../stub/m2mobjectinstance_stub.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/nsdlaccesshelper_stub.cpp"
+        "test_m2mtlvserializer.cpp"
+        "../../../../source/m2mstringbufferbase.cpp"
+)
+
+target_link_libraries(m2mtlv
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(m2mtlv
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+
+set(binary "m2mtlv")
+add_test(m2mtlv ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mtlvdeserializer/m2mtlvdeserializertest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_m2mtlvdeserializer.h"
+#include "test_m2mtlvserializer.h"
+
+TEST_GROUP(M2MTLVDeserializer)
+{
+  Test_M2MTLVDeserializer* m2m_deserializer;
+
+  void setup()
+  {
+    m2m_deserializer = new Test_M2MTLVDeserializer();
+  }
+  void teardown()
+  {
+    delete m2m_deserializer;
+  }
+};
+
+TEST_GROUP(M2MTLVSerializer)
+{
+  Test_M2MTLVSerializer* m2m_serializer;
+
+  void setup()
+  {
+    m2m_serializer = new Test_M2MTLVSerializer();
+  }
+  void teardown()
+  {
+    delete m2m_serializer;
+  }
+};
+
+TEST(M2MTLVSerializer, Create)
+{
+    CHECK(m2m_serializer != NULL);
+}
+
+TEST(M2MTLVSerializer, serialize_object)
+{
+    m2m_serializer->test_serialize_object();
+}
+
+TEST(M2MTLVSerializer, serialize_object_instance)
+{
+    m2m_serializer->test_serialize_object_instance();
+}
+
+TEST(M2MTLVSerializer, serialize_resource)
+{
+    m2m_serializer->test_serialize_resource();
+}
+
+TEST(M2MTLVSerializer, serialize_resource_instance)
+{
+    m2m_serializer->test_serialize_resource_instance();
+}
+
+TEST(M2MTLVDeserializer, Create)
+{
+    CHECK(m2m_deserializer != NULL);
+}
+
+TEST(M2MTLVDeserializer, is_object_instance)
+{
+    m2m_deserializer->test_is_object_instance();
+}
+
+TEST(M2MTLVDeserializer, is_resource)
+{
+    m2m_deserializer->test_is_resource();
+}
+
+TEST(M2MTLVDeserializer, is_multiple_resource)
+{
+    m2m_deserializer->test_is_multiple_resource();
+}
+
+TEST(M2MTLVDeserializer, is_resource_instance)
+{
+    m2m_deserializer->test_is_resource_instance();
+}
+
+TEST(M2MTLVDeserializer, deserialise_object_instances)
+{
+    m2m_deserializer->test_deserialise_object_instances();
+}
+
+TEST(M2MTLVDeserializer, deserialize_resources)
+{
+    m2m_deserializer->test_deserialize_resources();
+}
+
+TEST(M2MTLVDeserializer, test_deserialize_resource_instance_1)
+{
+    m2m_deserializer->test_deserialize_resource_instance_1();
+}
+
+TEST(M2MTLVDeserializer, test_deserialize_resource_instance)
+{
+    m2m_deserializer->test_deserialize_resource_instance();
+}
+
+TEST(M2MTLVDeserializer, test_instance_id)
+{
+    m2m_deserializer->test_instance_id();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mtlvdeserializer/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( M2MTLVDeserializer);
+IMPORT_TEST_GROUP( M2MTLVSerializer);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mtlvdeserializer/test_m2mtlvdeserializer.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,646 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mtlvdeserializer.h"
+#include "m2mtlvserializer.h"
+#include "m2mobject_stub.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mresource_stub.h"
+#include "m2mresourceinstance_stub.h"
+#include "m2mbase_stub.h"
+
+
+Test_M2MTLVDeserializer::Test_M2MTLVDeserializer()
+{
+    deserializer = new M2MTLVDeserializer();
+}
+
+Test_M2MTLVDeserializer::~Test_M2MTLVDeserializer()
+{
+    delete deserializer;
+    m2mbase_stub::clear();
+    m2mresourceinstance_stub::clear();
+    m2mobjectinstance_stub::clear();
+    m2mobject_stub::clear();
+    m2mresource_stub::clear();
+}
+
+void Test_M2MTLVDeserializer::test_is_object_instance()
+{
+    uint8_t data_resource[] = {0xC3,0x0};
+    uint8_t data_object[] = {0x08,0x0};
+
+    CHECK(deserializer->is_object_instance(data_resource) == false);
+    CHECK(deserializer->is_object_instance(data_object) == true);
+}
+
+void Test_M2MTLVDeserializer::test_is_resource()
+{
+    uint8_t data_resource[] = {0xC3,0x0};
+    uint8_t data_object[] = {0x08,0x0};
+
+    CHECK(deserializer->is_resource(data_resource) == true);
+    CHECK(deserializer->is_resource(data_object) == false);
+
+}
+
+void Test_M2MTLVDeserializer::test_is_multiple_resource()
+{
+    uint8_t data_resource[] = {0xC3,0x0};
+    uint8_t data_object[] = {0x88,0x0};
+
+    CHECK(deserializer->is_multiple_resource(data_resource) == false);
+    CHECK(deserializer->is_multiple_resource(data_object) == true);
+}
+
+void Test_M2MTLVDeserializer::test_is_resource_instance()
+{
+    uint8_t data_resource[] = {0xC3,0x0};
+    uint8_t data_object[] = {0x44,0x0};
+
+    CHECK(deserializer->is_resource_instance(data_object) == true);
+    CHECK(deserializer->is_resource_instance(data_resource) == false);
+}
+
+void Test_M2MTLVDeserializer::test_deserialise_object_instances()
+{
+    uint32_t size = 0;
+    uint8_t *data = 0;
+
+
+    M2MObject *object = new M2MObject("1", "1");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object,"1", "type", "1");
+
+    M2MObjectInstance* instance_1 = new M2MObjectInstance(*object,"2", "type", "2");
+
+
+    m2mobject_stub::instance_list.push_back(instance);
+
+    M2MResource* resource = new M2MResource(*instance,
+                                            "1",
+                                            "type",
+                                            M2MResourceInstance::INTEGER,
+                                            false,
+                                            "1");
+
+    M2MResource* resource_1 = new M2MResource(*instance,
+                                              "2",
+                                              "type",
+                                              M2MResourceInstance::INTEGER,
+                                              false,
+                                              "2");
+
+    m2mobjectinstance_stub::resource_list.push_back(resource);
+    m2mobjectinstance_stub::resource_list.push_back(resource_1);
+
+    m2mbase_stub::name_id_value = 0;
+    m2mbase_stub::operation = M2MBase::GET_PUT_POST_ALLOWED;
+
+    M2MTLVSerializer *serializer = new M2MTLVSerializer();
+
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+
+    CHECK(M2MTLVDeserializer::None == deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Post));
+
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    m2mbase_stub::operation = M2MBase::GET_ALLOWED;
+
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+
+    CHECK(M2MTLVDeserializer::NotAllowed == deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Post));
+
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    m2mbase_stub::operation = M2MBase::GET_PUT_POST_ALLOWED;
+
+    u_int8_t value[] = {"value"};
+    m2mresourceinstance_stub::value = value;
+    m2mresourceinstance_stub::int_value = sizeof(value);
+
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+
+    delete serializer;
+
+    CHECK(M2MTLVDeserializer::None == deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Post));
+    CHECK(M2MTLVDeserializer::None == deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Put));
+
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    m2mobject_stub::instance_list.push_back(instance_1);
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+    serializer = new M2MTLVSerializer();
+
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+
+    delete serializer;
+
+    CHECK(M2MTLVDeserializer::None != deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Post));
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    CHECK(M2MTLVDeserializer::NotValid == deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Post));
+
+    M2MResourceInstance* res_instance = new M2MResourceInstance(*resource,
+                                                                "1",
+                                                                "type",
+                                                                M2MResourceInstance::INTEGER,
+                                                                0,
+                                                                "1",
+                                                                false);
+
+
+    M2MResourceInstance* res_instance_1 = new M2MResourceInstance(*resource,
+                                                                 "2",
+                                                                 "type",
+                                                                 M2MResourceInstance::INTEGER,
+                                                                 0,
+                                                                 "1",
+                                                                 false);
+
+    m2mresource_stub::bool_value = true;
+    m2mresource_stub::list.push_back(res_instance);
+    m2mresource_stub::list.push_back(res_instance_1);
+
+    m2mobject_stub::instance_list.pop_back();
+
+    serializer = new M2MTLVSerializer();
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    delete serializer;
+
+    m2mbase_stub::operation = M2MBase::GET_PUT_POST_ALLOWED;
+
+    m2mbase_stub::string_value = "name";
+    m2mobjectinstance_stub::create_resource_instance = new M2MResource(*instance,
+                                                                       "1",
+                                                                       "type",
+                                                                       M2MResourceInstance::INTEGER,
+                                                                       false,
+                                                                       "1");
+
+    deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Post);
+
+    deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Put);
+
+    size = 0;
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    m2mbase_stub::name_id_value = 300;
+
+    m2mresourceinstance_stub::int_value = 6;
+    m2mresourceinstance_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
+    serializer = new M2MTLVSerializer();
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    delete serializer;
+
+    deserializer->deserialise_object_instances(data,size,*object, M2MTLVDeserializer::Post);
+    deserializer->deserialise_object_instances(data,size,*object, M2MTLVDeserializer::Put);
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+
+    m2mresourceinstance_stub::int_value = 256;
+    m2mresourceinstance_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
+    serializer = new M2MTLVSerializer();
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    delete serializer;
+
+    deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Post);
+    deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Put);
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+
+    m2mresourceinstance_stub::int_value = 65536;
+    m2mresourceinstance_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
+    serializer = new M2MTLVSerializer();
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    delete serializer;
+
+   deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Post);
+   deserializer->deserialise_object_instances(data,size,*object,M2MTLVDeserializer::Put);
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+
+    delete m2mobjectinstance_stub::create_resource_instance;
+    m2mobjectinstance_stub::create_resource_instance = NULL;
+
+    delete res_instance;
+    delete res_instance_1;
+    delete resource;
+    delete resource_1;
+    delete instance;
+    delete instance_1;
+    delete object;
+}
+
+void Test_M2MTLVDeserializer::test_deserialize_resources()
+{
+    uint8_t data_resource[] = {0xC3,0x0,'A','R','M'};
+
+    M2MObject *object = new M2MObject("1","1");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object,"1","type", "1");
+
+    m2mobject_stub::instance_list.push_back(instance);
+
+    M2MResource* resource = new M2MResource(*instance,
+                                            "1",
+                                            "type",
+                                            M2MResourceInstance::INTEGER,
+                                            false,
+                                            "1");
+
+
+    m2mobjectinstance_stub::resource_list.push_back(resource);
+
+    CHECK(deserializer->is_resource(data_resource) == true);
+
+    uint8_t invalid_data_resource[] = {0x65,0x0,'A','R','M'};
+
+    CHECK( M2MTLVDeserializer::NotValid == deserializer->deserialize_resources(invalid_data_resource,
+                                                                               sizeof(invalid_data_resource),
+                                                                               *instance,M2MTLVDeserializer::Post));
+
+    m2mbase_stub::operation = M2MBase::GET_PUT_POST_ALLOWED;
+
+    m2mobjectinstance_stub::create_resource = new M2MResource(*instance,
+                                                              "1",
+                                                              "type",
+                                                              M2MResourceInstance::INTEGER,
+                                                              false,
+                                                              "1");
+
+    CHECK( M2MTLVDeserializer::None == deserializer->deserialize_resources(data_resource,sizeof(data_resource),*instance,M2MTLVDeserializer::Post));
+
+    delete m2mobjectinstance_stub::create_resource;
+    m2mobjectinstance_stub::create_resource = NULL;
+
+    CHECK( M2MTLVDeserializer::NotFound == deserializer->deserialize_resources(data_resource,sizeof(data_resource),*instance,M2MTLVDeserializer::Put));
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+
+    deserializer->deserialize_resources(data_resource,sizeof(data_resource),*instance,M2MTLVDeserializer::Post);
+
+
+    M2MResourceInstance* res_instance = new M2MResourceInstance(*resource,
+                                                                "1",
+                                                                "type",
+                                                                M2MResourceInstance::INTEGER,
+                                                                0,
+                                                                "1",
+                                                                false);
+
+
+    m2mresource_stub::bool_value = true;
+    m2mresource_stub::list.push_back(res_instance);
+
+//    M2MResourceInstance* res_instance_1 = new M2MResourceInstance("2",
+//                                                                *name,
+//                                                                M2MResourceInstance::INTEGER,
+//                                                                *instance);
+
+//    m2mresource_stub::list.push_back(res_instance_1);
+    m2mbase_stub::string_value = "1";
+    uint8_t data_multiple_resource[] = {0x86,0x6, 0x81,0x0, 0x01, 0x41, 0x01, 0x05};
+    CHECK(deserializer->is_multiple_resource(data_multiple_resource) == true);
+    deserializer->deserialize_resources(data_multiple_resource,sizeof(data_multiple_resource),*instance,M2MTLVDeserializer::Post);
+
+    M2MTLVSerializer *serializer = new M2MTLVSerializer();
+
+    m2mbase_stub::name_id_value = 1;
+    uint32_t size = 0;
+    uint8_t* data = serializer->serialize(resource,size);
+
+    delete serializer;
+
+    m2mbase_stub::operation = M2MBase::GET_PUT_POST_ALLOWED;
+
+    deserializer->deserialize_resources(data,size,*instance,M2MTLVDeserializer::Post);
+
+    free(data);
+
+    delete res_instance;
+//    delete res_instance_1;
+    delete resource;
+    delete instance;
+    delete object;
+
+    m2mresourceinstance_stub::clear();
+    m2mresource_stub::clear();
+    m2mobjectinstance_stub::clear();
+    m2mobject_stub::clear();
+}
+
+void Test_M2MTLVDeserializer::test_deserialize_resource_instance_1()
+{
+    uint8_t data_resource[] = {0xC3,0x0,'A','R','M'};
+
+    m2mbase_stub::name_id_value = 1;
+
+    M2MObject *object = new M2MObject("1","1");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object,"1","type", "1");
+
+    m2mobject_stub::instance_list.push_back(instance);
+
+    M2MResource* resource = new M2MResource(*instance,
+                                            "1",
+                                            "type",
+                                            M2MResourceInstance::INTEGER,
+                                            false,
+                                            "1");
+
+    m2mobjectinstance_stub::resource_list.push_back(resource);
+
+    CHECK(deserializer->is_resource(data_resource) == true);
+
+    m2mbase_stub::operation = M2MBase::GET_PUT_POST_ALLOWED;
+
+    deserializer->deserialize_resource_instances(data_resource,sizeof(data_resource),
+                                                 *resource,M2MTLVDeserializer::Put);
+
+    M2MResourceInstance* res_instance = new M2MResourceInstance(*resource,
+                                                                "1",
+                                                                "type",
+                                                                M2MResourceInstance::INTEGER,
+                                                                0,
+                                                                "1",
+                                                                false);
+
+    m2mresource_stub::bool_value = true;
+    m2mresource_stub::list.push_back(res_instance);
+
+    M2MResourceInstance* res_instance_1 = new M2MResourceInstance(*resource,
+                                                                 "2",
+                                                                 "type",
+                                                                 M2MResourceInstance::INTEGER,
+                                                                 0,
+                                                                 "2",
+                                                                 false);
+
+    m2mresource_stub::list.push_back(res_instance_1);
+
+    M2MTLVSerializer *serializer = new M2MTLVSerializer();
+
+    uint32_t size = 0;
+    uint8_t* data = serializer->serialize( resource,size);
+
+    delete serializer;
+
+    deserializer->deserialize_resource_instances(data,size,
+                                                *resource,M2MTLVDeserializer::Put);
+
+
+    free(data);
+
+    delete res_instance;
+    delete res_instance_1;
+    delete resource;
+    delete instance;
+    delete object;
+
+    m2mresourceinstance_stub::clear();
+    m2mresource_stub::clear();
+    m2mobjectinstance_stub::clear();
+    m2mobject_stub::clear();
+}
+
+
+void Test_M2MTLVDeserializer::test_deserialize_resource_instance()
+{
+    uint32_t size = 0;
+    uint8_t *data = 0;
+
+    M2MObject *object = new M2MObject("1","1");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object,"1","type", "1");
+
+    M2MObjectInstance* instance_1 = new M2MObjectInstance(*object,"2","type", "1");
+
+
+    m2mobject_stub::instance_list.push_back(instance);
+    m2mobject_stub::instance_list.push_back(instance_1);
+
+
+    M2MResource* resource = new M2MResource(*instance,
+                                            "1",
+                                            "type",
+                                            M2MResourceInstance::INTEGER,
+                                            false,
+                                            "1");
+
+    M2MResource* resource_1 = new M2MResource(*instance,
+                                              "2",
+                                              "type",
+                                              M2MResourceInstance::INTEGER,
+                                              false,
+                                              "2");
+
+    m2mobjectinstance_stub::resource_list.push_back(resource);
+    m2mobjectinstance_stub::resource_list.push_back(resource_1);
+
+    m2mbase_stub::name_id_value = 0;
+
+    M2MTLVSerializer *serializer = new M2MTLVSerializer();
+
+    data = serializer->serialize( resource,size);
+
+    delete serializer;
+
+    m2mbase_stub::operation = M2MBase::GET_PUT_POST_ALLOWED;
+
+    deserializer->deserialize_resource_instances(data,size,*resource,M2MTLVDeserializer::Post);
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+
+    deserializer->deserialize_resource_instances(data,size,*resource,M2MTLVDeserializer::Post);
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    M2MResourceInstance* res_instance = new M2MResourceInstance(*resource,
+                                                                "1",
+                                                                "type",
+                                                                M2MResourceInstance::INTEGER,
+                                                                0,
+                                                                "1",
+                                                                false);
+
+    M2MResourceInstance* res_instance_1 = new M2MResourceInstance(*resource,
+                                                                  "2",
+                                                                  "type",
+                                                                  M2MResourceInstance::INTEGER,
+                                                                  0,
+                                                                  "2",
+                                                                  false);
+
+
+    m2mbase_stub::operation = M2MBase::GET_ALLOWED;
+
+    m2mresource_stub::bool_value = true;
+    m2mresource_stub::list.push_back(res_instance);
+    m2mresource_stub::list.push_back(res_instance_1);
+    serializer = new M2MTLVSerializer();
+    data = serializer->serialize( resource,size);
+    delete serializer;
+
+    deserializer->deserialize_resource_instances(data,size,*resource,M2MTLVDeserializer::Post);
+
+    m2mbase_stub::operation = M2MBase::GET_PUT_POST_ALLOWED;
+    deserializer->deserialize_resource_instances(data,size,*resource,M2MTLVDeserializer::Post);
+
+    m2mresource_stub::list.pop_back();
+    m2mresource_stub::list.pop_back();
+
+    CHECK(M2MTLVDeserializer::NotAllowed ==deserializer->deserialize_resource_instances(data,size,*resource,M2MTLVDeserializer::Post));
+
+    CHECK(M2MTLVDeserializer::NotFound == deserializer->deserialize_resource_instances(data,size,*resource,M2MTLVDeserializer::Put));
+
+    size = 0;
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    serializer = new M2MTLVSerializer();
+    data = serializer->serialize( resource,size);
+    delete serializer;
+
+    deserializer->deserialize_resource_instances(data,size,*resource,M2MTLVDeserializer::Put);
+    size = 0;
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    m2mresource_stub::list.push_back(res_instance);
+    m2mresource_stub::list.push_back(res_instance_1);
+
+    m2mbase_stub::name_id_value = 300;
+
+    m2mresourceinstance_stub::int_value = 6;
+    m2mresourceinstance_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
+    serializer = new M2MTLVSerializer();
+    data = serializer->serialize( resource,size);
+    delete serializer;
+
+    deserializer->deserialize_resource_instances(data,size,*resource, M2MTLVDeserializer::Post);
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+
+    m2mresourceinstance_stub::int_value = 256;
+    m2mresourceinstance_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
+    serializer = new M2MTLVSerializer();
+    data = serializer->serialize( resource,size);
+    delete serializer;
+
+    deserializer->deserialize_resource_instances(data,size,*resource,M2MTLVDeserializer::Post);
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+
+    m2mresourceinstance_stub::int_value = 65536;
+    m2mresourceinstance_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
+    serializer = new M2MTLVSerializer();
+    data = serializer->serialize( resource,size);
+    delete serializer;
+
+    deserializer->deserialize_resource_instances(data,size,*resource,M2MTLVDeserializer::Post);
+    size = 0;
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+
+    delete res_instance;
+    delete res_instance_1;
+    delete resource;
+    delete resource_1;
+    delete instance;
+    delete instance_1;
+    delete object;
+}
+
+void Test_M2MTLVDeserializer::test_instance_id()
+{
+    uint8_t data_resource[] = {0xC3,0x1};
+    uint8_t data_object[] = {0x08,0x2};
+
+    CHECK(deserializer->instance_id(data_resource) == 1);
+    CHECK(deserializer->instance_id(data_object) == 2);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mtlvdeserializer/test_m2mtlvdeserializer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_TLV_DESERIALIZER_H
+#define TEST_M2M_TLV_DESERIALIZER_H
+
+#include "m2mtlvdeserializer.h"
+
+class Test_M2MTLVDeserializer
+{
+public:
+    Test_M2MTLVDeserializer();
+
+    virtual ~Test_M2MTLVDeserializer();
+
+    void test_is_object_instance();
+
+    void test_is_resource();
+
+    void test_is_multiple_resource();
+
+    void test_is_resource_instance();
+
+    void test_deserialise_object_instances();
+
+    void test_deserialize_resources();
+
+    void test_deserialize_resource_instance_1();
+
+    void test_deserialize_resource_instance();
+
+    void test_instance_id();
+
+    M2MTLVDeserializer *deserializer;
+};
+
+#endif // TEST_M2M_TLV_DESERIALIZER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mtlvdeserializer/test_m2mtlvserializer.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,309 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_m2mtlvserializer.h"
+#include "m2mobject_stub.h"
+#include "m2mobjectinstance_stub.h"
+#include "m2mresource_stub.h"
+#include "m2mresourceinstance_stub.h"
+#include "m2mbase_stub.h"
+
+
+Test_M2MTLVSerializer::Test_M2MTLVSerializer()
+{
+    serializer = new M2MTLVSerializer();
+}
+
+Test_M2MTLVSerializer::~Test_M2MTLVSerializer()
+{
+    delete serializer;
+}
+
+void Test_M2MTLVSerializer::test_serialize_object()
+{
+    uint32_t size = 0;
+    uint8_t *data = 0;
+
+    M2MObject *object = new M2MObject("1", "1");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object,"1", "type", "1");
+
+    m2mobject_stub::instance_list.push_back(instance);
+
+
+
+    M2MResource* resource = new M2MResource(*instance,
+                                            "1",
+                                            "type",
+                                            M2MResourceInstance::INTEGER,
+                                            false,
+                                            "1");
+
+
+    m2mobjectinstance_stub::resource_list.push_back(resource);
+
+    m2mbase_stub::name_id_value = 0;
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    CHECK(data != NULL);
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    M2MResourceInstance* res_instance =  new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                 "1",
+                                                                 "type",
+                                                                 M2MResourceInstance::STRING,
+                                                                 0,
+                                                                 "1",
+                                                                 false);
+
+    M2MResourceInstance* res_instance_1 =  new M2MResourceInstance(*m2mobjectinstance_stub::resource,
+                                                                   "2",
+                                                                   "type",
+                                                                   M2MResourceInstance::STRING,
+                                                                   0,
+                                                                   "2",
+                                                                   false);
+
+
+    m2mresource_stub::bool_value = true;
+    m2mresource_stub::list.push_back(res_instance);
+    m2mresource_stub::list.push_back(res_instance_1);
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    CHECK(data != NULL);
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    m2mbase_stub::name_id_value = 256;
+
+    m2mresourceinstance_stub::int_value = 6;
+    m2mresourceinstance_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    CHECK(data != NULL);
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+
+    m2mresourceinstance_stub::int_value = 256;
+    m2mresourceinstance_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    CHECK(data != NULL);
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+    free(m2mresourceinstance_stub::value);
+    m2mresourceinstance_stub::value = NULL;
+
+    m2mresourceinstance_stub::int_value = 65536;
+    m2mresourceinstance_stub::value = (uint8_t*) malloc(m2mresourceinstance_stub::int_value);
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    CHECK(data != NULL);
+
+    if(data) {
+        free(data);
+        data = 0;
+    }
+
+    m2mbase_stub::name_id_value = -1;
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    CHECK(data == NULL);
+
+    delete res_instance_1;
+    delete res_instance;
+    delete resource;
+    delete instance;
+    delete object;
+
+    free(m2mresourceinstance_stub::value);
+
+    m2mresourceinstance_stub::clear();
+    m2mresource_stub::clear();
+    m2mobjectinstance_stub::clear();
+    m2mobject_stub::clear();
+}
+
+void Test_M2MTLVSerializer::test_serialize_object_instance()
+{
+    M2MObject *object = new M2MObject("1", "1");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object,"1","type", "1");
+
+    uint32_t size = 0;
+    uint8_t *data = 0;
+    m2mbase_stub::name_id_value = 0;
+    M2MResource* resource = new M2MResource(*instance,
+                                            "1",
+                                            "type",
+                                            M2MResourceInstance::STRING,
+                                            false,
+                                            "1");
+
+    M2MResourceInstance* res_instance = new M2MResourceInstance(*resource,
+                                                                "1",
+                                                                "type",
+                                                                M2MResourceInstance::STRING,
+                                                                0,
+                                                                "1",
+                                                                false);
+
+    m2mobjectinstance_stub::resource_list.clear();
+    m2mobjectinstance_stub::resource_list.push_back(resource);
+
+    m2mresource_stub::bool_value = true;
+    m2mresource_stub::list.push_back(res_instance);
+
+    m2mbase_stub::operation = M2MBase::GET_ALLOWED;
+
+    data = serializer->serialize( m2mobjectinstance_stub::resource_list,size);
+    CHECK(data != NULL);
+
+    if(data) {
+        free(data);
+        data = NULL;
+    }
+
+
+    m2mbase_stub::name_id_value = -1;
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    CHECK(data == NULL);
+
+    delete res_instance;
+    delete resource;
+    delete instance;
+    delete object;
+
+    m2mresource_stub::clear();
+    m2mobjectinstance_stub::clear();
+    m2mobject_stub::clear();
+}
+
+void Test_M2MTLVSerializer::test_serialize_resource()
+{
+    M2MObject *object = new M2MObject("1","1");
+    M2MObjectInstance* instance =new M2MObjectInstance(*object,"1","type", "1");
+
+    uint32_t size = 0;
+    uint8_t *data = 0;
+    m2mbase_stub::name_id_value = 0;
+    M2MResource* resource = new M2MResource(*instance,
+                                            "1",
+                                            "type",
+                                            M2MResourceInstance::INTEGER,
+                                            false,
+                                            "1");
+
+    M2MResourceInstance* res_instance = new M2MResourceInstance(*resource,
+                                                                "1",
+                                                                "type",
+                                                                M2MResourceInstance::INTEGER,
+                                                                0,
+                                                                "1",
+                                                                false);
+
+
+    m2mobjectinstance_stub::resource_list.clear();
+    m2mobjectinstance_stub::resource_list.push_back(resource);
+
+    m2mresource_stub::bool_value = true;
+    m2mresource_stub::list.push_back(res_instance);
+
+    m2mbase_stub::operation = M2MBase::GET_ALLOWED;
+
+    data = serializer->serialize( resource,size);
+    CHECK(data != NULL);
+
+    if(data) {
+        free(data);
+        data = NULL;
+    }
+
+    m2mbase_stub::name_id_value = -1;
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    CHECK(data == NULL);
+
+    delete res_instance;
+    delete resource;
+    delete instance;
+    delete object;
+
+    m2mresource_stub::clear();
+    m2mobjectinstance_stub::clear();
+    m2mobject_stub::clear();
+}
+
+void Test_M2MTLVSerializer::test_serialize_resource_instance()
+{
+    M2MObject *object = new M2MObject("1","1");
+    M2MObjectInstance* instance = new M2MObjectInstance(*object,"1","type", "1");
+
+    uint32_t size = 0;
+    uint8_t *data = 0;
+    m2mbase_stub::name_id_value = 0;
+    M2MResource* resource = new M2MResource(*instance,
+                                            "1",
+                                            "type",
+                                            M2MResourceInstance::INTEGER,
+                                            false,
+                                            "1");
+
+    M2MResourceInstance* res_instance = new M2MResourceInstance(*resource,
+                                                                "1",
+                                                                "type",
+                                                                M2MResourceInstance::INTEGER,
+                                                                0,
+                                                                "1",
+                                                                false);
+
+
+    m2mobjectinstance_stub::resource_list.clear();
+    m2mobjectinstance_stub::resource_list.push_back(resource);
+
+    m2mresource_stub::bool_value = true;
+    m2mresource_stub::list.push_back(res_instance);
+
+    m2mbase_stub::operation = M2MBase::GET_ALLOWED;
+
+    data = serializer->serialize( m2mobjectinstance_stub::resource_list,size);
+    CHECK(data != NULL);
+
+    if(data) {
+        free(data);
+        data = NULL;
+    }
+
+
+    m2mbase_stub::name_id_value = -1;
+    data = serializer->serialize( m2mobject_stub::instance_list,size);
+    CHECK(data == NULL);
+
+    delete res_instance;
+    delete resource;
+    delete instance;
+    delete object;
+
+    m2mresource_stub::clear();
+    m2mobjectinstance_stub::clear();
+    m2mobject_stub::clear();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/m2mtlvdeserializer/test_m2mtlvserializer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_M2M_TLV_SERIALIZER_H
+#define TEST_M2M_TLV_SERIALIZER_H
+
+#include "m2mtlvserializer.h"
+
+class Test_M2MTLVSerializer
+{
+public:    
+    Test_M2MTLVSerializer();
+
+    virtual ~Test_M2MTLVSerializer();
+
+    void test_serialize_object();
+
+    void test_serialize_object_instance();
+
+    void test_serialize_resource();
+
+    void test_serialize_resource_instance();
+
+    M2MTLVSerializer *serializer;
+};
+
+#endif // TEST_M2M_TLV_SERIALIZER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/nsdlaccesshelper/CMakeLists.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,30 @@
+if(TARGET_LIKE_LINUX)
+include("../includes.txt")
+add_executable(nsdlaccesshelper
+        "../../../../source/nsdlaccesshelper.cpp"
+        "main.cpp"
+        "nsdlaccesshelpertest.cpp"
+        "test_nsdlaccesshelper.cpp"
+        "../stub/common_stub.cpp"
+        "../stub/m2mnsdlinterface_stub.cpp"
+        "../stub/m2mstring_stub.cpp"
+        "../stub/m2mconnectionhandler_stub.cpp"
+        "../stub/m2mconnectionsecurity_stub.cpp"
+        "../stub/m2mserver_stub.cpp"
+        "../stub/m2mbase_stub.cpp"
+        "../stub/m2mobject_stub.cpp"
+        "../stub/m2mstringbufferbase_stub.cpp"
+)
+
+target_link_libraries(nsdlaccesshelper
+    CppUTest
+    CppUTestExt
+)
+set_target_properties(nsdlaccesshelper
+PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}"
+           LINK_FLAGS "${UTEST_LINK_FLAGS}")
+
+set(binary "nsdlaccesshelper")
+add_test(nsdlaccesshelper ${binary})
+
+endif()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/nsdlaccesshelper/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTest/TestPlugin.h"
+#include "CppUTest/TestRegistry.h"
+#include "CppUTestExt/MockSupportPlugin.h"
+int main(int ac, char** av)
+{
+	return CommandLineTestRunner::RunAllTests(ac, av);
+}
+
+IMPORT_TEST_GROUP( NsdlAccessHelper);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/nsdlaccesshelper/nsdlaccesshelpertest.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//CppUTest includes should be after your and system includes
+#include "CppUTest/TestHarness.h"
+#include "test_nsdlaccesshelper.h"
+
+TEST_GROUP(NsdlAccessHelper)
+{
+  Test_NsdlAccessHelper* nsdl;
+
+  void setup()
+  {
+    nsdl = new Test_NsdlAccessHelper();
+  }
+  void teardown()
+  {
+    delete nsdl;
+  }
+};
+
+
+TEST(NsdlAccessHelper, create)
+{
+    CHECK(nsdl != NULL);
+}
+
+TEST(NsdlAccessHelper, test_nsdl_c_callback)
+{
+    nsdl->test_nsdl_c_callback();
+}
+
+TEST(NsdlAccessHelper, test_nsdl_c_memory_alloc)
+{
+    nsdl->test_nsdl_c_memory_alloc();
+}
+
+TEST(NsdlAccessHelper, test_nsdl_c_memory_free)
+{
+    nsdl->test_nsdl_c_memory_free();
+}
+
+TEST(NsdlAccessHelper, test_nsdl_c_send_to_server)
+{
+    nsdl->test_nsdl_c_send_to_server();
+}
+
+TEST(NsdlAccessHelper, test_nsdl_c_received_from_server)
+{
+    nsdl->test_nsdl_c_received_from_server();
+}
+
+
+TEST(NsdlAccessHelper, test_socket_malloc)
+{
+    nsdl->test_socket_malloc();
+}
+
+TEST(NsdlAccessHelper, test_socket_free)
+{
+    nsdl->test_socket_free();
+}
+
+TEST(NsdlAccessHelper, test_mutex_claim)
+{
+    nsdl->test_mutex_claim();
+}
+
+TEST(NsdlAccessHelper, test_mutex_release)
+{
+    nsdl->test_mutex_release();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/nsdlaccesshelper/test_nsdlaccesshelper.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTest/TestHarness.h"
+#include "test_nsdlaccesshelper.h"
+#include "common_stub.h"
+#include "m2mnsdlinterface_stub.h"
+#include "m2mnsdlobserver.h"
+#include "m2mconnectionobserver.h"
+
+class TestObserver : public M2MNsdlObserver,
+                     public M2MConnectionObserver
+{
+
+public:
+    TestObserver(){}
+    virtual ~TestObserver(){}
+    void coap_message_ready(uint8_t *,
+                            uint16_t,
+                            sn_nsdl_addr_s *){
+        message_ready = true;
+    }
+
+    void client_registered(M2MServer *){
+        registered = true;
+    }
+
+    void registration_updated(const M2MServer &){
+
+    }
+
+    void registration_error(uint8_t, bool retry = false){
+        register_error = true;
+    }
+
+    void client_unregistered(){
+        unregistered = true;
+    }
+
+    void bootstrap_done(M2MSecurity *sec){
+        if(sec) {
+            boot_done = true;
+        }
+    }
+
+    void bootstrap_wait(M2MSecurity *sec){
+        if(sec) {
+            boot_wait = true;
+        }
+    }
+    void bootstrap_error(){
+        boot_error = true;
+    }
+
+    void coap_data_processed(){
+        data_processed = true;
+    }
+
+    void value_updated(M2MBase *){
+    }
+
+    void data_available(uint8_t*,
+                        uint16_t,
+                        const M2MConnectionObserver::SocketAddress &) {
+
+    }
+
+    void socket_error(uint8_t, bool) {
+
+    }
+
+    void address_ready(const M2MConnectionObserver::SocketAddress &,
+                               M2MConnectionObserver::ServerType,
+                               const uint16_t) {
+
+    }
+
+    void data_sent() {
+
+    }
+
+    bool register_error;
+    bool boot_error;
+    bool boot_wait;
+    bool boot_done;
+    bool registered;
+    bool data_processed;
+    bool unregistered;
+    bool message_ready;
+
+};
+
+Test_NsdlAccessHelper::Test_NsdlAccessHelper()
+{
+    observer = new TestObserver();
+}
+
+Test_NsdlAccessHelper::~Test_NsdlAccessHelper()
+{
+    delete observer;
+    observer = NULL;
+
+    clear_list();
+}
+
+void Test_NsdlAccessHelper::test_nsdl_c_callback()
+{
+    CHECK(__nsdl_c_callback(NULL,NULL,NULL,SN_NSDL_PROTOCOL_HTTP) == 0 );
+
+    m2mnsdlinterface_stub::int_value = 1;
+    m2mnsdlinterface_stub::void_value = malloc(1);
+    __nsdl_interface_list.clear();
+    __nsdl_interface_list.push_back(new M2MNsdlInterface(*observer));
+    common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
+    memset(common_stub::coap_header, 0, sizeof(sn_coap_hdr_s));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s *) malloc(sizeof(sn_coap_options_list_s));
+    common_stub::coap_header->options_list_ptr->block1 = 0x0101;
+
+    CHECK(__nsdl_c_callback((nsdl_s*)m2mnsdlinterface_stub::void_value,
+                            common_stub::coap_header,NULL,SN_NSDL_PROTOCOL_HTTP) == 1 );
+    free(common_stub::coap_header->options_list_ptr);
+    free(common_stub::coap_header);
+    free(m2mnsdlinterface_stub::void_value);
+    clear_list();
+}
+
+void Test_NsdlAccessHelper::test_nsdl_c_memory_alloc()
+{
+    void *ptr = __nsdl_c_memory_alloc(6);
+    CHECK(ptr != NULL);
+    free(ptr);
+    ptr = NULL;
+    ptr = __nsdl_c_memory_alloc(UINT16_MAX+1);
+    CHECK(ptr == NULL);
+    free(ptr);
+}
+
+void Test_NsdlAccessHelper::test_nsdl_c_memory_free()
+{
+    void* ptr = malloc(7);
+    __nsdl_c_memory_free(ptr);
+
+    CHECK(ptr != NULL);
+
+    ptr = NULL;
+    //No need to check anything, since memory leak is the test
+}
+
+void Test_NsdlAccessHelper::test_nsdl_c_send_to_server()
+{
+    CHECK(__nsdl_c_send_to_server(NULL, SN_NSDL_PROTOCOL_HTTP, NULL, 0, NULL) == 0);
+
+    m2mnsdlinterface_stub::int_value = 1;
+    m2mnsdlinterface_stub::void_value = malloc(1);
+    __nsdl_interface_list.clear();
+    __nsdl_interface_list.push_back(new M2MNsdlInterface(*observer));
+
+    CHECK(__nsdl_c_send_to_server((nsdl_s*)m2mnsdlinterface_stub::void_value, SN_NSDL_PROTOCOL_HTTP, NULL, 0, NULL) == 1);
+    free(m2mnsdlinterface_stub::void_value);
+    clear_list();
+}
+
+void Test_NsdlAccessHelper::test_nsdl_c_received_from_server()
+{
+    CHECK( 0 == __nsdl_c_received_from_server(NULL, NULL, NULL));
+
+    m2mnsdlinterface_stub::int_value = 1;
+    m2mnsdlinterface_stub::void_value = malloc(1);
+    __nsdl_interface_list.clear();
+    __nsdl_interface_list.push_back(new M2MNsdlInterface(*observer));
+    common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
+    memset(common_stub::coap_header, 0, sizeof(sn_coap_hdr_s));
+    common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s *) malloc(sizeof(sn_coap_options_list_s));
+    common_stub::coap_header->options_list_ptr->block1 = 0x0101;
+    CHECK( 1 == __nsdl_c_received_from_server((nsdl_s*)m2mnsdlinterface_stub::void_value, common_stub::coap_header, NULL));
+    free(common_stub::coap_header->options_list_ptr);
+    free(common_stub::coap_header);
+    free(m2mnsdlinterface_stub::void_value);
+    clear_list();
+}
+
+void Test_NsdlAccessHelper::test_socket_malloc()
+{
+    void *ptr = __socket_malloc(NULL, 6);
+    CHECK(ptr != NULL);
+
+    free(ptr);
+}
+
+void Test_NsdlAccessHelper::test_socket_free()
+{
+    void* ptr = malloc(7);
+    __socket_free(NULL, ptr);
+
+    ptr = NULL;
+    //No need to check anything, since memory leak is the test
+}
+
+void Test_NsdlAccessHelper::test_mutex_claim()
+{
+    __connection_handler = new M2MConnectionHandler(*observer,
+                                                    NULL,
+                                                    M2MInterface::UDP,
+                                                    M2MInterface::LwIP_IPv4);
+    __mutex_claim();
+
+    delete __connection_handler;
+}
+
+void Test_NsdlAccessHelper::test_mutex_release()
+{
+    __connection_handler = new M2MConnectionHandler(*observer,
+                                                    NULL,
+                                                    M2MInterface::UDP,
+                                                    M2MInterface::LwIP_IPv4);
+    __mutex_release();
+
+    delete __connection_handler;
+}
+
+void Test_NsdlAccessHelper::clear_list()
+{
+    M2MNsdlInterfaceList::const_iterator it;
+    it = __nsdl_interface_list.begin();
+    int size = __nsdl_interface_list.size();
+    if (!__nsdl_interface_list.empty()) {
+        for (int i = 0; i < size; i++) {
+                delete __nsdl_interface_list[i];
+                __nsdl_interface_list.erase(i);
+            }
+        __nsdl_interface_list.clear();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/nsdlaccesshelper/test_nsdlaccesshelper.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEST_NSDL_ACCESS_HELPER_H
+#define TEST_NSDL_ACCESS_HELPER_H
+
+#include "nsdlaccesshelper.h"
+#include "common_stub.h"
+
+class TestObserver;
+
+class Test_NsdlAccessHelper
+{
+public:
+    Test_NsdlAccessHelper();
+
+    virtual ~Test_NsdlAccessHelper();
+
+    void test_nsdl_c_callback();
+
+    void test_nsdl_c_memory_alloc();
+
+    void test_nsdl_c_memory_free();
+
+    void test_nsdl_c_send_to_server();
+
+    void test_nsdl_c_received_from_server();
+
+    void test_socket_malloc();
+
+    void test_socket_free();
+
+    void test_mutex_claim();
+
+    void test_mutex_release();
+
+    TestObserver *observer;
+private:
+    void clear_list();
+};
+
+#endif // TEST_NSDL_ACCESS_HELPER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/common_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,455 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "common_stub.h"
+#include "sn_grs.h"
+#include <sys/socket.h>
+
+socket_error_t common_stub::error;
+socket_event_t * common_stub::event;
+socket_addr * common_stub::addr;
+void * common_stub::void_value;
+bool common_stub::visited;
+bool common_stub::bool_value;
+int common_stub::int_value;
+int common_stub::int2_value;
+addrinfo* common_stub::addrinfo;
+uint16_t common_stub::uint_value;
+sn_coap_hdr_s *common_stub::coap_header;
+sn_nsdl_dynamic_resource_parameters_s *common_stub::resource;
+pthread_t common_stub::thread;
+const char* common_stub::char_value;
+
+using namespace mbed;
+using namespace mbed::Sockets::v0;
+
+void common_stub::clear()
+{
+    int_value = -1;
+    int2_value = -1;
+    uint_value = 0;
+    error = SOCKET_ERROR_NONE;
+    event = NULL;
+    addr = NULL;
+    void_value = NULL;
+    visited = false;
+    bool_value= false;
+    coap_header = NULL;
+    resource = NULL;
+    addrinfo = NULL;
+    char_value = NULL;
+}
+
+UDPSocket::UDPSocket(socket_stack_t stack) :Socket(stack)
+{
+}
+
+UDPSocket::~UDPSocket()
+{
+}
+
+socket_error_t UDPSocket::connect(const SocketAddr *, const uint16_t )
+{
+    return common_stub::error;
+}
+
+//SocketAddr
+
+void SocketAddr::setAddr(const struct socket_addr *)
+{
+}
+
+void SocketAddr::setAddr(const SocketAddr *)
+{
+}
+
+bool SocketAddr::SocketAddr::is_v4()
+{
+    return common_stub::bool_value;
+}
+
+void mbed::Ticker::detach()
+{
+    common_stub::visited = true;
+}
+
+
+// SN_NSDL_LIB
+
+struct nsdl_s *sn_nsdl_init	(uint8_t (*sn_nsdl_tx_cb)(struct nsdl_s *, sn_nsdl_capab_e , uint8_t *, uint16_t, sn_nsdl_addr_s *),
+                             uint8_t (*sn_nsdl_rx_cb)(struct nsdl_s *, sn_coap_hdr_s *, sn_nsdl_addr_s *),
+                             void *(*sn_nsdl_alloc)(uint16_t),void (*sn_nsdl_free)(void *))
+{
+    return NULL;
+}
+
+uint16_t sn_nsdl_register_endpoint(struct nsdl_s *, sn_nsdl_ep_parameters_s *)
+{
+    return common_stub::uint_value;
+}
+
+uint16_t sn_nsdl_unregister_endpoint(struct nsdl_s *)
+{
+    return common_stub::uint_value;
+}
+
+uint16_t sn_nsdl_update_registration(struct nsdl_s *,uint8_t *, uint8_t)
+{
+    return common_stub::uint_value;
+}
+
+uint16_t sn_nsdl_send_observation_notification_with_uri_path(struct nsdl_s *, uint8_t *, uint8_t,
+                                                    uint8_t *, uint16_t,
+                                                    uint8_t *, uint8_t,
+                                                    sn_coap_msg_type_e , uint8_t,
+                                                    uint8_t *, uint16_t)
+{
+    return common_stub::uint_value;
+}
+uint16_t sn_nsdl_send_observation_notification(struct nsdl_s *, uint8_t *, uint8_t,
+                                                    uint8_t *, uint16_t,
+                                                    uint8_t *, uint8_t,
+                                                    sn_coap_msg_type_e , uint8_t)
+{
+    return common_stub::uint_value;
+}
+
+int8_t sn_nsdl_set_endpoint_location(struct nsdl_s *, uint8_t *, uint8_t)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_destroy(struct nsdl_s *handle)
+{
+    return common_stub::int_value;
+}
+
+sn_coap_hdr_s *sn_nsdl_build_response(struct nsdl_s *, sn_coap_hdr_s *, uint8_t )
+{
+    return common_stub::coap_header;
+}
+
+sn_nsdl_dynamic_resource_parameters_s *sn_nsdl_get_resource(struct nsdl_s *, uint16_t, uint8_t *)
+{
+    return common_stub::resource;
+}
+
+int8_t sn_nsdl_process_coap(struct nsdl_s *, uint8_t *, uint16_t , sn_nsdl_addr_s *)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_exec(struct nsdl_s *, uint32_t)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_set_retransmission_parameters(struct nsdl_s *, uint8_t, uint8_t)
+{
+    return common_stub::int_value;
+}
+
+void sn_nsdl_release_allocated_coap_msg_mem(struct nsdl_s *, sn_coap_hdr_s *header)
+{
+    if(header && header != common_stub::coap_header){
+        if( header->options_list_ptr){
+            free(header->options_list_ptr);
+            header->options_list_ptr = NULL;
+        }
+        free(header);
+        header = NULL;
+    }
+}
+
+sn_coap_options_list_s *sn_nsdl_alloc_options_list(struct nsdl_s *handle, sn_coap_hdr_s *coap_msg_ptr)
+{
+    if( common_stub::coap_header ) {
+        return common_stub::coap_header->options_list_ptr;
+    }
+    return NULL;
+}
+
+int8_t sn_nsdl_create_resource(struct nsdl_s *, sn_nsdl_dynamic_resource_parameters_s *)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_delete_resource(struct nsdl_s *, uint16_t , uint8_t *)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_put_resource(struct nsdl_s *handle, sn_nsdl_dynamic_resource_parameters_s *res)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_pop_resource(struct nsdl_s *handle, sn_nsdl_dynamic_resource_parameters_s *res)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_send_coap_message(struct nsdl_s *, sn_nsdl_addr_s *, sn_coap_hdr_s *)
+{
+    return common_stub::int_value;
+}
+
+int8_t sn_nsdl_update_resource(struct nsdl_s *, sn_nsdl_dynamic_resource_parameters_s *)
+{
+    return common_stub::int_value;
+}
+
+int8_t set_NSP_address(struct nsdl_s *, uint8_t *, uint8_t, uint16_t, sn_nsdl_addr_type_e)
+{
+    return common_stub::int_value;
+}
+
+uint16_t sn_nsdl_oma_bootstrap(struct nsdl_s *, sn_nsdl_addr_s *,
+                             sn_nsdl_ep_parameters_s *,
+                             sn_nsdl_bs_ep_info_t *)
+{
+    return common_stub::uint_value;
+}
+
+//Coap Headers
+
+sn_coap_hdr_s *sn_coap_build_response(struct coap_s *, sn_coap_hdr_s *, uint8_t )
+{
+    return common_stub::coap_header;
+}
+
+void sn_coap_parser_release_allocated_coap_msg_mem(struct coap_s *, sn_coap_hdr_s *)
+{
+}
+
+int8_t sn_coap_protocol_set_retransmission_parameters(uint8_t, uint8_t)
+{
+    return common_stub::int_value;
+}
+
+// IP6String.h
+uint_fast8_t ip6tos(const void *ip6addr, char *p)
+{
+    // Just set at least something there, or the valgrind will scream when
+    // client tries to use the result string.
+    p[0] = '\0';
+    return 0;
+}
+
+//Socket
+Socket::Socket(const socket_stack_t ) : _irq(this)
+{
+    _socket.api = NULL;
+}
+
+Socket::~Socket()
+{
+}
+
+socket_error_t Socket::open(const socket_address_family_t , const socket_proto_family_t )
+{
+    return common_stub::error;
+}
+
+bool Socket::error_check(socket_error_t )
+{
+    return common_stub::bool_value;
+}
+
+void Socket::_eventHandler(struct socket_event *)
+{
+}
+
+void Socket::setOnError(const ErrorHandler_t &)
+{
+}
+
+void Socket::setOnReadable(const ReadableHandler_t &)
+{
+}
+
+void Socket::setOnSent(const SentHandler_t & )
+{
+}
+
+void Socket::_nvEventHandler(void * )
+{
+}
+
+socket_error_t Socket::getLocalAddr(SocketAddr *) const
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::getLocalPort(uint16_t *) const
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::getRemoteAddr(SocketAddr *) const
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::getRemotePort(uint16_t *) const
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::resolve(const char* , const DNSHandler_t & )
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::bind(const char * , const uint16_t )
+{
+    return common_stub::error;
+}
+socket_error_t Socket::bind(const SocketAddr * , const uint16_t )
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::close()
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::recv(void * , size_t *)
+{
+    return common_stub::error;
+}
+socket_error_t Socket::recv_from(void * , size_t *, SocketAddr *, uint16_t *)
+{
+    return common_stub::error;
+}
+
+socket_error_t Socket::send(const void * , const size_t )
+{
+    return common_stub::error;
+}
+socket_error_t Socket::send_to(const void * , const size_t , const SocketAddr *, uint16_t )
+{
+    return common_stub::error;
+}
+
+bool Socket::isConnected() const {
+    return common_stub::error;
+}
+
+// pthread
+int pthread_equal (pthread_t , pthread_t ) __THROW
+{
+    return common_stub::int2_value;
+}
+
+pthread_t pthread_self (void) __THROW
+{
+    return common_stub::thread;
+}
+
+int pthread_detach (pthread_t) __THROW
+{
+    return common_stub::int_value;
+}
+
+int pthread_create (pthread_t * ,
+                    const pthread_attr_t *,
+                    void *(*__start_routine) (void *),
+                    void *) __THROWNL
+{
+    __start_routine(NULL);
+    return common_stub::int_value;
+}
+
+int pthread_cancel (pthread_t)
+{
+    return common_stub::int_value;
+}
+
+int pthread_join (pthread_t , void **)
+{
+    return common_stub::int_value;
+}
+
+void pthread_exit (void *__retval)/* __attribute__ ((__noreturn__))*/
+{
+
+}
+
+// sys/socket
+#ifndef __SOCKADDR_ARG
+# define __SOCKADDR_ARG		struct sockaddr *__restrict
+#endif
+
+#ifndef __CONST_SOCKADDR_ARG
+# define __CONST_SOCKADDR_ARG	const struct sockaddr *
+#endif
+
+#ifndef __socklen_t_defined
+typedef __socklen_t socklen_t;
+# define __socklen_t_defined
+#endif
+
+int bind (int , __CONST_SOCKADDR_ARG , socklen_t )
+     __THROW
+{
+    return common_stub::int_value;
+}
+
+ssize_t sendto (int , const void *, size_t ,
+                               int , __CONST_SOCKADDR_ARG ,
+                               socklen_t )
+{
+    return common_stub::int_value;
+}
+
+ssize_t recvfrom (int , void * , size_t ,
+             int , __SOCKADDR_ARG ,
+             socklen_t * )
+{
+    return common_stub::int_value;
+}
+
+int getaddrinfo (const char *__restrict,
+            const char *__restrict,
+            const struct addrinfo *__restrict,
+            struct addrinfo **__restrict addr)
+{
+    //*addr = (addrinfo*)malloc(sizeof(addrinfo));
+    //(*addr)->ai_addr = (sockaddr*)malloc(sizeof(sockaddr));
+    *addr = common_stub::addrinfo;
+    return common_stub::int_value;
+}
+
+void freeaddrinfo (struct addrinfo * addr)
+__THROW
+{
+//    free(addr->ai_addr);
+//    free(addr);
+}
+
+const char *inet_ntop (int, const void *__restrict,
+                  char *__restrict, socklen_t)
+     __THROW
+{
+    return common_stub::char_value;
+}
+
+int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
+{
+    return common_stub::int_value;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/common_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef COMMON_STUB_H
+#define COMMON_STUB_H
+
+#include <sys/types.h>
+#include <netdb.h>
+#include "sockets/UDPSocket.h"
+#include "nsdlaccesshelper.h"
+#include "ip6string.h"
+#include "Ticker.h"
+
+//some internal test related stuff
+namespace common_stub
+{
+    extern socket_error_t error;
+    extern socket_event_t* event;
+    extern socket_addr* addr;
+    extern bool visited;
+    extern bool bool_value;
+    extern void* void_value;
+    extern int int_value;
+    extern int int2_value;
+    extern uint16_t uint_value;
+    extern addrinfo* addrinfo;
+    extern sn_coap_hdr_s *coap_header;
+    extern sn_nsdl_dynamic_resource_parameters_s *resource;
+    extern pthread_t thread;
+    extern const char *char_value;
+    void clear();
+}
+
+#endif // COMMON_STUB_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mbase_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,542 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mbase_stub.h"
+#include "m2mstringbufferbase_stub.h"
+#include <assert.h>
+
+uint8_t m2mbase_stub::uint8_value;
+uint16_t m2mbase_stub::uint16_value;
+uint32_t m2mbase_stub::uint32_value;
+uint16_t m2mbase_stub::int_value;
+int32_t m2mbase_stub::name_id_value;
+
+bool m2mbase_stub::bool_value;
+const char *m2mbase_stub::string_value;
+const char *m2mbase_stub::object_instance_name;
+const char *m2mbase_stub::resource_name;
+const char *m2mbase_stub::resource_name_inst;
+M2MBase::BaseType m2mbase_stub::base_type;
+M2MBase::Operation m2mbase_stub::operation;
+M2MBase::Mode m2mbase_stub::mode_value;
+M2MBase::Observation m2mbase_stub::observation_level_value;
+
+void *m2mbase_stub::void_value;
+M2MObservationHandler *m2mbase_stub::observe;
+M2MReportHandler *m2mbase_stub::report;
+bool m2mbase_stub::is_value_updated_function_set;
+uint8_t *m2mbase_stub::object_inst_token;
+uint32_t m2mbase_stub::object_inst_token_len;
+uint8_t *m2mbase_stub::object_token;
+uint32_t m2mbase_stub::object_token_len;
+uint8_t *m2mbase_stub::resource_token;
+uint32_t m2mbase_stub::resource_token_len;
+sn_nsdl_dynamic_resource_parameters_s *m2mbase_stub::nsdl_resource;
+bool m2mbase_stub::find_resource;
+int32_t m2mbase_stub::ret_counter;
+
+void m2mbase_stub::clear()
+{
+    int_value = 0;
+    uint8_value = 0;
+    uint16_value = 0;
+    uint32_value = 0;
+    string_value = NULL;
+    object_instance_name = NULL;
+    resource_name = NULL;
+    resource_name_inst = NULL;
+    name_id_value = -1;
+    mode_value = M2MBase::Static;
+    base_type = M2MBase::Object;
+    observation_level_value = M2MBase::None;
+    bool_value = false;
+    m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
+    void_value = NULL;
+    observe = NULL;
+    report = NULL;
+    is_value_updated_function_set = false;
+    object_token = NULL;
+    object_token_len = 0;
+    resource_token = NULL;
+    resource_token_len = 0;
+    object_inst_token = NULL;
+    object_inst_token_len = 0;
+    find_resource = false;
+    ret_counter = 0;
+}
+
+M2MBase::M2MBase(const String& resource_name,
+                 M2MBase::Mode mode,
+                 const String &resource_type,
+                 char *path,
+                 bool external_blockwise_store)
+:
+  _sn_resource(NULL),
+  _report_handler(NULL),
+  _observation_handler(NULL),
+  _token(NULL),
+  _function_pointer(NULL),
+  _observation_number(0),
+  _token_length(0),
+  _observation_level(M2MBase::None),
+  _is_under_observation(false)
+{
+
+}
+
+M2MBase::M2MBase(const lwm2m_parameters_s *s):
+    _sn_resource((lwm2m_parameters_s*) s),
+    _report_handler(NULL),
+    _observation_handler(NULL),
+    _token(NULL),
+    _function_pointer(NULL),
+    _observation_number(0),
+    _token_length(0),
+    _observation_level(M2MBase::None),
+    _is_under_observation(false)
+{
+}
+
+M2MBase::~M2MBase()
+{
+}
+
+void M2MBase::set_operation(M2MBase::Operation opr)
+{
+    m2mbase_stub::operation = opr;
+}
+
+void M2MBase::set_interface_description(const String &/*desc*/)
+{
+}
+
+void M2MBase::set_resource_type(const String &/*res_type*/)
+{
+}
+
+void M2MBase::set_interface_description(const char */*desc*/)
+{
+}
+
+void M2MBase::set_resource_type(const char */*res_type*/)
+{
+}
+
+void M2MBase::set_coap_content_type(const uint8_t /*con_type*/)
+{
+}
+
+void M2MBase::set_instance_id(const uint16_t /*inst_id*/)
+{
+}
+
+void M2MBase::set_observation_number(const uint16_t /*observation_number*/)
+{
+}
+
+void M2MBase::set_max_age(const uint32_t /*max_age*/)
+{
+}
+
+M2MBase::Operation M2MBase::operation() const
+{
+    return m2mbase_stub::operation;
+}
+
+const char* M2MBase::name() const
+{
+    return m2mbase_stub::string_value;
+}
+
+int32_t M2MBase::name_id() const
+{
+    return m2mbase_stub::name_id_value;
+}
+
+uint16_t M2MBase::instance_id() const
+{
+    return m2mbase_stub::int_value;
+}
+
+const char* M2MBase::interface_description() const
+{
+    return m2mbase_stub::string_value;
+}
+
+const char* M2MBase::resource_type() const
+{
+    return m2mbase_stub::string_value;
+}
+
+uint8_t M2MBase::coap_content_type() const
+{
+    return m2mbase_stub::uint8_value;
+}
+
+uint32_t M2MBase::max_age() const
+{
+    return m2mbase_stub::uint32_value;
+}
+
+void M2MBase::set_observable(bool /*observable*/)
+{
+}
+
+void M2MBase::add_observation_level(M2MBase::Observation)
+{
+}
+
+void M2MBase::remove_observation_level(M2MBase::Observation)
+{
+}
+
+void M2MBase::set_under_observation(bool /*observed*/,
+                                   M2MObservationHandler */*handler*/)
+{
+}
+
+void M2MBase::set_observation_token(const uint8_t */*token*/,
+                                    const uint8_t /*length*/)
+{
+}
+
+bool M2MBase::is_observable() const
+{
+    return m2mbase_stub::bool_value;
+}
+
+M2MBase::Observation M2MBase::observation_level() const
+{
+    return m2mbase_stub::observation_level_value;
+}
+
+void M2MBase::get_observation_token(uint8_t *&token,
+                                    uint32_t &length)
+{
+    length = 0;
+    if(token) {
+        free(token);
+        token = NULL;
+    }
+
+    if (m2mbase_stub::find_resource) {
+        if (m2mbase_stub::ret_counter == 1) {
+            token = (uint8_t *)malloc(m2mbase_stub::object_inst_token_len);
+            if(token) {
+                length = m2mbase_stub::object_inst_token_len;
+                memcpy((uint8_t *)token, (uint8_t *)m2mbase_stub::object_inst_token, length);
+            }
+        } else if (m2mbase_stub::ret_counter == 2) {
+            token = (uint8_t *)malloc(m2mbase_stub::resource_token_len);
+            if(token) {
+                length = m2mbase_stub::resource_token_len;
+                memcpy((uint8_t *)token, (uint8_t *)m2mbase_stub::resource_token, length);
+            }
+        } else {
+            token = (uint8_t *)malloc(m2mbase_stub::object_token_len);
+            if(token) {
+                length = m2mbase_stub::object_token_len;
+                memcpy((uint8_t *)token, (uint8_t *)m2mbase_stub::object_token, length);
+            }
+        }
+        m2mbase_stub::ret_counter++;
+    } else {
+        token = (uint8_t *)malloc(m2mbase_stub::object_token_len);
+        if(token) {
+            length = m2mbase_stub::object_token_len;
+            memcpy((uint8_t *)token, (uint8_t *)m2mbase_stub::object_token, length);
+        }
+    }
+}
+
+void M2MBase::set_base_type(M2MBase::BaseType /*type*/)
+{
+}
+
+M2MBase::BaseType M2MBase::base_type() const
+{
+    return m2mbase_stub::base_type;
+}
+
+M2MBase::Mode M2MBase::mode() const
+{
+    return m2mbase_stub::mode_value;
+}
+
+uint16_t M2MBase::observation_number() const
+{
+    return m2mbase_stub::uint16_value;
+}
+
+bool M2MBase::handle_observation_attribute(const char *query)
+{
+    return m2mbase_stub::bool_value;
+}
+
+void M2MBase::observation_to_be_sent(m2m::Vector<uint16_t>, bool)
+{
+}
+
+void *M2MBase::memory_alloc(uint32_t size)
+{
+    if(size)
+        return malloc(size);
+    else
+        return 0;
+}
+
+void M2MBase::memory_free(void *ptr)
+{
+    if(ptr)
+        free(ptr);
+}
+
+uint8_t* M2MBase::alloc_string_copy(const uint8_t* source, uint32_t size)
+{
+    assert(source != NULL);
+
+    uint8_t* result = (uint8_t*)memory_alloc(size + 1);
+    if (result) {
+        memcpy(result, source, size);
+        result[size] = '\0';
+    }
+    return result;
+}
+
+uint8_t* M2MBase::alloc_copy(const uint8_t* source, uint32_t size)
+{
+    assert(source != NULL);
+
+    uint8_t* result = (uint8_t*)memory_alloc(size);
+    if (result) {
+        memcpy(result, source, size);
+    }
+    return result;
+}
+
+M2MReportHandler* M2MBase::report_handler()
+{
+    return m2mbase_stub::report;
+}
+
+M2MObservationHandler* M2MBase::observation_handler()
+{
+    return m2mbase_stub::observe;
+}
+
+sn_coap_hdr_s* M2MBase::handle_get_request(nsdl_s */*nsdl*/,
+                                           sn_coap_hdr_s */*received_coap_header*/,
+                                           M2MObservationHandler */*observation_handler*/)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+sn_coap_hdr_s* M2MBase::handle_put_request(nsdl_s */*nsdl*/,
+                                           sn_coap_hdr_s */*received_coap_header*/,
+                                           M2MObservationHandler */*observation_handler*/,
+                                           bool &execute_value_updated)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+sn_coap_hdr_s* M2MBase::handle_post_request(nsdl_s */*nsdl*/,
+                                            sn_coap_hdr_s */*received_coap_header*/,
+                                            M2MObservationHandler */*observation_handler*/,
+                                            bool &, sn_nsdl_addr_s *address)
+{
+    //Handled in M2MResource, M2MObjectInstance and M2MObject classes
+    return NULL;
+}
+
+void M2MBase::set_register_uri( bool register_uri)
+{
+}
+
+bool M2MBase::register_uri()
+{
+    return m2mbase_stub::bool_value;
+}
+
+const char* M2MBase::uri_path() const
+{
+    if (m2mbase_stub::find_resource) {
+        m2mbase_stub::ret_counter++;
+        if (m2mbase_stub::ret_counter == 2) {
+            return m2mbase_stub::object_instance_name;
+        } else if (m2mbase_stub::ret_counter == 3) {
+            return m2mbase_stub::resource_name;
+        } else if (m2mbase_stub::ret_counter == 4 || m2mbase_stub::ret_counter == 5) {
+            return m2mbase_stub::resource_name_inst;
+        } else {
+            return m2mbase_stub::string_value;
+        }
+    } else {
+        return m2mbase_stub::string_value;
+    }
+}
+
+bool M2MBase::is_under_observation() const
+{
+    return m2mbase_stub::bool_value;
+}
+
+void M2MBase::set_value_updated_function(value_updated_callback callback)
+{
+
+}
+
+void M2MBase::set_value_updated_function(value_updated_callback2 callback)
+{
+
+}
+
+bool M2MBase::is_value_updated_function_set()
+{
+    return m2mbase_stub::is_value_updated_function_set;
+}
+
+void M2MBase::execute_value_updated(const String& name)
+{
+
+}
+bool M2MBase::build_path(StringBuffer<MAX_PATH_SIZE> &buffer, const char *s1, uint16_t i1, const char *s2, uint16_t i2)
+{
+
+    if(!buffer.ensure_space(strlen(s1) + strlen(s2) + 10 + 3 + 1)){
+        return false;
+    }
+
+    buffer.append(s1);
+    buffer.append('/');
+    buffer.append_int(i1);
+    buffer.append('/');
+    buffer.append(s2);
+    buffer.append('/');
+    buffer.append_int(i2);
+
+    return true;
+
+}
+
+bool M2MBase::build_path(StringBuffer<MAX_PATH_SIZE_2> &buffer, const char *s1, uint16_t i1, const char *s2)
+{
+
+    if(!buffer.ensure_space(strlen(s1) + strlen(s2) + 5 + 2 + 1)){
+        return false;
+    }
+
+    buffer.append(s1);
+    buffer.append('/');
+    buffer.append_int(i1);
+    buffer.append('/');
+    buffer.append(s2);
+
+    return true;
+
+}
+
+bool M2MBase::build_path(StringBuffer<MAX_PATH_SIZE_3> &buffer, const char *s1, uint16_t i1, uint16_t i2)
+{
+
+    if(!buffer.ensure_space(strlen(s1) + 10 + 2 + 1)){
+        return false;
+    }
+
+    buffer.append(s1);
+    buffer.append('/');
+    buffer.append_int(i1);
+    buffer.append('/');
+    buffer.append_int(i2);
+
+    return true;
+
+}
+
+bool M2MBase::build_path(StringBuffer<MAX_PATH_SIZE_4> &buffer, const char *s1, uint16_t i1)
+{
+
+    if(!buffer.ensure_space(strlen(s1) + 5 + 1 + 1)){
+        return false;
+    }
+
+    buffer.append(s1);
+    buffer.append('/');
+    buffer.append_int(i1);
+
+    return true;
+
+}
+
+sn_nsdl_dynamic_resource_parameters_s* M2MBase::get_nsdl_resource()
+{
+    return m2mbase_stub::nsdl_resource;
+}
+
+char* M2MBase::stringdup(const char* src)
+{
+
+}
+
+char* M2MBase::create_path(const M2MObject &parent, uint16_t object_instance)
+{
+
+}
+
+char* M2MBase::create_path(const M2MObject &parent, const char *name)
+{
+
+}
+
+char* M2MBase::create_path(const M2MResource &parent, uint16_t resource_instance)
+{
+
+}
+
+char* M2MBase::create_path(const M2MResource &parent, const char *name)
+{
+
+}
+
+char* M2MBase::create_path(const M2MObjectInstance &parent, const char *name)
+{
+
+}
+
+void M2MBase::set_observation_handler(M2MObservationHandler *handler)
+{
+
+}
+
+size_t M2MBase::resource_name_length() const
+{
+
+}
+
+bool M2MBase::validate_string_length(const String &string, size_t min_length, size_t max_length)
+{
+    return m2mbase_stub::bool_value;
+}
+
+bool M2MBase::validate_string_length(const char* string, size_t min_length, size_t max_length)
+{
+    return m2mbase_stub::bool_value;
+}
+
+M2MReportHandler* M2MBase::create_report_handler()
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mbase_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_BASE_STUB_H
+#define M2M_BASE_STUB_H
+
+#include "m2mbase.h"
+#include "nsdlaccesshelper_stub.h"
+static sn_nsdl_static_resource_parameters_s params_static = {
+    (char*)"",      // resource_type_ptr
+    (char*)"",                     // interface_description_ptr
+    (uint8_t*)"",    // path
+    (uint8_t*)"value",           // resource
+    0,                      // pathlen
+    5,                      // resourcelen
+    false,                  // external_memory_block
+    SN_GRS_DYNAMIC,         // mode
+    false                   // free_on_delete
+};
+
+static sn_nsdl_dynamic_resource_parameters_s params_dynamic = {
+    __nsdl_c_callback,
+    &params_static,
+    {NULL, NULL},                     // link
+    0, // coap_content_type
+    M2MBase::PUT_ALLOWED,   // access
+    0,                      // registered
+    false,                  // publish_uri
+    false,                  // free_on_delete
+    true                    // observable
+};
+
+const static M2MBase::lwm2m_parameters params = {
+    0, // max_age
+    1, // instance_id
+    0, // name_id
+    (char*)"", // name
+    &params_dynamic,
+    M2MBase::Resource, // base_type
+    false // free_on_delete
+};
+
+//some internal test related stuff
+namespace m2mbase_stub
+{
+    extern uint8_t uint8_value;
+    extern uint16_t uint16_value;
+    extern uint32_t uint32_value;
+    extern uint16_t int_value;
+    extern int32_t name_id_value;
+    extern const char *string_value;
+    extern const char *object_instance_name;
+    extern const char *resource_name;
+    extern const char *resource_name_inst;
+    extern bool bool_value;
+    extern M2MBase::BaseType base_type;
+    extern M2MBase::Mode mode_value;
+    extern M2MBase::Operation operation;
+    extern void *void_value;
+    extern M2MObservationHandler *observe;
+    extern M2MReportHandler *report;
+    extern M2MBase::Observation observation_level_value;
+    extern bool is_value_updated_function_set;
+    void clear();
+    extern uint8_t* object_token;
+    extern uint32_t object_token_len;
+    extern uint8_t* resource_token;
+    extern uint32_t resource_token_len;
+    extern uint8_t* object_inst_token;
+    extern uint32_t object_inst_token_len;
+    extern sn_nsdl_dynamic_resource_parameters_s *nsdl_resource;
+    extern bool find_resource;
+    extern int32_t ret_counter;
+}
+
+#endif // M2M_BASE_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mblockmessage_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mblockmessage_stub.h"
+
+bool m2mblockmessage_stub::is_block_message;
+bool m2mblockmessage_stub::is_last_block;
+void m2mblockmessage_stub::clear()
+{
+
+}
+
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2mblockmessage.h"
+#include <assert.h>
+#include <cstdlib>
+#include <cstring>
+M2MBlockMessage::M2MBlockMessage()
+{
+}
+
+M2MBlockMessage::~M2MBlockMessage()
+{
+
+}
+
+void M2MBlockMessage::set_message_info(sn_coap_hdr_s *coap_header)
+{
+
+}
+
+void M2MBlockMessage::clear_values()
+{
+
+}
+
+bool M2MBlockMessage::is_block_message() const
+{
+    return m2mblockmessage_stub::is_block_message;
+}
+
+uint16_t M2MBlockMessage::block_number() const
+{
+
+}
+
+uint32_t M2MBlockMessage::total_message_size() const
+{
+
+}
+
+bool M2MBlockMessage::is_last_block() const
+{
+    return m2mblockmessage_stub::is_last_block;
+}
+
+uint8_t* M2MBlockMessage::block_data() const
+{
+
+}
+
+uint32_t M2MBlockMessage::block_data_len() const
+{
+
+}
+
+M2MBlockMessage::Error M2MBlockMessage::error_code() const
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mblockmessage_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_BLOCKMESSAGE_STUB_H
+#define M2M_BLOCKMESSAGE_STUB_H
+
+#include "m2mblockmessage.h"
+
+//some internal test related stuff
+namespace m2mblockmessage_stub
+{
+    extern bool is_block_message;
+    extern bool is_last_block;
+    void clear();
+}
+
+#endif // M2M_BLOCKMESSAGE_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mconnectionhandler_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mconnectionhandler_stub.h"
+#include "m2mconnectionsecurity.h"
+#include "common_stub.h"
+
+int m2mconnectionhandler_stub::int_value;
+uint16_t m2mconnectionhandler_stub::uint_value;
+bool m2mconnectionhandler_stub::bool_value;
+M2MConnectionSecurity* secu = NULL;
+
+void m2mconnectionhandler_stub::clear()
+{
+    int_value = -1;
+    uint_value = 0;
+    bool_value = false;
+}
+
+M2MConnectionHandler::M2MConnectionHandler(M2MConnectionObserver &observer,
+                                           M2MConnectionSecurity* sec,
+                                           M2MInterface::BindingMode,
+                                           M2MInterface::NetworkStack)
+:_observer(observer)
+{
+    if (secu) {
+        delete secu;
+        secu = NULL;
+    }
+    secu = sec;
+}
+
+M2MConnectionHandler::~M2MConnectionHandler()
+{
+    if( secu ){
+        delete secu;
+        secu = NULL;
+    }
+}
+
+bool M2MConnectionHandler::bind_connection(const uint16_t)
+{
+    return m2mconnectionhandler_stub::bool_value;
+}
+
+bool M2MConnectionHandler::resolve_server_address(const String&,
+                                                  const uint16_t,
+                                                  M2MConnectionObserver::ServerType,
+                                                  const M2MSecurity* )
+{
+    return m2mconnectionhandler_stub::bool_value;
+}
+
+bool M2MConnectionHandler::start_listening_for_data()
+{
+    return m2mconnectionhandler_stub::bool_value;
+}
+
+bool M2MConnectionHandler::send_data(uint8_t *,
+                                     uint16_t ,
+                                     sn_nsdl_addr_s *)
+{
+    return m2mconnectionhandler_stub::bool_value;
+}
+
+void M2MConnectionHandler::stop_listening()
+{
+}
+
+int M2MConnectionHandler::send_to_socket(const unsigned char *, size_t ){
+    return m2mconnectionhandler_stub::int_value;
+}
+
+int M2MConnectionHandler::receive_from_socket(unsigned char *, size_t){
+    return m2mconnectionhandler_stub::int_value;
+}
+
+void M2MConnectionHandler::set_platform_network_handler(void *)
+{
+}
+
+void M2MConnectionHandler::claim_mutex()
+{
+}
+
+void M2MConnectionHandler::release_mutex()
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mconnectionhandler_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_CONNECTION_HANDLER_IMPL_MBED_STUB_H
+#define M2M_CONNECTION_HANDLER_IMPL_MBED_STUB_H
+
+#include "m2mconnectionhandler.h"
+
+//some internal test related stuff
+namespace m2mconnectionhandler_stub
+{
+    extern int int_value;
+    extern uint16_t uint_value;
+    extern bool bool_value;
+    void clear();
+}
+
+#endif // M2M_CONNECTION_HANDLER_IMPL_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mconnectionsecurity_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "m2mconnectionhandler.h"
+#include "m2mconnectionsecurity.h"
+#include "m2mtimer.h"
+#include "m2msecurity.h"
+#include <string.h>
+#include "m2mconnectionsecurity_stub.h"
+
+bool m2mconnectionsecurityimpl_stub::use_inc_int;
+int m2mconnectionsecurityimpl_stub::inc_int_value;
+int m2mconnectionsecurityimpl_stub::int_value;
+
+void m2mconnectionsecurityimpl_stub::clear()
+{
+    int_value = -1;
+    use_inc_int = false;
+    inc_int_value = 0;
+}
+
+M2MConnectionSecurity::M2MConnectionSecurity(M2MConnectionSecurity::SecurityMode mode)
+{
+
+}
+
+M2MConnectionSecurity::~M2MConnectionSecurity(){
+}
+
+void M2MConnectionSecurity::reset(){
+}
+
+int M2MConnectionSecurity::init(const M2MSecurity *security){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::connect(M2MConnectionHandler* connHandler){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::start_connecting_non_blocking(M2MConnectionHandler* connHandler)
+{
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::continue_connecting()
+{
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::send_message(unsigned char *message, int len){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+int M2MConnectionSecurity::read(unsigned char* buffer, uint16_t len){
+    if(m2mconnectionsecurityimpl_stub::use_inc_int){
+        return m2mconnectionsecurityimpl_stub::inc_int_value++;
+    }
+    return m2mconnectionsecurityimpl_stub::int_value;
+}
+
+void M2MConnectionSecurity::set_random_number_callback(random_number_cb)
+{
+
+}
+
+void M2MConnectionSecurity::set_entropy_callback(mbedtls_entropy)
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mconnectionsecurity_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_CONNECTION_SECURITY_IMPL_STUB_H
+#define M2M_CONNECTION_SECURITY_IMPL_STUB_H
+
+//some internal test related stuff
+namespace m2mconnectionsecurityimpl_stub
+{
+    extern int int_value;
+    extern bool use_inc_int;
+    extern int inc_int_value;
+    void clear();
+}
+
+#endif // M2M_CONNECTION_SECURITY_IMPL_STUB_H
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mdevice_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mdevice_stub.h"
+
+uint32_t m2mdevice_stub::int_value;
+bool m2mdevice_stub::bool_value;
+M2MResource* m2mdevice_stub::resource;
+String *m2mdevice_stub::string_value;
+
+void m2mdevice_stub::clear()
+{
+    int_value = -1;
+    bool_value = false;
+    *string_value = "";
+    resource = NULL;
+}
+
+M2MDevice::M2MDevice(char *path)
+: M2MObject("3", path)
+{
+    m2mdevice_stub::string_value = new String("");
+}
+
+M2MDevice::~M2MDevice()
+{
+    delete m2mdevice_stub::string_value;
+}
+
+M2MDevice* M2MDevice::get_instance()
+{
+    return new M2MDevice("3");
+}
+
+void M2MDevice::delete_instance()
+{
+}
+
+M2MResource* M2MDevice::create_resource(DeviceResource, const String &)
+{
+    return m2mdevice_stub::resource;
+}
+
+M2MResource* M2MDevice::create_resource(DeviceResource)
+{
+    return m2mdevice_stub::resource;
+}
+
+bool M2MDevice::delete_resource(DeviceResource)
+{
+    return m2mdevice_stub::bool_value;
+}
+
+bool M2MDevice::delete_resource_instance(DeviceResource, uint16_t)
+{
+    return m2mdevice_stub::bool_value;
+}
+
+bool M2MDevice::set_resource_value(DeviceResource,
+                                   const String &,
+                                   uint16_t )
+{
+    return m2mdevice_stub::bool_value;
+}
+
+bool M2MDevice::set_resource_value(DeviceResource,
+                                       int64_t,
+                                       uint16_t)
+{
+    return m2mdevice_stub::bool_value;
+}
+
+String M2MDevice::resource_value_string(DeviceResource,
+                                        uint16_t) const
+{
+    return *m2mdevice_stub::string_value;
+}
+
+int64_t M2MDevice::resource_value_int(DeviceResource,
+                                      uint16_t) const
+{
+    return m2mdevice_stub::int_value;
+}
+
+bool M2MDevice::is_resource_present(DeviceResource) const
+{
+    return m2mdevice_stub::bool_value;
+}
+
+uint16_t M2MDevice::per_resource_count(DeviceResource) const
+{
+    return (uint16_t)m2mdevice_stub::int_value;
+}
+
+uint16_t M2MDevice::total_resource_count() const
+{
+    return (uint16_t)m2mdevice_stub::int_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mdevice_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_DEVICE_STUB_H
+#define M2M_DEVICE_STUB_H
+
+#include "m2mdevice.h"
+
+//some internal test related stuff
+namespace m2mdevice_stub
+{
+    extern uint32_t int_value;
+    extern M2MResource* resource;
+    extern String *string_value;
+    extern bool bool_value;
+    void clear();
+}
+
+#endif // M2M_DEVICE_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mfirmware_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mfirmware_stub.h"
+bool m2mfirmware_stub::has_value;
+uint32_t m2mfirmware_stub::int_value;
+bool m2mfirmware_stub::bool_value;
+M2MResource* m2mfirmware_stub::resource;
+String *m2mfirmware_stub::string_value;
+
+void m2mfirmware_stub::clear()
+{
+    int_value = -1;
+    bool_value = false;
+    *string_value = "";
+    resource = NULL;
+    has_value = false;
+}
+
+M2MFirmware::M2MFirmware()
+: M2MObject("5", "5")
+{
+    m2mfirmware_stub::string_value = new String("");
+}
+
+M2MFirmware::~M2MFirmware()
+{
+    delete m2mfirmware_stub::string_value;
+}
+
+M2MFirmware* M2MFirmware::get_instance()
+{
+    return new M2MFirmware();
+}
+
+void M2MFirmware::delete_instance()
+{
+}
+
+M2MResource* M2MFirmware::create_resource(FirmwareResource, const String &)
+{
+    return m2mfirmware_stub::resource;
+}
+
+bool M2MFirmware::set_resource_value(FirmwareResource,
+                                     const uint8_t *,
+                                     const uint32_t)
+{
+    return m2mfirmware_stub::bool_value;
+}
+
+
+uint32_t M2MFirmware::resource_value_buffer(FirmwareResource,
+                               uint8_t *&value) const
+{
+    if( m2mfirmware_stub::has_value ){
+        value = (uint8_t *)malloc(5);
+        return 5;
+    }
+    return m2mfirmware_stub::int_value;
+}
+
+bool M2MFirmware::delete_resource(FirmwareResource)
+{
+    return m2mfirmware_stub::bool_value;
+}
+
+bool M2MFirmware::set_resource_value(FirmwareResource,
+                                   const String &)
+{
+    return m2mfirmware_stub::bool_value;
+}
+
+bool M2MFirmware::set_resource_value(FirmwareResource,
+                                       int64_t)
+{
+    return m2mfirmware_stub::bool_value;
+}
+
+String M2MFirmware::resource_value_string(FirmwareResource) const
+{
+    return *m2mfirmware_stub::string_value;
+}
+
+int64_t M2MFirmware::resource_value_int(FirmwareResource) const
+{
+    return m2mfirmware_stub::int_value;
+}
+
+bool M2MFirmware::is_resource_present(FirmwareResource) const
+{
+    return m2mfirmware_stub::bool_value;
+}
+
+uint16_t M2MFirmware::per_resource_count(FirmwareResource) const
+{
+    return (uint16_t)m2mfirmware_stub::int_value;
+}
+
+uint16_t M2MFirmware::total_resource_count() const
+{
+    return (uint16_t)m2mfirmware_stub::int_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mfirmware_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_FIRMWARE_STUB_H
+#define M2M_FIRMWARE_STUB_H
+
+#include "m2mfirmware.h"
+
+//some internal test related stuff
+namespace m2mfirmware_stub
+{
+    extern uint32_t int_value;
+    extern M2MResource* resource;
+    extern String *string_value;
+    extern bool bool_value;
+    void clear();
+    extern bool has_value;
+}
+
+#endif // M2M_FIRMWARE_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2minterfaceimpl_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2minterfaceimpl_stub.h"
+#include "common_stub.h"
+
+u_int8_t m2minterfaceimpl_stub::int_value;
+bool m2minterfaceimpl_stub::bool_value;
+
+void m2minterfaceimpl_stub::clear()
+{
+    int_value = 0;
+    bool_value = false;
+}
+
+M2MInterfaceImpl::M2MInterfaceImpl(M2MInterfaceObserver& observer,
+                                   const String &,
+                                   const String &,
+                                   const int32_t,
+                                   const uint16_t,
+                                   const String &,
+                                   M2MInterface::BindingMode mode,
+                                   M2MInterface::NetworkStack stack,
+                                   const String &)
+: _observer(observer),
+  _current_state(0),
+  _max_states( STATE_MAX_STATES ),
+  _event_generated(false),
+  _event_data(NULL),
+  _nsdl_interface(*this),
+  _queue_sleep_timer(*this),
+  _retry_timer(*this),
+  _connection_handler(*this, NULL, mode, stack)
+{
+}
+
+M2MInterfaceImpl::~M2MInterfaceImpl()
+{
+}
+void M2MInterfaceImpl::bootstrap(M2MSecurity *)
+{
+}
+
+void M2MInterfaceImpl::cancel_bootstrap()
+{
+}
+
+void M2MInterfaceImpl::register_object(M2MSecurity *, const M2MObjectList &)
+{
+}
+
+void M2MInterfaceImpl::update_registration(M2MSecurity *, const uint32_t)
+{
+}
+void M2MInterfaceImpl::update_registration(M2MSecurity *,
+                                           const M2MObjectList &,
+                                           const uint32_t)
+{
+}
+
+void M2MInterfaceImpl::unregister_object(M2MSecurity*)
+{
+}
+
+void M2MInterfaceImpl::set_queue_sleep_handler(callback_handler)
+{
+
+}
+
+void M2MInterfaceImpl::set_platform_network_handler(void *)
+{
+
+}
+
+void M2MInterfaceImpl::set_random_number_callback(random_number_cb)
+{
+
+}
+
+void M2MInterfaceImpl::set_entropy_callback(entropy_cb)
+{
+
+}
+
+void M2MInterfaceImpl::coap_message_ready(uint8_t *,
+                                uint16_t ,
+                                sn_nsdl_addr_s *)
+{
+
+}
+
+void M2MInterfaceImpl::client_registered(M2MServer*)
+{
+
+}
+
+void M2MInterfaceImpl::registration_error(uint8_t, bool)
+{
+
+}
+
+void M2MInterfaceImpl::client_unregistered()
+{
+
+}
+
+void M2MInterfaceImpl::bootstrap_done(M2MSecurity *)
+{
+
+}
+
+void M2MInterfaceImpl::bootstrap_wait(M2MSecurity *)
+{
+
+}
+
+void M2MInterfaceImpl::bootstrap_error()
+{
+
+}
+
+void M2MInterfaceImpl::coap_data_processed()
+{
+
+}
+
+void M2MInterfaceImpl::data_available(uint8_t*,
+                            uint16_t,
+                            const M2MConnectionObserver::SocketAddress &)
+{
+
+}
+
+void M2MInterfaceImpl::socket_error(uint8_t, bool)
+{
+
+}
+
+void M2MInterfaceImpl::address_ready(const M2MConnectionObserver::SocketAddress &,
+                           M2MConnectionObserver::ServerType,
+                           const uint16_t)
+{
+
+}
+
+void M2MInterfaceImpl::data_sent()
+{
+}
+
+void M2MInterfaceImpl::timer_expired(M2MTimerObserver::Type)
+{
+
+}
+
+void M2MInterfaceImpl::registration_updated(const M2MServer &)
+{
+}
+
+void M2MInterfaceImpl::value_updated(M2MBase *)
+{
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2minterfaceimpl_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_INTERFACE_IMPL_STUB_H
+#define M2M_INTERFACE_IMPL_STUB_H
+
+#include "m2minterfaceimpl.h"
+
+//some internal test related stuff
+namespace m2minterfaceimpl_stub
+{
+    extern u_int8_t int_value;
+    extern bool bool_value;
+    void clear();
+}
+
+#endif // M2M_INTERFACE_IMPL_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mnsdlinterface_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mnsdlinterface_stub.h"
+
+
+bool m2mnsdlinterface_stub::bool_value;
+uint32_t m2mnsdlinterface_stub::int_value;
+void * m2mnsdlinterface_stub::void_value;
+String *m2mnsdlinterface_stub::string_value;
+
+void m2mnsdlinterface_stub::clear()
+{
+    bool_value = false;
+    int_value = 0;
+    *string_value = "";
+    void_value = NULL;
+}
+
+M2MNsdlInterface::M2MNsdlInterface(M2MNsdlObserver &observer)
+: _observer(observer)
+{
+    //m2mnsdlinterface_stub::string_value = new String("");
+}
+
+M2MNsdlInterface::~M2MNsdlInterface()
+{
+    //delete m2mnsdlinterface_stub::string_value;
+}
+
+bool M2MNsdlInterface::initialize()
+{
+    return m2mnsdlinterface_stub::bool_value;
+}
+
+void M2MNsdlInterface::create_endpoint(const String &,
+                                       const String &,
+                                       const int32_t,
+                                       const String &,
+                                       const uint8_t,
+                                       const String &)
+{
+}
+
+void M2MNsdlInterface::delete_endpoint()
+{
+}
+
+bool M2MNsdlInterface::create_nsdl_list_structure(const M2MObjectList &)
+{
+    return m2mnsdlinterface_stub::bool_value;
+}
+
+bool M2MNsdlInterface::remove_nsdl_resource(M2MBase* base)
+{
+    return m2mnsdlinterface_stub::bool_value;
+}
+
+bool M2MNsdlInterface::create_bootstrap_resource(sn_nsdl_addr_s *, const String& name)
+{
+    return m2mnsdlinterface_stub::bool_value;
+}
+
+bool M2MNsdlInterface::send_register_message(uint8_t*,
+                                             uint8_t,
+                                             const uint16_t,
+                                             sn_nsdl_addr_type_e)
+{
+    return m2mnsdlinterface_stub::bool_value;
+}
+
+bool M2MNsdlInterface::send_update_registration(const uint32_t)
+{
+    return m2mnsdlinterface_stub::bool_value;
+}
+
+bool M2MNsdlInterface::send_unregister_message()
+{
+    return m2mnsdlinterface_stub::bool_value;
+}
+
+void *M2MNsdlInterface::memory_alloc(uint16_t size)
+{
+    return malloc(size);
+}
+
+void M2MNsdlInterface::memory_free(void *ptr)
+{
+    free(ptr);
+    ptr = NULL;
+}
+
+uint8_t M2MNsdlInterface::send_to_server_callback(struct nsdl_s *,
+                                                  sn_nsdl_capab_e,
+                                                  uint8_t *,
+                                                  uint16_t,
+                                                  sn_nsdl_addr_s *)
+{
+    return (uint8_t)m2mnsdlinterface_stub::int_value;
+}
+
+uint8_t M2MNsdlInterface::received_from_server_callback(struct nsdl_s *,
+                                                        sn_coap_hdr_s *,
+                                                        sn_nsdl_addr_s *)
+{
+    return (uint8_t)m2mnsdlinterface_stub::int_value;
+}
+
+uint8_t M2MNsdlInterface::resource_callback(struct nsdl_s *,
+                                            sn_coap_hdr_s *,
+                                            sn_nsdl_addr_s *,
+                                            sn_nsdl_capab_e)
+{
+    return (uint8_t)m2mnsdlinterface_stub::int_value;
+}
+
+
+bool M2MNsdlInterface::process_received_data(uint8_t *,
+                                             uint16_t ,
+                                             sn_nsdl_addr_s *)
+{
+    return m2mnsdlinterface_stub::bool_value;
+}
+
+void M2MNsdlInterface::stop_timers()
+{
+
+}
+
+void M2MNsdlInterface::timer_expired(M2MTimerObserver::Type)
+{
+}
+
+void M2MNsdlInterface::observation_to_be_sent(M2MBase *, uint16_t, Vector<uint16_t>, bool)
+{
+}
+
+void M2MNsdlInterface::send_delayed_response(M2MBase *)
+{
+}
+
+void M2MNsdlInterface::resource_to_be_deleted(M2MBase *)
+{
+}
+
+void M2MNsdlInterface::value_updated(M2MBase *, const String&)
+{
+}
+
+void M2MNsdlInterface::remove_object(M2MBase *)
+{
+}
+
+nsdl_s* M2MNsdlInterface::get_nsdl_handle()
+{
+    return (nsdl_s*) m2mnsdlinterface_stub::void_value;
+}
+
+void M2MNsdlInterface::handle_bootstrap_put_message(sn_coap_hdr_s *coap_header, sn_nsdl_addr_s *address)
+{
+
+}
+
+void M2MNsdlInterface::handle_bootstrap_finished(sn_coap_hdr_s *coap_header,sn_nsdl_addr_s *address)
+{
+
+}
+
+void M2MNsdlInterface::handle_bootstrap_delete(sn_coap_hdr_s *coap_header,sn_nsdl_addr_s *address)
+{
+
+}
+
+bool M2MNsdlInterface::parse_bootstrap_message(sn_coap_hdr_s *coap_header, bool is_security_object)
+{
+
+}
+
+bool M2MNsdlInterface::validate_security_object()
+{
+
+}
+
+void M2MNsdlInterface::handle_bootstrap_error()
+{
+
+}
+
+const String& M2MNsdlInterface::endpoint_name() const
+{
+    return *m2mnsdlinterface_stub::string_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mnsdlinterface_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_NSDL_INTERFACE_STUB_H
+#define M2M_NSDL_INTERFACE_STUB_H
+
+#include "m2mnsdlinterface.h"
+
+//some internal test related stuff
+namespace m2mnsdlinterface_stub
+{
+    extern bool bool_value;
+    extern uint32_t int_value;
+    extern void* void_value;
+    extern String *string_value;
+    void clear();
+}
+
+#endif // M2M_NSDL_INTERFACE_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mobject_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mobject_stub.h"
+
+u_int16_t m2mobject_stub::int_value;
+bool m2mobject_stub::bool_value;
+M2MObjectInstance* m2mobject_stub::inst;
+
+// The statically initialized object list must be bigh enough to cater
+// for all the tests, or the utest framework will complain for memory leak.
+M2MObjectInstanceList m2mobject_stub::instance_list(12);
+
+M2MBase::BaseType m2mobject_stub::base_type;
+sn_coap_hdr_s *m2mobject_stub::header;
+
+void m2mobject_stub::clear()
+{
+    int_value = 0;
+    bool_value = false;
+    m2mobject_stub::base_type = M2MBase::Object;
+    instance_list.clear();
+    header = NULL;
+}
+
+M2MObject::M2MObject(const String &object_name, char *path, bool external_blockwise_store)
+: M2MBase(object_name,
+          M2MBase::Dynamic,
+          "",
+          path,
+          external_blockwise_store),
+  _max_instance_count(65535)
+{
+
+}
+
+M2MObject::M2MObject(const M2MBase::lwm2m_parameters_s* static_res)
+: M2MBase(static_res),
+  _max_instance_count(65535)
+{
+
+}
+
+M2MObject::~M2MObject()
+{
+}
+
+M2MObjectInstance* M2MObject::create_object_instance(uint16_t instance_id)
+{
+    return m2mobject_stub::inst;
+}
+
+bool M2MObject::remove_object_instance(uint16_t)
+{
+    return m2mobject_stub::bool_value;
+}
+
+M2MObjectInstance* M2MObject::object_instance(uint16_t) const
+{
+    return m2mobject_stub::inst;
+}
+
+const M2MObjectInstanceList& M2MObject::instances() const
+{
+    return m2mobject_stub::instance_list;
+}
+
+uint16_t M2MObject::instance_count() const
+{
+    return m2mobject_stub::int_value;
+}
+
+M2MBase::BaseType M2MObject::base_type() const
+{
+    return m2mobject_stub::base_type;
+}
+
+void M2MObject::add_observation_level(M2MBase::Observation)
+{
+
+}
+
+void M2MObject::remove_observation_level(M2MBase::Observation)
+{
+
+}
+
+sn_coap_hdr_s* M2MObject::handle_get_request(nsdl_s *,
+                                  sn_coap_hdr_s *,
+                                  M2MObservationHandler *)
+{
+    return m2mobject_stub::header;
+}
+
+sn_coap_hdr_s* M2MObject::handle_put_request(nsdl_s *,
+                                  sn_coap_hdr_s *,
+                                  M2MObservationHandler *,
+                                  bool &execute)
+{
+    execute = m2mobject_stub::bool_value;
+    return m2mobject_stub::header;
+}
+
+sn_coap_hdr_s* M2MObject::handle_post_request(nsdl_s *,
+                                   sn_coap_hdr_s *,
+                                   M2MObservationHandler *,
+                                   bool &,
+                                   sn_nsdl_addr_s *)
+{
+    return m2mobject_stub::header;
+}
+
+void M2MObject::notification_update(uint16_t obj_instance_id)
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mobject_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_OBJECT_STUB_H
+#define M2M_OBJECT_STUB_H
+
+#include "m2mobject.h"
+#include "m2mobjectinstance.h"
+
+//some internal test related stuff
+namespace m2mobject_stub
+{
+    extern u_int16_t int_value;
+    extern M2MObjectInstance* inst;
+    extern bool bool_value;
+    extern M2MObjectInstanceList instance_list;
+    extern M2MBase::BaseType base_type;
+    extern sn_coap_hdr_s *header;
+    void clear();
+}
+
+#endif // M2M_OBJECT_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mobjectinstance_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,208 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mobjectinstance_stub.h"
+
+u_int8_t m2mobjectinstance_stub::int_value;
+bool m2mobjectinstance_stub::bool_value;
+M2MResource* m2mobjectinstance_stub::resource;
+M2MResource* m2mobjectinstance_stub::create_resource;
+
+// The statically initialized list must be bigh enough to cater
+// for all the tests, or the utest framework will complain for memory leak.
+M2MResourceList m2mobjectinstance_stub::resource_list(12);
+
+M2MResourceInstance* m2mobjectinstance_stub::create_resource_instance;
+sn_coap_hdr_s* m2mobjectinstance_stub::header;
+M2MBase::BaseType m2mobjectinstance_stub::base_type;
+
+
+void m2mobjectinstance_stub::clear()
+{
+    int_value = 0;
+    bool_value = false;
+    resource = NULL;
+    create_resource = NULL;
+    create_resource_instance = NULL;
+    header = NULL;
+    base_type = M2MBase::ObjectInstance;
+    resource_list.clear();
+}
+
+M2MObjectInstance::M2MObjectInstance(M2MObject& parent, const String &object_name,
+                                     const String &resource_type,
+                                     char *path,
+                                     bool external_blockwise_store)
+: M2MBase(object_name,
+          M2MBase::Dynamic,
+          resource_type,
+          path,
+          external_blockwise_store),
+  _parent(parent)
+{
+}
+
+M2MObjectInstance::M2MObjectInstance(M2MObject& parent, const lwm2m_parameters_s* static_res)
+: M2MBase(static_res), _parent(parent)
+{
+
+}
+
+M2MObjectInstance::~M2MObjectInstance()
+{
+}
+
+M2MResource* M2MObjectInstance::create_static_resource(const lwm2m_parameters_s* static_res,
+                                                       M2MResourceInstance::ResourceType type)
+{
+    return m2mobjectinstance_stub::create_resource;
+}
+
+M2MResource* M2MObjectInstance::create_static_resource(const String &resource_name,
+                                                       const String &resource_type,
+                                                       M2MResourceInstance::ResourceType type,
+                                                       const uint8_t *value,
+                                                       const uint8_t value_length,
+                                                       bool multiple_instance,
+                                                       bool external_blockwise_store)
+{
+    return m2mobjectinstance_stub::create_resource;
+}
+
+M2MResource* M2MObjectInstance::create_dynamic_resource(const lwm2m_parameters_s* static_res,
+                                                        M2MResourceInstance::ResourceType type,
+                                                        bool observable)
+{
+    return m2mobjectinstance_stub::create_resource;
+}
+
+M2MResource* M2MObjectInstance::create_dynamic_resource(const String &resource_name,
+                                                const String &resource_type,
+                                                M2MResourceInstance::ResourceType type,
+                                                bool observable,
+                                                bool multiple_instance,
+                                                bool external_blockwise_store)
+{
+    return m2mobjectinstance_stub::create_resource;
+}
+
+M2MResourceInstance* M2MObjectInstance::create_static_resource_instance(const String &resource_name,
+                                                                        const String &resource_type,
+                                                                        M2MResourceInstance::ResourceType type,
+                                                                        const uint8_t *value,
+                                                                        const uint8_t value_length,
+                                                                        uint16_t instance_id,
+                                                                        bool external_blockwise_store)
+{
+    return m2mobjectinstance_stub::create_resource_instance;
+}
+
+
+M2MResourceInstance* M2MObjectInstance::create_dynamic_resource_instance(const String &resource_name,
+                                                                         const String &resource_type,
+                                                                         M2MResourceInstance::ResourceType type,
+                                                                         bool observable,
+                                                                         uint16_t instance_id,
+                                                                         bool external_blockwise_store)
+{
+    return m2mobjectinstance_stub::create_resource_instance;
+}
+
+bool M2MObjectInstance::remove_resource(const String &)
+{
+    return m2mobjectinstance_stub::bool_value;
+}
+
+bool M2MObjectInstance::remove_resource(const char *resource_name)
+{
+    return m2mobjectinstance_stub::bool_value;
+}
+
+bool M2MObjectInstance::remove_resource_instance(const String &, uint16_t)
+{
+    return m2mobjectinstance_stub::bool_value;
+}
+
+M2MResource* M2MObjectInstance::resource(const String &) const
+{
+    return m2mobjectinstance_stub::resource;
+}
+
+M2MResource* M2MObjectInstance::resource(const char *resource_name) const
+{
+    return m2mobjectinstance_stub::resource;
+}
+
+const M2MResourceList& M2MObjectInstance::resources() const
+{
+    return m2mobjectinstance_stub::resource_list;
+}
+
+uint16_t M2MObjectInstance::resource_count() const
+{
+    return m2mobjectinstance_stub::int_value;
+}
+
+uint16_t M2MObjectInstance::resource_count(const String& ) const
+{
+    return m2mobjectinstance_stub::int_value;
+}
+
+uint16_t M2MObjectInstance::resource_count(const char* ) const
+{
+    return m2mobjectinstance_stub::int_value;
+}
+
+M2MBase::BaseType M2MObjectInstance::base_type() const
+{
+    return m2mobjectinstance_stub::base_type;
+}
+
+void M2MObjectInstance::add_observation_level(M2MBase::Observation)
+{
+}
+
+void M2MObjectInstance::remove_observation_level(M2MBase::Observation)
+{
+}
+
+sn_coap_hdr_s* M2MObjectInstance::handle_get_request(nsdl_s *,
+                                  sn_coap_hdr_s *,
+                                  M2MObservationHandler *)
+{
+    return m2mobjectinstance_stub::header;
+}
+
+sn_coap_hdr_s* M2MObjectInstance::handle_put_request(nsdl_s *,
+                                  sn_coap_hdr_s *,
+                                  M2MObservationHandler *,
+                                  bool &)
+{
+    return m2mobjectinstance_stub::header;
+}
+
+sn_coap_hdr_s* M2MObjectInstance::handle_post_request(nsdl_s *,
+                                   sn_coap_hdr_s *,
+                                   M2MObservationHandler *,
+                                   bool &execute,
+                                   sn_nsdl_addr_s *)
+{
+    execute = m2mobjectinstance_stub::bool_value;
+    return m2mobjectinstance_stub::header;
+}
+
+void M2MObjectInstance::notification_update(M2MBase::Observation)
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mobjectinstance_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_OBJECT_INSTANCE_STUB_H
+#define M2M_OBJECT_INSTANCE_STUB_H
+
+#include "m2mobjectinstance.h"
+
+//some internal test related stuff
+namespace m2mobjectinstance_stub
+{
+    extern u_int8_t int_value;
+    extern bool bool_value;
+    extern M2MResource *resource;
+    extern M2MResource* create_resource;
+    extern M2MResourceInstance* create_resource_instance;
+    extern sn_coap_hdr_s* header;
+    extern M2MResourceList resource_list;
+    extern M2MBase::BaseType base_type;
+    void clear();    
+}
+
+#endif // M2M_OBJECT_INSTANCE_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mreporthandler_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mreporthandler_stub.h"
+#include "m2mtimer_stub.h"
+
+bool m2mreporthandler_stub::bool_return;
+u_int8_t m2mreporthandler_stub::int_value;
+
+void m2mreporthandler_stub::clear()
+{
+    bool_return = false;
+    int_value = 0;
+}
+
+M2MReportHandler::M2MReportHandler(M2MReportObserver &observer)
+: _observer(observer),
+  _pmin_timer(*this),
+  _pmax_timer(*this)
+{
+}
+
+M2MReportHandler::~M2MReportHandler()
+{
+}
+
+void M2MReportHandler::set_under_observation(bool)
+{
+}
+
+void M2MReportHandler::set_value(float)
+{
+}
+
+bool M2MReportHandler::parse_notification_attribute(const char *,
+                                                    M2MBase::BaseType,
+                                                    M2MResourceInstance::ResourceType resource_type)
+{
+    return m2mreporthandler_stub::bool_return;
+}
+
+void M2MReportHandler::timer_expired(M2MTimerObserver::Type )
+{
+}
+
+void M2MReportHandler::set_notification_trigger(uint16_t)
+{
+}
+
+void M2MReportHandler::set_default_values()
+{
+}
+
+uint8_t M2MReportHandler::attribute_flags()
+{
+    return m2mreporthandler_stub::int_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mreporthandler_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_REPORT_HANDLER_STUB_H
+#define M2M_REPORT_HANDLER_STUB_H
+
+#include "m2mreporthandler.h"
+
+//some internal test related stuff
+namespace m2mreporthandler_stub
+{
+    extern bool bool_return;
+    extern u_int8_t int_value;
+    void clear();
+}
+
+#endif // M2M_REPORT_HANDLER_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mresource_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mresource_stub.h"
+
+uint32_t m2mresource_stub::int_value;
+uint8_t* m2mresource_stub::delayed_token;
+uint8_t m2mresource_stub::delayed_token_len;
+bool m2mresource_stub::bool_value;
+// The statically initialized list must be bigh enough to cater
+// for all the tests, or the utest framework will complain for memory leak.
+M2MResourceInstanceList m2mresource_stub::list(12);
+
+M2MResourceInstance *m2mresource_stub::instance;
+M2MObjectInstance *m2mresource_stub::object_instance;
+sn_coap_hdr_s *m2mresource_stub::header;
+void m2mresource_stub::clear()
+{
+    int_value = 0;
+    delayed_token = NULL;
+    delayed_token_len = 0;
+    bool_value = false;
+    list.clear();
+    instance = NULL;
+    object_instance = NULL;
+}
+
+M2MResource::M2MResource(M2MObjectInstance &parent,
+                         const String &resource_name,
+                         const String &resource_type,
+                         M2MResourceInstance::ResourceType type,
+                         const uint8_t *value,
+                         const uint8_t value_length,
+                         char* path,
+                         const uint16_t object_instance_id,
+                         bool multiple_instance,
+                         bool external_blockwise_store)
+: M2MResourceInstance(*this, resource_name, resource_type, type, value, value_length, object_instance_id,
+                      path, external_blockwise_store),
+  _parent(parent),
+  _delayed_token(NULL),
+  _delayed_token_len(0),
+  _has_multiple_instances(multiple_instance),
+  _delayed_response(false)
+{
+
+}
+
+M2MResource::M2MResource(M2MObjectInstance &parent,
+                         const lwm2m_parameters_s* s,
+                          M2MResourceInstance::ResourceType type,
+                         const uint16_t object_instance_id)
+: M2MResourceInstance(*this, s, type, object_instance_id),
+  _parent(parent),
+  _delayed_token(NULL),
+  _delayed_token_len(0),
+  _has_multiple_instances(false),
+  _delayed_response(false)
+{
+    // tbd: _has_multiple_instances could be in flash, but no real benefit, because of current alignment.
+}
+
+M2MResource::M2MResource(M2MObjectInstance &parent,
+                         const String &resource_name,
+                         const String &resource_type,
+                         M2MResourceInstance::ResourceType type,
+                         bool observable,
+                         char *path,
+                         const uint16_t object_instance_id,
+                         bool multiple_instance,
+                         bool external_blockwise_store)
+: M2MResourceInstance(*this, resource_name, resource_type, type,
+                      object_instance_id, path, external_blockwise_store),
+  _parent(parent),
+  _delayed_token(NULL),
+  _delayed_token_len(0),
+  _has_multiple_instances(multiple_instance),
+  _delayed_response(false)
+{
+
+}
+
+M2MResource::~M2MResource()
+{
+}
+
+bool M2MResource::supports_multiple_instances() const
+{
+    return m2mresource_stub::bool_value;
+}
+
+void M2MResource::get_delayed_token(unsigned char *&token, unsigned char &token_len)
+{
+    token_len = 0;
+    if(token) {
+        free(token);
+        token = NULL;
+    }
+    token = (uint8_t *)malloc(m2mresource_stub::delayed_token_len);
+    if(token) {
+        token_len = m2mresource_stub::delayed_token_len;
+        memcpy((uint8_t *)token, (uint8_t *)m2mresource_stub::delayed_token, token_len);
+    }
+}
+
+bool M2MResource::remove_resource_instance(uint16_t inst_id)
+{
+    return m2mresource_stub::bool_value;
+}
+
+M2MResourceInstance* M2MResource::resource_instance(uint16_t inst_id) const
+{
+    return m2mresource_stub::instance;
+}
+
+const M2MResourceInstanceList& M2MResource::resource_instances() const
+{
+    return m2mresource_stub::list;
+}
+
+uint16_t M2MResource::resource_instance_count() const
+{
+    return m2mresource_stub::int_value;
+}
+
+bool M2MResource::handle_observation_attribute(const char *query)
+{
+    return m2mresource_stub::bool_value;
+}
+
+void M2MResource::add_resource_instance(M2MResourceInstance *)
+{
+}
+
+void M2MResource::add_observation_level(M2MBase::Observation)
+{
+}
+
+void M2MResource::remove_observation_level(M2MBase::Observation)
+{
+}
+
+void M2MResource::notification_update()
+{
+}
+
+sn_coap_hdr_s* M2MResource::handle_get_request(nsdl_s *,
+                                               sn_coap_hdr_s *,
+                                               M2MObservationHandler *)
+{
+    return m2mresource_stub::header;
+}
+
+sn_coap_hdr_s* M2MResource::handle_put_request(nsdl_s *,
+                                               sn_coap_hdr_s *,
+                                               M2MObservationHandler *,
+                                               bool &)
+{
+    return m2mresource_stub::header;
+}
+
+sn_coap_hdr_s* M2MResource::handle_post_request(nsdl_s *,
+                                               sn_coap_hdr_s *,
+                                               M2MObservationHandler *,
+                                               bool &, sn_nsdl_addr_s *)
+{
+    return m2mresource_stub::header;
+}
+
+M2MObjectInstance& M2MResource::get_parent_object_instance() const
+{
+    return *m2mresource_stub::object_instance;
+}
+
+const char* M2MResource::object_name() const
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mresource_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_RESOURCE_STUB_H
+#define M2M_RESOURCE_STUB_H
+
+#include "m2mresource.h"
+
+//some internal test related stuff
+namespace m2mresource_stub
+{
+    extern uint32_t int_value;
+    extern uint8_t* delayed_token;
+    extern uint8_t delayed_token_len;
+    extern bool bool_value;
+    extern M2MResourceInstanceList list;
+    extern M2MResourceInstance *instance;
+    extern M2MObjectInstance *object_instance;
+    void clear();
+    extern sn_coap_hdr_s *header;
+}
+
+#endif // M2M_RESOURCE_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mresourceinstance_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,270 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mresourceinstance_stub.h"
+
+uint32_t m2mresourceinstance_stub::int_value;
+bool m2mresourceinstance_stub::bool_value;
+String *m2mresourceinstance_stub::string_value;
+M2MResourceInstance::ResourceType m2mresourceinstance_stub::resource_type;
+sn_coap_hdr_s *m2mresourceinstance_stub::header;
+uint8_t* m2mresourceinstance_stub::value;
+M2MBase::BaseType m2mresourceinstance_stub::base_type;
+
+
+void m2mresourceinstance_stub::clear()
+{
+    int_value = 0;
+    bool_value = false;
+    resource_type = M2MResourceInstance::STRING;
+    header = NULL;
+    value = NULL;
+    base_type = M2MBase::ResourceInstance;
+    string_value = NULL;
+}
+
+M2MResourceInstance::M2MResourceInstance(M2MResource &parent,
+                                         const String &res_name,
+                                         const String &resource_type,
+                                         M2MResourceInstance::ResourceType type,
+                                         const uint16_t object_instance_id,
+                                         char* path,
+                                         bool external_blockwise_store)
+: M2MBase(res_name,
+          M2MBase::Dynamic,
+          resource_type,
+          path,
+          external_blockwise_store),
+ _parent_resource(parent),
+ _value(NULL),
+ _value_length(0),
+ _block_message_data(NULL),
+ _execute_callback(NULL),
+ _resource_callback(NULL),
+ _execute_function_pointer(NULL),
+ _notification_sent_function_pointer(NULL),
+ _notification_sent_callback(NULL),
+ _object_instance_id(object_instance_id),
+ _resource_type(type)
+{
+
+}
+
+M2MResourceInstance::M2MResourceInstance(M2MResource &parent,
+                                         const String &res_name,
+                                         const String &resource_type,
+                                         M2MResourceInstance::ResourceType type,
+                                         const uint8_t *value,
+                                         const uint8_t value_length,
+                                         const uint16_t object_instance_id,
+                                         char* path,
+                                         bool external_blockwise_store)
+: M2MBase(res_name,
+          M2MBase::Static,
+          resource_type,
+          path,
+          external_blockwise_store),
+ _parent_resource(parent),
+ _value(NULL),
+ _value_length(0),
+ _block_message_data(NULL),
+ _execute_callback(NULL),
+ _resource_callback(NULL),
+ _execute_function_pointer(NULL),
+ _notification_sent_function_pointer(NULL),
+ _notification_sent_callback(NULL),
+ _object_instance_id(object_instance_id),
+  _resource_type(type)
+{
+}
+
+M2MResourceInstance::M2MResourceInstance(M2MResource &parent,
+                                         const lwm2m_parameters_s* s,
+                                         M2MResourceInstance::ResourceType type,
+                                         const uint16_t object_instance_id)
+: M2MBase(s),
+  _parent_resource(parent),
+  _value(NULL),
+  _value_length(0),
+  _block_message_data(NULL),
+  _execute_callback(NULL),
+  _resource_callback(NULL),
+  _execute_function_pointer(NULL),
+  _notification_sent_function_pointer(NULL),
+  _object_instance_id(object_instance_id),
+  _resource_type(type)
+{
+}
+
+M2MResourceInstance::~M2MResourceInstance()
+{
+}
+
+M2MBase::BaseType M2MResourceInstance::base_type() const
+{
+    return m2mresourceinstance_stub::base_type;
+}
+
+M2MResourceInstance::ResourceType M2MResourceInstance::resource_instance_type() const
+{
+    return m2mresourceinstance_stub::resource_type;
+}
+
+bool M2MResourceInstance::handle_observation_attribute(const char *)
+{
+    return m2mresourceinstance_stub::bool_value;
+}
+
+void M2MResourceInstance::set_execute_function(execute_callback)
+{
+}
+
+bool M2MResourceInstance::set_value(const uint8_t *,
+                                    const uint32_t )
+{
+    return m2mresourceinstance_stub::bool_value;
+}
+
+bool M2MResourceInstance::set_value(int64_t value)
+{
+    return m2mresourceinstance_stub::bool_value;
+}
+
+
+void M2MResourceInstance::clear_value()
+{
+    if (m2mresourceinstance_stub::value) {
+        free(m2mresourceinstance_stub::value);
+        m2mresourceinstance_stub::value = NULL;
+        m2mresourceinstance_stub::int_value = 0;
+    }
+}
+
+void M2MResourceInstance::execute(void *)
+{
+}
+
+void M2MResourceInstance::get_value(uint8_t *&value, uint32_t &value_length)
+{
+    value_length = 0;
+    if(value) {
+        free(value);
+        value = NULL;
+    }
+    value = (uint8_t *)malloc(m2mresourceinstance_stub::int_value);
+    if(value) {
+        value_length = m2mresourceinstance_stub::int_value;
+        memcpy((uint8_t *)value, (uint8_t *)m2mresourceinstance_stub::value, value_length);
+    }
+}
+
+int M2MResourceInstance::get_value_int()
+{
+    // Note: this is a copy-paste from the original version, as the tests
+    // set only m2mresourceinstance_stub::value.
+
+    int value_int = 0;
+    // Get the value and convert it into integer. This is not the most
+    // efficient way, as it takes pointless heap copy to get the zero termination.
+    uint8_t* buffer = NULL;
+    uint32_t length;
+    get_value(buffer,length);
+    if(buffer) {
+        value_int = atoi((const char*)buffer);
+        free(buffer);
+    }
+    return value_int;
+}
+
+String M2MResourceInstance::get_value_string() const
+{
+    // XXX: do a better constructor to avoid pointless malloc
+    String value;
+    if (m2mresourceinstance_stub::value) {
+        value.append_raw((char*)m2mresourceinstance_stub::value, m2mresourceinstance_stub::int_value);
+    }
+
+    return value;
+}
+
+uint8_t* M2MResourceInstance::value() const
+{
+    return m2mresourceinstance_stub::value;
+}
+
+uint32_t M2MResourceInstance::value_length() const
+{
+    return m2mresourceinstance_stub::int_value;
+}
+
+sn_coap_hdr_s* M2MResourceInstance::handle_get_request(nsdl_s *,
+                                               sn_coap_hdr_s *,
+                                               M2MObservationHandler *)
+{
+    return m2mresourceinstance_stub::header;
+}
+
+sn_coap_hdr_s* M2MResourceInstance::handle_put_request(nsdl_s *,
+                                               sn_coap_hdr_s *,
+                                               M2MObservationHandler *,
+                                               bool &)
+{
+    return m2mresourceinstance_stub::header;
+}
+
+void M2MResourceInstance::set_resource_observer(M2MResourceCallback *callback)
+{
+
+}
+
+uint16_t M2MResourceInstance::object_instance_id() const
+{
+    return m2mresourceinstance_stub::int_value;
+}
+
+void M2MResourceInstance::set_execute_function(execute_callback_2 callback)
+{
+}
+
+M2MBlockMessage* M2MResourceInstance::block_message() const
+{
+
+}
+
+void M2MResourceInstance::set_incoming_block_message_callback(incoming_block_message_callback callback)
+{
+}
+
+void M2MResourceInstance::set_outgoing_block_message_callback(outgoing_block_message_callback callback)
+{
+
+}
+
+void M2MResourceInstance::set_notification_sent_callback(notification_sent_callback callback)
+{
+}
+
+void M2MResourceInstance::set_notification_sent_callback(notification_sent_callback_2 callback)
+{
+}
+
+void M2MResourceInstance::notification_sent()
+{
+}
+
+const char* M2MResourceInstance::object_name() const
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mresourceinstance_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_RESOURCE_INSTANCE_STUB_H
+#define M2M_RESOURCE_INSTANCE_STUB_H
+
+#include "m2mresourceinstance.h"
+
+//some internal test related stuff
+namespace m2mresourceinstance_stub
+{
+    extern uint32_t int_value;
+    extern uint8_t* value;
+    extern bool bool_value;
+    extern String *string_value;
+    extern M2MResourceInstance::ResourceType resource_type;
+    extern M2MBase::BaseType base_type;
+    extern sn_coap_hdr_s *header;
+    void clear();
+}
+
+#endif // M2M_RESOURCE_INSTANCE_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2msecurity_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2msecurity_stub.h"
+
+bool m2msecurity_stub::has_value;
+uint32_t m2msecurity_stub::int_value;
+uint32_t m2msecurity_stub::sec_mode;
+bool m2msecurity_stub::bool_value;
+String *m2msecurity_stub::string_value;
+M2MResource* m2msecurity_stub::resource;
+
+void m2msecurity_stub::clear()
+{
+    has_value = false;
+    int_value = -1;
+    bool_value = false;
+    string_value = NULL;
+    resource = NULL;
+}
+
+M2MSecurity::M2MSecurity(ServerType ser_type)
+: M2MObject("0", stringdup("0")),
+ _server_type(ser_type),
+ _server_instance(NULL)
+{
+}
+
+M2MSecurity::~M2MSecurity()
+{
+}
+
+M2MResource* M2MSecurity::create_resource(SecurityResource, uint32_t)
+{
+    return m2msecurity_stub::resource;
+}
+
+bool M2MSecurity::delete_resource(SecurityResource)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource,
+                                     const String &)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource,
+                                     uint32_t)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+bool M2MSecurity::set_resource_value(SecurityResource,
+                                     const uint8_t *,
+                                     const uint16_t)
+{
+    return m2msecurity_stub::bool_value;
+}
+
+String M2MSecurity::resource_value_string(SecurityResource) const
+{
+    return *m2msecurity_stub::string_value;
+}
+
+uint32_t M2MSecurity::resource_value_buffer(SecurityResource,
+                               uint8_t *&value) const
+{
+    if( m2msecurity_stub::has_value ){
+        value = (uint8_t *)malloc(5);
+        return 5;
+    }
+    return m2msecurity_stub::int_value;
+}
+
+uint32_t M2MSecurity::resource_value_buffer(SecurityResource,
+                               const uint8_t *&value) const
+{
+    if( m2msecurity_stub::has_value ){
+        value = NULL;
+        return 5;
+    }
+    return m2msecurity_stub::int_value;
+}
+
+uint32_t M2MSecurity::resource_value_int(SecurityResource res) const
+{
+    if (res == M2MSecurity::SecurityMode) {
+        return m2msecurity_stub::sec_mode;
+    }
+    else if(res == M2MSecurity::BootstrapServer) {
+        return m2msecurity_stub::bool_value;
+    }
+    else {
+        return m2msecurity_stub::int_value;
+    }
+}
+
+bool M2MSecurity::is_resource_present(SecurityResource) const
+{
+    return m2msecurity_stub::bool_value;
+}
+
+uint16_t M2MSecurity::total_resource_count() const
+{
+    return (uint16_t)m2msecurity_stub::int_value;
+}
+
+M2MSecurity::ServerType M2MSecurity::server_type() const
+{
+    return _server_type;
+}
+
+void M2MSecurity::clear_resources()
+{
+
+}
+
+M2MResource* M2MSecurity::get_resource(SecurityResource res) const
+{
+    return m2msecurity_stub::resource;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2msecurity_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_SECURITY_STUB_H
+#define M2M_SECURITY_STUB_H
+
+#include "m2msecurity.h"
+
+//some internal test related stuff
+namespace m2msecurity_stub
+{
+    extern bool has_value;
+    extern uint32_t int_value;
+    extern uint32_t sec_mode;
+    extern bool bool_value;
+    extern String *string_value;
+    extern M2MResource* resource;
+    void clear();
+}
+
+#endif // M2M_SECURITY_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mserver_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mserver_stub.h"
+
+uint32_t m2mserver_stub::int_value;
+bool m2mserver_stub::bool_value;
+M2MResource* m2mserver_stub::resource;
+
+void m2mserver_stub::clear()
+{
+    int_value = 0;
+    bool_value = false;
+    resource = NULL;
+}
+
+M2MServer::M2MServer()
+: M2MObject("1", "1")
+{
+}
+
+M2MServer::~M2MServer()
+{
+}
+
+M2MResource* M2MServer::create_resource(ServerResource, uint32_t)
+{
+    return m2mserver_stub::resource;
+}
+
+M2MResource* M2MServer::create_resource(ServerResource)
+{
+    return m2mserver_stub::resource;
+}
+
+bool M2MServer::delete_resource(ServerResource)
+{
+    return m2mserver_stub::bool_value;
+}
+
+bool M2MServer::set_resource_value(ServerResource,
+                                   const String &)
+{
+    return m2mserver_stub::bool_value;
+}
+
+bool M2MServer::set_resource_value(ServerResource,
+                                   uint32_t)
+{
+    return m2mserver_stub::bool_value;
+}
+
+String M2MServer::resource_value_string(ServerResource) const
+{
+    return String("");
+}
+
+
+uint32_t M2MServer::resource_value_int(ServerResource) const
+{
+    return m2mserver_stub::int_value;
+}
+
+bool M2MServer::is_resource_present(ServerResource) const
+{
+    return m2mserver_stub::bool_value;
+}
+
+uint16_t M2MServer::total_resource_count() const
+{
+    return (uint16_t)m2mserver_stub::int_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mserver_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_SERVER_STUB_H
+#define M2M_SERVER_STUB_H
+
+#include "m2mserver.h"
+#include "m2mresource.h"
+
+//some internal test related stuff
+namespace m2mserver_stub
+{
+    extern uint32_t int_value;
+    extern bool bool_value;
+    extern String *string_value;
+    extern M2MResource* resource;
+    void clear();
+}
+
+#endif // M2M_SERVER_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mstring_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,429 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mstring.h"
+#include <string.h> // strlen
+#include <stdlib.h> // malloc, realloc
+#include <assert.h>
+#include <algorithm> // min
+
+namespace m2m {
+
+const String::size_type String::npos = static_cast<size_t>(-1);
+
+char* String::strdup(const char* s)
+{
+    const size_t len = strlen(s)+1;
+    char *p2 = static_cast<char*>(malloc(len));
+    memcpy(p2, s, len);
+    allocated_ = len;
+    size_ = len-1;
+    return p2;
+}
+
+String::String()
+    : p( strdup("") )
+{
+}
+
+String::~String()
+{
+    free(p);
+    p = 0;
+}
+
+String::String(const String& s)
+    : p(0)
+{
+    if( &s != NULL ) {
+        p = static_cast<char*>(malloc(s.size_ + 1));
+
+        allocated_ = s.size_ + 1;
+        size_      = s.size_;
+        memcpy(p, s.p, size_ + 1);
+    }
+}
+
+String::String(const char* s)
+    : p(strdup(s))
+{
+}
+
+String::String(const char* str, size_t n)
+{
+    p = static_cast<char*>(malloc(n + 1));
+
+    allocated_ = n + 1;
+    size_      = n;
+    memcpy(p, str, n);
+    p[n] = 0;
+}
+
+String& String::operator=(const char* s)
+{
+    if ( p != s ) {
+        // s could point into our own string, so we have to allocate a new string
+        const size_t len = strlen(s);
+        char* copy = (char*) malloc( len + 1);
+        memmove(copy, s, len+1); // trailing 0
+        free( p );
+        p = copy;
+        size_ = len;
+        allocated_ = len+1;
+    }
+    return *this;
+}
+
+String& String::operator=(const String& s)
+{
+    return operator=(s.p);
+}
+
+String& String::operator+=(const String& s)
+{
+    if (s.size_ > 0) {
+        this->reserve(size_ + s.size_);
+        memmove(p+size_, s.p, s.size_+1); // trailing 0
+        size_ += s.size_;
+    }
+    return *this;
+}
+
+// since p and s may overlap, we have to copy our own string first
+String& String::operator+=(const char* s)
+{
+    const size_type lens = strlen(s);
+    if (lens > 0) {
+        if (size_ + lens + 1 <= allocated_) {
+            memmove(p+size_, s, lens+1); // trailing 0
+            size_ += lens;
+        } else {
+            String s2( *this );  // copy own data
+            s2.reserve(size_ + lens);
+            memmove(s2.p+size_, s, lens+1); // trailing 0
+            s2.size_ = size_ + lens;
+            this->swap( s2 );
+        }
+    }
+    return *this;
+}
+
+String& String::operator+=(const char c)
+{
+    push_back(c);
+    return *this;
+}
+
+void String::push_back(const char c) {
+
+    if (size_ == allocated_ - 1) {
+        size_t more =  (allocated_* 3) / 2; // factor 1.5
+        if ( more < 4 ) more = 4;
+        reserve( size_ + more );
+    }
+
+    p[size_] = c;
+    size_++;
+    p[size_] = 0;
+}
+
+bool String::operator==(const char* s) const
+{
+    if( s == NULL ) {
+        if( p == NULL ) {
+            return true;
+        }
+        return false;
+    }
+    bool ret = strcmp(p, s);
+    return !ret;
+}
+
+bool String::operator==(const String& s) const
+{
+    bool ret = strcmp(p, s.p);
+    return !ret;
+}
+
+void String::clear()
+{
+    size_ = 0;
+    p[0]  = 0;
+}
+
+String String::substr(const size_type pos, size_type length) const
+{
+    String s;
+    const size_type len = size_;
+
+    if ( pos <= len ) {
+
+        size_type remain = len - pos;
+
+        if ( length > remain )
+            length = remain;
+
+        s.reserve( length );
+
+        memcpy(s.p, p + pos, length);
+        s.p[length] = '\0';
+        s.size_ = length;
+    }
+    return s;
+}
+
+
+// checked access, accessing the NUL at end is allowed
+char String::at(const size_type i) const
+{
+    if ( i <= strlen(p) ) {
+        return p[i];
+    } else {
+        return '\0';
+    }
+}
+
+String& String::erase(size_type pos, size_type len)
+{
+    if (len > 0) {
+
+        if ( pos < size_ ) { // user must not remove trailing 0
+
+            size_type s2 = size_;
+            size_type remain = s2 - pos - len;
+
+            if (remain > 0) {
+                // erase by overwriting
+                memmove(p + pos, p + pos + len, remain);
+            }
+
+            //if ( remain < 0 ) remain = 0;
+
+            // remove unused space
+            this->resize( pos+remain );
+
+        }
+    }
+    return *this;
+}
+
+String& String::append( const char* str, size_type n) {
+    if (str && n > 0) {
+        size_t lens = strlen(str);
+        if (n > lens)
+            n = lens;
+        size_t newlen = size_ + n;
+        this->reserve( newlen );
+        memmove(p+size_, str, n); // p and s.p MAY overlap
+        p[newlen] = 0; // add NUL termination
+        size_ = newlen;
+    }
+    return *this;
+}
+
+String& String::append_raw( const char* str, size_type n) {
+    if (str && n > 0) {
+        size_t newlen = size_ + n;
+        this->reserve( newlen );
+        memmove(p+size_, str, n); // p and s.p MAY overlap
+        p[newlen] = 0; // add NUL termination
+        size_ = newlen;
+    }
+    return *this;
+}
+
+void String::append_int(int param) {
+
+    // max len of "-9223372036854775808" plus zero termination
+    char conv_buff[20+1];
+
+    int len = itoa_c(param, conv_buff);
+    append_raw(conv_buff, len);
+}
+
+int String::compare( size_type pos, size_type len, const String& str ) const {
+    int r = -1;
+    if (pos <= size_) {
+        if ( len > size_ - pos)
+            len = size_ - pos; // limit len to available length
+
+        const size_type osize = str.size();
+        const size_type len2   = std::min(len, osize);
+        r = strncmp( p + pos, str.p, len2);
+        if (r==0) // equal so far, now compare sizes
+            r = len < osize ? -1 : ( len == osize ? 0 : +1 );
+    }
+    return r;
+}
+
+int String::compare( size_type pos, size_type len, const char* str ) const {
+    int r = -1;
+    if (pos <= size_) {
+
+        if ( len > size_ - pos)
+            len = size_ - pos; // limit len to available length
+
+        const size_type osize = strlen(str);
+        const size_type len2   = std::min(len, osize);
+        r = strncmp( p + pos, str, len2);
+        if (r==0) // equal so far, now compare sizes
+            r = len < osize ? -1 : ( len == osize ? 0 : +1 );
+    }
+    return r;
+}
+
+int String::find_last_of(char c) const {
+    int r = -1;
+    char *v;
+    v = strrchr(p,c);
+    if (v != NULL) {
+        r = 0;
+        char* i = p;
+        while (v != i) {
+            i++;
+            r++;
+        }
+    }
+    return r;
+}
+
+void String::new_realloc( size_type n) {
+    if (n > 0 ) {
+        char* pnew = static_cast<char*>(realloc(p, n)); // could return NULL
+        if (pnew)
+            p = pnew;
+    }
+}
+
+void String::reserve( const size_type n) {
+    if (n >= allocated_ ) {
+        this->new_realloc(n + 1);
+        allocated_ = n + 1;
+    }
+}
+
+void String::resize( const size_type n) {
+    this->resize( n, 0 );
+}
+
+void String::resize( const size_type n, const char c) {
+    if (n < size_ ) {
+        p[n] = 0;
+        size_ = n;
+    }
+    else if (n >  size_ ) {
+        this->reserve( n );
+        for (size_type i=size_; i < n; ++i )
+            p[i] = c;
+        p[n] = 0;
+        size_ = n;
+    }
+}
+
+void String::swap( String& s ) {
+    std::swap( allocated_, s.allocated_ );
+    std::swap( size_,      s.size_      );
+    std::swap( p,          s.p          );
+}
+
+
+// Comparison
+bool operator<( const String& s1, const String& s2 ) {
+    return strcmp( s1.c_str(), s2.c_str() ) < 0;
+}
+
+void reverse(char s[], uint32_t length)
+{
+    uint32_t i, j;
+    char c;
+
+    for (i = 0, j = length-1; i<j; i++, j--) {
+        c = s[i];
+        s[i] = s[j];
+        s[j] = c;
+    }
+}
+
+uint32_t itoa_c (int64_t n, char s[])
+{
+    int64_t sign;
+    uint32_t i;
+
+    if ((sign = n) < 0)
+        n = -n;
+
+    i = 0;
+
+    do {
+        s[i++] = n % 10 + '0';
+    }
+    while ((n /= 10) > 0);
+
+    if (sign < 0)
+        s[i++] = '-';
+
+    s[i] = '\0';
+
+    m2m::reverse(s, i);
+    return i;
+}
+
+uint8_t* String::convert_integer_to_array(int64_t value, uint8_t &size, uint8_t *array, uint32_t array_size)
+{
+    uint8_t* buffer = NULL;
+    size = 0;
+    if (array) {
+        value = String::convert_array_to_integer(array, array_size);
+    }
+
+    if(value < 0xFF) {
+        size = 1;
+    } else if(value < 0xFFFF) {
+        size = 2;
+    } else if(value < 0xFFFFFF) {
+        size = 3;
+    } else if(value < 0xFFFFFFFF) {
+        size = 4;
+    } else if(value < 0xFFFFFFFFFF) {
+        size = 5;
+    } else if(value < 0xFFFFFFFFFFFF) {
+        size = 6;
+    } else if(value < 0xFFFFFFFFFFFFFF) {
+        size = 7;
+    } else {
+        size = 8;
+    }
+
+    buffer = (uint8_t*)malloc(size);
+    if (buffer) {
+        for (int i = 0; i < size; i++) {
+            buffer[i] = (value >> ((size - i - 1) * 8));
+        }
+    } else {
+        size = 0;
+    }
+    return buffer;
+}
+
+int64_t String::convert_array_to_integer(uint8_t *value, uint32_t size)
+{
+    int64_t temp_64 = 0;
+    for (int i = size - 1; i >= 0; i--) {
+        temp_64 += (uint64_t)(*value++) << i * 8;
+    }
+    return temp_64;
+}
+
+} // namespace
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mstringbufferbase_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "m2mstringbufferbase_stub.h"
+
+bool StringBufferBase::ensure_space(size_t max_size, size_t required_size) const
+{
+
+}
+
+bool StringBufferBase::append(char *buff, size_t max_size, char data)
+{
+
+}
+
+bool StringBufferBase::append(char *buff, size_t max_size, const char *data)
+{
+
+}
+
+bool StringBufferBase::append(char *buff, size_t max_size, const char *data, size_t data_len)
+{
+
+}
+
+bool StringBufferBase::append_int(char *buff, size_t max_size, uint16_t data)
+{
+
+}
+
+int StringBufferBase::find_last_of(const char *buff, char search_char) const
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mstringbufferbase_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef M2MSTRINGBUFFERBASE_STUB_H
+#define M2MSTRINGBUFFERBASE_STUB_H
+
+#include "m2mstringbufferbase.h"
+
+#endif // M2MSTRINGBUFFERBASE_STUB_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mtimer_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CppUTestExt/MockSupport.h"
+#include <stdio.h>
+#include "m2mtimer_stub.h"
+
+bool m2mtimer_stub::bool_value;
+bool m2mtimer_stub::total_bool_value;
+bool m2mtimer_stub::enable_mock;
+
+void m2mtimer_stub::clear()
+{
+    bool_value = false;
+    total_bool_value = false;
+    enable_mock = false;
+}
+
+M2MTimer::M2MTimer(M2MTimerObserver& observer)
+: _observer(observer)
+{
+}
+
+M2MTimer::~M2MTimer()
+{
+}
+
+void M2MTimer::start_timer(uint64_t /*interval*/,
+                           M2MTimerObserver::Type /*type*/,
+                           bool /*single_shot*/)
+{
+    if (m2mtimer_stub::enable_mock) {
+        mock().actualCall("start_timer").onObject(this);
+    }
+}
+
+void M2MTimer::start_dtls_timer(uint64_t , uint64_t , M2MTimerObserver::Type )
+{
+    if (m2mtimer_stub::enable_mock) {
+        mock().actualCall("start_dtls_timer").onObject(this);
+    }
+}
+
+void M2MTimer::stop_timer()
+{
+    if (m2mtimer_stub::enable_mock) {
+        mock().actualCall("stop_timer").onObject(this);
+    }
+}
+
+
+bool M2MTimer::is_intermediate_interval_passed(){
+    return m2mtimer_stub::bool_value;
+}
+
+bool M2MTimer::is_total_interval_passed(){
+    return m2mtimer_stub::total_bool_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mtimer_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_TIMER_STUB_H
+#define M2M_TIMER_STUB_H
+
+#include "m2mtimer.h"
+
+//some internal test related stuff
+namespace m2mtimer_stub
+{
+    extern bool bool_value;
+    extern bool total_bool_value;
+    extern bool enable_mock;
+    void clear();
+}
+
+#endif // M2M_TIMER_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mtlvdeserializer_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mtlvdeserializer_stub.h"
+
+bool m2mtlvdeserializer_stub::bool_value;
+bool m2mtlvdeserializer_stub::is_object_bool_value;
+M2MTLVDeserializer::Error m2mtlvdeserializer_stub::error;
+uint16_t m2mtlvdeserializer_stub::int_value;
+
+void m2mtlvdeserializer_stub::clear()
+{
+    bool_value = false;
+    is_object_bool_value = false;
+    error = M2MTLVDeserializer::None;
+    int_value = 0;
+}
+
+M2MTLVDeserializer::M2MTLVDeserializer()
+{
+}
+
+M2MTLVDeserializer::~M2MTLVDeserializer()
+{
+}
+
+bool M2MTLVDeserializer::is_object_instance(uint8_t *)
+{
+    return m2mtlvdeserializer_stub::is_object_bool_value;
+}
+
+bool M2MTLVDeserializer::is_resource(uint8_t *)
+{
+    return m2mtlvdeserializer_stub::bool_value;
+}
+
+bool M2MTLVDeserializer::is_multiple_resource(uint8_t *)
+{
+    return m2mtlvdeserializer_stub::bool_value;
+}
+
+bool M2MTLVDeserializer::is_resource_instance(uint8_t *)
+{
+    return m2mtlvdeserializer_stub::bool_value;
+}
+
+M2MTLVDeserializer::Error M2MTLVDeserializer::deserialize_resources(uint8_t*,
+                                                                    uint32_t,
+                                                                    M2MObjectInstance &,
+                                                                    M2MTLVDeserializer::Operation )
+{
+    return m2mtlvdeserializer_stub::error;
+}
+
+M2MTLVDeserializer::Error M2MTLVDeserializer::deserialize_resource_instances(uint8_t *,
+                                                                             uint32_t,
+                                                                             M2MResource &,
+                                                                             M2MTLVDeserializer::Operation )
+{
+    return m2mtlvdeserializer_stub::error;
+}
+
+M2MTLVDeserializer::Error M2MTLVDeserializer::deserialise_object_instances(uint8_t*,
+                                                                           uint32_t ,
+                                                                           M2MObject &,
+                                                                           M2MTLVDeserializer::Operation)
+{
+    return m2mtlvdeserializer_stub::error;
+}
+
+TypeIdLength* TypeIdLength::createTypeIdLength(uint8_t *, uint32_t)
+{
+    TypeIdLength *til = new TypeIdLength();
+    return til;
+}
+
+TypeIdLength* TypeIdLength::deserialize()
+{
+    return this;
+}
+
+void TypeIdLength::deserialiseID(uint32_t idLength)
+{
+}
+
+void TypeIdLength::deserialiseLength(uint32_t lengthType)
+{
+}
+
+uint16_t M2MTLVDeserializer::instance_id(uint8_t *tlv)
+{
+    return m2mtlvdeserializer_stub::int_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mtlvdeserializer_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_TLV_DESERIALIZER_STUB_H
+#define M2M_TLV_DESERIALIZER_STUB_H
+
+#include "m2mtlvdeserializer.h"
+
+//some internal test related stuff
+namespace m2mtlvdeserializer_stub
+{
+    extern bool bool_value;
+    extern uint16_t int_value;
+    extern bool is_object_bool_value;
+    extern M2MTLVDeserializer::Error error;
+    void clear();
+}
+
+#endif // M2M_TLV_DESERIALIZER_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mtlvserializer_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "m2mtlvserializer_stub.h"
+
+uint8_t* m2mtlvserializer_stub::uint8_value;
+
+void m2mtlvserializer_stub::clear()
+{
+    uint8_value = NULL;
+}
+
+M2MTLVSerializer::M2MTLVSerializer()
+{
+}
+
+M2MTLVSerializer::~M2MTLVSerializer()
+{
+}
+
+uint8_t* M2MTLVSerializer::serialize(M2MObjectInstanceList object_instance_list, uint32_t &)
+{
+    return m2mtlvserializer_stub::uint8_value;
+}
+
+uint8_t* M2MTLVSerializer::serialize(M2MResourceList resource_list, uint32_t &size)
+{
+    return m2mtlvserializer_stub::uint8_value;
+}
+
+uint8_t* M2MTLVSerializer::serialize(M2MResource *, uint32_t &)
+{
+    return m2mtlvserializer_stub::uint8_value;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/m2mtlvserializer_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2M_TLV_SERIALIZER_STUB_H
+#define M2M_TLV_SERIALIZER_STUB_H
+
+#include "m2mtlvserializer.h"
+
+//some internal test related stuff
+namespace m2mtlvserializer_stub
+{
+    extern uint8_t* uint8_value;
+    void clear();
+}
+
+#endif // M2M_TLV_SERIALIZER_STUB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/nsdlaccesshelper_stub.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "nsdlaccesshelper_stub.h"
+
+bool nsdlaccesshelper_stub::bool_value;
+void* nsdlaccesshelper_stub::void_value;
+uint8_t nsdlaccesshelper_stub::int_value;
+
+M2MNsdlInterfaceList __nsdl_interface_list;
+M2MConnectionHandler *__connection_handler = NULL;
+#ifdef USE_LINUX
+M2MTimerImpl  *__timer_impl = NULL;
+M2MConnectionHandler *__connection_impl = NULL;
+#endif
+void nsdlaccesshelper_stub::clear()
+{
+    bool_value = false;
+    void_value = NULL;
+    int_value = 0;
+}
+
+uint8_t __nsdl_c_callback(struct nsdl_s * ,
+                          sn_coap_hdr_s *,
+                          sn_nsdl_addr_s *,
+                          sn_nsdl_capab_e )
+{
+    return nsdlaccesshelper_stub::int_value;
+}
+
+void *__nsdl_c_memory_alloc(uint16_t)
+{
+    return nsdlaccesshelper_stub::void_value;
+}
+
+void __nsdl_c_memory_free(void *)
+{
+}
+
+uint8_t __nsdl_c_send_to_server(struct nsdl_s * ,
+                                sn_nsdl_capab_e ,
+                                uint8_t *,
+                                uint16_t ,
+                                sn_nsdl_addr_s *)
+{
+    return nsdlaccesshelper_stub::int_value;
+}
+
+uint8_t __nsdl_c_received_from_server(struct nsdl_s * ,
+                                      sn_coap_hdr_s *,
+                                      sn_nsdl_addr_s *)
+{
+    return nsdlaccesshelper_stub::int_value;
+}
+
+void *__socket_malloc( void *, size_t)
+{
+return nsdlaccesshelper_stub::void_value;
+}
+
+void __socket_free(void *, void *)
+{
+}
+
+void __mutex_claim()
+{
+}
+
+void __mutex_release()
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient/utest/stub/nsdlaccesshelper_stub.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef NSDLACCESSHELPER_STUB_H
+#define NSDLACCESSHELPER_STUB_H
+
+#include "nsdlaccesshelper.h"
+
+//some internal test related stuff
+namespace nsdlaccesshelper_stub
+{
+    extern bool bool_value;
+    extern void *void_value;
+    extern uint8_t int_value;
+    void clear();
+}
+#endif // NSDLACCESSHELPER_STUB_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient_linux/Makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,17 @@
+PLATFORM= 
+OS = LINUX
+TARGET	= mbedclient_linux
+OBJECTS = main.o
+CFLAGS	= -std=c++11 -Wall -D_REENTRANT -D$(OS) -I ../../lwm2m-client -I ../../source/include -I ../../../../libService/libService -I ../../ -DTARGET_LIKE_LINUX -DHAVE_DEBUG
+LDFLAGS = -D_REENTRANT -L../../ -lmbedclient_gcc -L ../../../../nsdl-c -lnsdl_gcc -L ../../../../libService -lservice_gcc -L ../../../../mbedtls/library -lmbedtls -lmbedx509 -lmbedcrypto -lpthread
+all: $(TARGET) 
+
+$(TARGET): $(OBJECTS)
+	$(PLATFORM)g++ -g -o $(TARGET) $(OBJECTS) $(LDFLAGS)
+	
+.cpp.o:
+	$(PLATFORM)g++ -c -g -O2 $(CFLAGS) $< 
+	
+clean:
+	rm -f $(TARGET) $(OBJECTS)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/test/mbedclient_linux/main.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,429 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <unistd.h>
+#include <malloc.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <pthread.h>
+#include <signal.h> /* For SIGIGN and SIGINT */
+#include "mbed-client/m2minterfacefactory.h"
+#include "mbed-client/m2mdevice.h"
+#include "mbed-client/m2minterfaceobserver.h"
+#include "mbed-client/m2minterface.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+
+#include "mbed-trace/mbed_trace.h"
+
+const String &BOOTSTRAP_SERVER_ADDRESS = "coap://10.45.3.10:5693";
+const String &M2M_SERVER_ADDRESS = "coap://10.45.3.10:5683";
+const String &MANUFACTURER = "manufacturer";
+const String &TYPE = "type";
+const String &MODEL_NUMBER = "2015";
+const String &SERIAL_NUMBER = "12345";
+
+const uint8_t STATIC_VALUE[] = "Open Mobile Alliance";
+
+static void ctrl_c_handle_function(void);
+void close_function();
+typedef void (*signalhandler_t)(int); /* Function pointer type for ctrl-c */
+
+class MbedClient: public M2MInterfaceObserver {
+public:
+    MbedClient(){
+        _security = NULL;
+        _interface = NULL;
+        _register_security = NULL;
+        _device = NULL;
+        _object = NULL;
+        _bootstrapped = false;
+        _error = false;
+        _registered = false;
+        _unregistered = false;
+        _registration_updated = false;
+        _value = 0;
+    }
+
+    ~MbedClient() {
+        if(_security) {
+            delete _security;
+        }
+        if(_register_security){
+            delete _register_security;
+        }
+        if(_device) {
+           M2MDevice::delete_instance();
+            _device = NULL;
+        }
+        if(_object) {
+            delete _object;
+        }
+        if(_interface) {
+            delete _interface;
+        }
+    }
+
+    bool create_interface() {
+        _interface = M2MInterfaceFactory::create_interface(*this,
+                                                  "linux-endpoint",
+                                                  "test",
+                                                  60,
+                                                  5683,
+                                                  "",
+                                                  M2MInterface::UDP,
+                                                  M2MInterface::LwIP_IPv4,
+                                                  "");
+        printf("Endpoint Name : linux-endpoint\n");
+        return (_interface == NULL) ? false : true;
+    }
+
+    bool bootstrap_successful() {
+        while(!_bootstrapped && !_error) {
+            sleep(1);
+        }
+        return _bootstrapped;
+    }
+
+    bool register_successful() {
+        while(!_registered && !_error) {
+            sleep(1);
+        }
+        return _registered;
+    }
+
+    bool unregister_successful() {
+        while(!_unregistered && !_error) {
+            sleep(1);
+        }
+        return _unregistered;
+    }
+
+    bool registration_update_successful() {
+        while(!_registration_updated && !_error) {
+        }
+        return _registration_updated;
+    }
+
+    bool create_bootstrap_object() {
+        bool success = false;
+        if(_security) {
+            delete _security;
+        }
+        _security = M2MInterfaceFactory::create_security(M2MSecurity::Bootstrap);
+        if(_security) {
+            if(_security->set_resource_value(M2MSecurity::M2MServerUri, BOOTSTRAP_SERVER_ADDRESS) &&
+            _security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity)) {
+                success = true;
+                /* Not used now because there is no TLS or DTLS implementation available for stack.
+                security->set_resource_value(M2MSecurity::ServerPublicKey,certificates->certificate_ptr[0],certificates->certificate_len[0]);
+                security->set_resource_value(M2MSecurity::PublicKey,certificates->certificate_ptr[1],certificates->certificate_len[1]);
+                security->set_resource_value(M2MSecurity::Secretkey,certificates->own_private_key_ptr,certificates->own_private_key_len);
+                */
+            }
+        }
+        printf("Bootstrap Server Address %s\n", BOOTSTRAP_SERVER_ADDRESS.c_str());
+        return success;
+    }
+
+    bool create_register_object() {
+        bool success = false;
+        _register_security = M2MInterfaceFactory::create_security(M2MSecurity::M2MServer);
+        if(_register_security) {
+            if(_register_security->set_resource_value(M2MSecurity::M2MServerUri, M2M_SERVER_ADDRESS) &&            
+            _register_security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity)) {
+                success = true;
+                /* Not used now because there is no TLS or DTLS implementation available for stack.
+                security->set_resource_value(M2MSecurity::ServerPublicKey,certificates->certificate_ptr[0],certificates->certificate_len[0]);
+                security->set_resource_value(M2MSecurity::PublicKey,certificates->certificate_ptr[1],certificates->certificate_len[1]);
+                security->set_resource_value(M2MSecurity::Secretkey,certificates->own_private_key_ptr,certificates->own_private_key_len);
+                */
+            }
+        }
+        return success;
+    }
+
+    void test_bootstrap() {
+        _interface->bootstrap(_security);
+    }
+
+    bool create_device_object() {
+        bool success = false;
+        _device = M2MInterfaceFactory::create_device();
+        if(_device) {
+            _device->object_instance()->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+            if(_device->create_resource(M2MDevice::Manufacturer,MANUFACTURER)     &&
+               _device->create_resource(M2MDevice::DeviceType,TYPE)        &&
+               _device->create_resource(M2MDevice::ModelNumber,MODEL_NUMBER)      &&
+               _device->create_resource(M2MDevice::SerialNumber,SERIAL_NUMBER)) {
+                success = true;
+            }
+        }
+        return success;
+    }
+
+    void execute_function(void *argument) {
+        if(argument) {
+            char* arguments = (char*)argument;
+            printf("Received %s!!\n", arguments);
+        }
+        printf("I am executed !!\n");
+    }
+
+    bool create_generic_object() {
+        bool success = false;
+        _object = M2MInterfaceFactory::create_object("10");
+        if(_object) {
+            _object->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+            M2MObjectInstance* inst = _object->create_object_instance();
+            if(inst) {
+                inst->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+                inst->set_observable(false);
+                char buffer[20];
+                int size = sprintf(buffer,"%d",_value);
+
+                inst->create_static_resource("0",
+                                             "ResourceTest",
+                                             M2MResourceInstance::INTEGER,
+                                             STATIC_VALUE,
+                                             sizeof(STATIC_VALUE)-1);
+
+                M2MResourceInstance* instance = inst->create_dynamic_resource_instance("1",
+                                                                         "ResourceTest",
+                                                                         M2MResourceInstance::INTEGER,
+                                                                         true,0);
+
+                if(instance) {
+                    instance->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
+                    instance->set_value((const uint8_t*)buffer,
+                                 (const uint32_t)size);
+                    instance->set_execute_function(execute_callback(this,&MbedClient::execute_function));
+                    _value++;
+                }
+            }
+        }
+        return success;
+    }
+
+    void update_resource() {
+        if(_object) {
+            M2MObjectInstance* inst = _object->object_instance();
+            if(inst) {
+                M2MResource* res = inst->resource("1");
+                res = inst->resource("1");
+                if(res) {
+                    M2MResourceInstance *res_inst = res->resource_instance(0);
+                    if(res_inst) {
+                        char buffer1[20];
+                        int size1 = sprintf(buffer1,"%d",_value);
+                        res_inst->set_value((const uint8_t*)buffer1,
+                                       (const uint32_t)size1);
+                        _value++;
+                    }
+                }
+            }
+        }
+    }
+
+    void test_register(){
+        M2MObjectList object_list;
+        object_list.push_back(_device);
+        object_list.push_back(_object);
+
+        _interface->register_object(_register_security,object_list);
+    }
+
+    void test_update_register() {
+        uint32_t updated_lifetime = 20;
+        _registered = false;
+        _unregistered = false;
+        _interface->update_registration(_register_security,updated_lifetime);
+    }
+
+    void test_unregister() {
+        _interface->unregister_object(NULL);
+    }
+
+    void bootstrap_done(M2MSecurity *server_object){
+    if(server_object) {
+            _register_security = server_object;
+            _bootstrapped = true;
+            printf("\nBootstrapped\n");
+            printf("mDS Address %s\n",
+            _register_security->resource_value_string(M2MSecurity::M2MServerUri).c_str());
+        }
+    }
+
+    void object_registered(M2MSecurity */*security_object*/, const M2MServer &/*server_object*/){
+        _registered = true;
+        printf("\nRegistered\n");
+    }
+
+    void object_unregistered(M2MSecurity */*server_object*/){
+        _unregistered = true;
+        printf("\nUnregistered\n");
+    }
+
+    void registration_updated(M2MSecurity */*security_object*/, const M2MServer & /*server_object*/){
+        _registration_updated = true;
+        printf("\nregistration updated\n");
+
+    }
+
+    void error(M2MInterface::Error error){
+        _error = true;
+        close_function();
+        printf("\nError occured Error Code : %d\n", (int8_t)error);
+
+    }
+
+    void value_updated(M2MBase *base, M2MBase::BaseType type) {
+        printf("\nValue updated of Object name %s and Type %d\n",
+               base->name(), type);
+    }
+
+private:
+
+    M2MInterface        *_interface;
+    M2MSecurity         *_security;
+    M2MSecurity         *_register_security;
+    M2MDevice           *_device;
+    M2MObject           *_object;
+    bool                _bootstrapped;
+    bool                _error;
+    bool                _registered;
+    bool                _unregistered;
+    bool                _registration_updated;
+    int                 _value;
+};
+
+void* wait_for_bootstrap(void* arg) {
+    MbedClient *client;
+    client = (MbedClient*) arg;
+    if(client->bootstrap_successful()) {
+        printf("Registering endpoint\n");
+        client->test_register();
+    }
+    return NULL;
+}
+
+void* wait_for_unregister(void* arg) {
+    MbedClient *client;
+    client = (MbedClient*) arg;
+    if(client->unregister_successful()) {
+        printf("Unregistered done --> exiting\n");
+        close_function();
+    }
+    return NULL;
+}
+
+void* send_observation(void* arg) {
+    MbedClient *client;
+    client = (MbedClient*) arg;
+    static uint8_t counter = 0;
+    while(1) {
+        sleep(1);
+        if(counter >= 5 &&
+           client->register_successful()) {
+            printf("Sending observation\n");
+            client->update_resource();
+            counter = 0;
+        }
+        else
+            counter++;
+    }
+    return NULL;
+}
+
+static MbedClient *m2mclient = NULL;
+
+static void ctrl_c_handle_function(void)
+{
+    if(m2mclient && m2mclient->register_successful()) {
+        printf("Unregistering endpoint\n");
+        m2mclient->test_unregister();
+    }
+}
+
+void trace_printer(const char* str)
+{
+  printf("%s\r\n", str);
+}
+
+static pthread_t bootstrap_thread;
+static pthread_t unregister_thread;
+static pthread_t observation_thread;
+
+void close_function() {
+    pthread_cancel(bootstrap_thread);
+    pthread_cancel(unregister_thread);
+    pthread_cancel(observation_thread);
+}
+
+int main() {
+
+    MbedClient mbed_client;
+
+    m2mclient = &mbed_client;
+
+    mbed_trace_init();
+    mbed_trace_print_function_set( trace_printer );
+    mbed_trace_config_set(TRACE_MODE_COLOR|TRACE_ACTIVE_LEVEL_DEBUG|TRACE_CARRIAGE_RETURN);
+
+    signal(SIGINT, (signalhandler_t)ctrl_c_handle_function);
+
+    bool result = mbed_client.create_interface();
+    if(true == result) {
+        printf("\nInterface created\n");
+    }
+    result = mbed_client.create_bootstrap_object();
+    if(true == result) {
+        printf("Bootstrap object created");
+    }
+
+    result = mbed_client.create_register_object();
+    if(true == result) {
+        printf("Register object created");
+    }
+
+    result = mbed_client.create_device_object();
+    if(true == result){
+        printf("\nDevice object created !!\n");
+    }
+
+    result = mbed_client.create_generic_object();
+
+    if(true == result) {
+        printf("\nGeneric object created\n");
+    }
+
+//    printf("Bootstrapping endpoint\n");
+//    mbed_client.test_bootstrap();
+
+    printf("Registering endpoint\n");
+    mbed_client.test_register();
+
+
+    pthread_create(&bootstrap_thread, NULL, &wait_for_bootstrap, (void*) &mbed_client);
+    pthread_create(&observation_thread, NULL, &send_observation, (void*) &mbed_client);
+    pthread_create(&unregister_thread, NULL, &wait_for_unregister, (void*) &mbed_client);
+
+    pthread_join(bootstrap_thread, NULL);
+    pthread_join(unregister_thread, NULL);
+    pthread_join(observation_thread, NULL);
+
+    exit(EXIT_SUCCESS);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/version_check.sh	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,58 @@
+#!/bin/bash
+# Copyright (c) 2015 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# * http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+echo
+echo "Check version in module json"
+echo
+echo $1
+echo $2
+
+function version_gt() { 
+    test "$(echo "$@" | tr " " "\n" | sort -V | tail -n 1)" == "$1"; 
+}
+
+git clone $1 $PWD/master
+git clone $1 $PWD/pull_req
+pushd $PWD/pull_req
+git checkout $2
+popd
+if [ ! -e "$PWD/master/module.json" ]
+then
+	echo "$PWD/master/module.json not found."
+        exit 1
+fi
+if [ ! -e "$PWD/pull_req/module.json" ]
+then
+	echo "$PWD/pull_req/module.json not found."
+        exit 1
+fi
+
+OLD_VERSION=`sed -n 's#version##p' master/module.json | sed 's|[^0-9]*\([0-9\.]*\)|\1 |g'`
+NEW_VERSION=`sed -n 's#version##p' pull_req/module.json | sed 's|[^0-9]*\([0-9\.]*\)|\1 |g'`
+
+echo "Version in master branch: $OLD_VERSION"
+echo "New version: $NEW_VERSION"
+
+if [[ "$OLD_VERSION" != "$NEW_VERSION" ]]; then
+    if version_gt $NEW_VERSION $OLD_VERSION; then
+        exit 0
+    else
+        echo "Update version in module.json!"
+        exit 1
+fi
+else
+    echo "Update version in module.json!"
+    exit 1
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/xsl_script.sh	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# Copyright (c) 2015 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# * http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+echo 
+echo "Creating report"
+echo 
+
+echo '<?xml version="1.0" encoding="UTF-8" ?>
+<?xml-stylesheet type="text/xsl" href="junit_xsl.xslt"?>
+<list>' >> lcov/index.xml
+
+for f in lcov/results/*.xml
+do
+name=${f##*/}
+echo '<entry name="results/'"$name"'" />'>> lcov/index.xml
+done
+
+echo '</list>' >> lcov/index.xml
+
+echo
+echo "Report created to lcov/index.xml (outputs html)"
+echo
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#269f58d75b752a4e67a6a2d8c5c698635ffd6752
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_app.json	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,51 @@
+{
+    "config": {
+        "network-interface":{
+            "help": "options are ETHERNET,WIFI",
+            "value": "ETHERNET"
+        },
+        "wifi-ssid": {
+            "help": "WiFi SSID",
+            "value": "\"SSID\""
+        },
+        "wifi-password": {
+            "help": "WiFi Password",
+            "value": "\"Password\""
+        },
+        "wifi-tx": {
+            "help": "TX pin for serial connection to external device",
+            "value": "D1"
+        },
+        "wifi-rx": {
+            "help": "RX pin for serial connection to external device",
+            "value": "D0"
+        }
+    },
+    "macros": ["MBEDTLS_USER_CONFIG_FILE=\"mbedtls_mbed_client_config.h\""],
+    "target_overrides": {
+        "*": {
+            "target.features_add": ["NANOSTACK", "LOWPAN_ROUTER", "COMMON_PAL"],
+            "mbed-mesh-api.6lowpan-nd-channel-page": 0,
+            "mbed-mesh-api.6lowpan-nd-channel": 12,
+            "mbed-trace.enable": 0
+        },
+        "NUCLEO_F429ZI": {
+            "target.features_add": ["BLE"],
+            "target.extra_labels_add": ["ST_BLUENRG"],
+            "target.macros_add": ["IDB0XA1_D13_PATCH"]
+        },
+        "K64F": {
+            "target.features_add": ["BLE"],
+            "target.extra_labels_add": ["ST_BLUENRG"],
+            "target.macros_add": ["IDB0XA1_D13_PATCH"]
+        },
+        "NUCLEO_F401RE": {
+            "wifi-tx": "PA_11",
+            "wifi-rx": "PA_12"
+        },
+        "NUCLEO_F411RE": {
+            "wifi-tx": "PA_11",
+            "wifi-rx": "PA_12"
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_client_config.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2016 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_CLIENT_CONFIG_H
+#define MBED_CLIENT_CONFIG_H
+
+
+// Defines the number of times client should try re-connection towards
+// Server in case of connectivity loss , also defines the number of CoAP
+// re-transmission attempts.Default value is 3
+#define M2M_CLIENT_RECONNECTION_COUNT		3
+
+// Defines the interval (in seconds) in which client should try re-connection towards
+// Server in case of connectivity loss , also use the same interval for CoAP
+// re-transmission attempts. Default value is 5 seconds
+#define M2M_CLIENT_RECONNECTION_INTERVAL	5
+
+// Defines the keep-alive interval (in seconds) in which client should send keep alive
+// pings to server while connected through TCP mode. Default value is 300 seconds
+#define M2M_CLIENT_TCP_KEEPALIVE_TIME 		300
+
+// Defines the maximum CoAP messages that client can hold, maximum value is 6
+#define SN_COAP_DUPLICATION_MAX_MSGS_COUNT  2
+
+// Defines the size of blockwise CoAP messages that client can handle.
+// The values that can be defined uust be 2^x and x is at least 4.
+// Suitable values: 0, 16, 32, 64, 128, 256, 512 and 1024
+#define SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE  1024
+
+// Many pure LWM2M servers doen't accept 'obs' text in registration message.
+// While using Client against such servers, this flag can be set to define to
+// disable client sending 'obs' text for observable resources.
+#undef COAP_DISABLE_OBS_FEATURE
+
+// Disable Bootstrap functionality in client in order to reduce code size, if bootstrap
+// functionality is not required.
+#undef M2M_CLIENT_DISABLE_BOOTSTRAP_FEATURE
+
+#endif // MBED_CLIENT_CONFIG_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_config.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,63 @@
+// Automatically generated configuration file.
+// DO NOT EDIT, content will be overwritten.
+
+#ifndef __MBED_CONFIG_DATA__
+#define __MBED_CONFIG_DATA__
+
+// Configuration parameters
+#define MBED_CONF_APP_NETWORK_INTERFACE                          ETHERNET                                                                                         // set by application
+#define MBED_CONF_PLATFORM_STDIO_CONVERT_NEWLINES                0                                                                                                // set by library:platform
+#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL_PAGE       0                                                                                                // set by library:mbed-mesh-api
+#define MBED_CONF_LWIP_IPV4_ENABLED                              1                                                                                                // set by library:lwip
+#define MBED_CONF_LWIP_UDP_SOCKET_MAX                            4                                                                                                // set by library:lwip
+#define MBED_CONF_EVENTS_PRESENT                                 1                                                                                                // set by library:events
+#define MBED_CONF_LWIP_TCP_SERVER_MAX                            4                                                                                                // set by library:lwip
+#define MBED_CONF_APP_WIFI_TX                                    D1                                                                                               // set by application
+#define MBED_CONF_MBED_MESH_API_THREAD_DEVICE_TYPE               MESH_DEVICE_TYPE_THREAD_ROUTER                                                                   // set by library:mbed-mesh-api
+#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_DEVICE_TYPE           NET_6LOWPAN_ROUTER                                                                               // set by library:mbed-mesh-api
+#define MBED_CONF_NSAPI_PRESENT                                  1                                                                                                // set by library:nsapi
+#define MBED_CONF_LWIP_ADDR_TIMEOUT                              5                                                                                                // set by library:lwip
+#define MBED_CONF_LWIP_IP_VER_PREF                               4                                                                                                // set by library:lwip
+#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_SEC_LEVEL             5                                                                                                // set by library:mbed-mesh-api
+#define MBED_CONF_MBED_CLIENT_TCP_KEEPALIVE_TIME                 300                                                                                              // set by library:mbed-client
+#define MBED_CONF_PLATFORM_STDIO_FLUSH_AT_EXIT                   1                                                                                                // set by library:platform
+#define MBED_CONF_PLATFORM_STDIO_BAUD_RATE                       9600                                                                                             // set by library:platform
+#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_PSKC               {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff} // set by library:mbed-mesh-api
+#define MBED_CONF_LWIP_IPV6_ENABLED                              0                                                                                                // set by library:lwip
+#define MBED_CONF_NANOSTACK_HAL_NVM_CFSTORE                      0                                                                                                // set by library:nanostack-hal
+#define MBED_CONF_MBED_CLIENT_SN_COAP_MAX_BLOCKWISE_PAYLOAD_SIZE 0                                                                                                // set by library:mbed-client
+#define MBED_CONF_APP_MESH_RADIO_TYPE                            ATMEL                                                                                            // set by application
+#define MBED_CONF_MBED_TRACE_ENABLE                              0                                                                                                // set by application[*]
+#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL_MASK       0x7fff800                                                                                        // set by library:mbed-mesh-api
+#define MBED_CONF_APP_WIFI_RX                                    D0                                                                                               // set by application
+#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL_MASK          (1<<12)                                                                                          // set by library:mbed-mesh-api
+#define MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE              9600                                                                                             // set by library:platform
+#define MBED_CONF_MBED_CLIENT_RECONNECTION_INTERVAL              5                                                                                                // set by library:mbed-client
+#define MBED_CONF_LWIP_TCP_SOCKET_MAX                            4                                                                                                // set by library:lwip
+#define MBED_CONF_RTOS_PRESENT                                   1                                                                                                // set by library:rtos
+#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PSK_KEY_ID            1                                                                                                // set by library:mbed-mesh-api
+#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PANID_FILTER          0xffff                                                                                           // set by library:mbed-mesh-api
+#define MBED_CONF_MBED_MESH_API_HEAP_SIZE                        32500                                                                                            // set by library:mbed-mesh-api
+#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_CHANNEL            12                                                                                               // set by library:mbed-mesh-api
+#define MBED_CONF_MBED_CLIENT_EVENT_LOOP_SIZE                    1024                                                                                             // set by library:mbed-client
+#define MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_THREAD_STACK_SIZE     6144                                                                                             // set by library:nanostack-hal
+#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL_PAGE          0                                                                                                // set by application[*]
+#define MBED_CONF_APP_WIFI_PASSWORD                              "Password"                                                                                       // set by application
+#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_CHANNEL               12                                                                                               // set by application[*]
+#define MBED_CONF_MBED_CLIENT_RECONNECTION_LOOP                  1                                                                                                // set by library:mbed-client
+#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_SECURITY_MODE         NONE                                                                                             // set by library:mbed-mesh-api
+#define MBED_CONF_MBED_CLIENT_RECONNECTION_COUNT                 3                                                                                                // set by library:mbed-client
+#define MBED_CONF_MBED_MESH_API_6LOWPAN_ND_PSK_KEY               {0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf} // set by library:mbed-mesh-api
+#define MBED_CONF_MBED_MESH_API_THREAD_PSKD                      "Secret password"                                                                                // set by library:mbed-mesh-api
+#define MBED_CONF_MBED_MESH_API_THREAD_MASTER_KEY                {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff} // set by library:mbed-mesh-api
+#define MBED_CONF_NANOSTACK_CONFIGURATION                        mbedOS                                                                                           // set by library:nanostack
+#define MBED_CONF_LWIP_SOCKET_MAX                                4                                                                                                // set by library:lwip
+#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_ML_PREFIX          {0xfd, 0x00, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00}                                                 // set by library:mbed-mesh-api
+#define MBED_CONF_APP_WIFI_SSID                                  "SSID"                                                                                           // set by application
+#define MBED_CONF_MBED_MESH_API_THREAD_CONFIG_PANID              0xDEFA                                                                                           // set by library:mbed-mesh-api
+// Macros
+#define NS_USE_EXTERNAL_MBED_TLS                                                                                                                                  // defined by library:nanostack
+#define MBEDTLS_USER_CONFIG_FILE                                 "mbedtls_mbed_client_config.h"                                                                   // defined by application
+#define UNITY_INCLUDE_CONFIG_H                                                                                                                                    // defined by library:utest
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbedtls_mbed_client_config.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,111 @@
+/**
+ *  Minimal configuration for using mbedtls as part of mbed-client
+ *
+ *  NOTE! This is an optimized, minimal configuration for mbed Client.
+ *  We know it works with mbed Client but if you want to add more
+ *  services/communications to the application yourself - please ensure
+ *  you update this configuration accordingly. The default configuration
+ *  can be found from mbedTLS Github:
+ *
+ *  https://github.com/ARMmbed/mbedtls/blob/development/include/mbedtls/config.h
+ *
+ *
+ *  Copyright (C) 2006-2016, ARM Limited, All Rights Reserved
+ *  SPDX-License-Identifier: Apache-2.0
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License"); you may
+ *  not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  This file is part of mbed TLS (https://tls.mbed.org)
+ */
+
+
+#ifndef MBEDTLS_CUSTOM_CONFIG_H
+#define MBEDTLS_CUSTOM_CONFIG_H
+
+/* System support */
+#define MBEDTLS_HAVE_ASM
+
+/* mbed TLS feature support */
+#define MBEDTLS_ECP_DP_SECP256R1_ENABLED
+#define MBEDTLS_ECP_NIST_OPTIM
+#define MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
+#define MBEDTLS_SSL_PROTO_TLS1_2
+#define MBEDTLS_SSL_PROTO_DTLS
+#define MBEDTLS_SSL_DTLS_ANTI_REPLAY
+#define MBEDTLS_SSL_DTLS_HELLO_VERIFY
+#define MBEDTLS_SSL_EXPORT_KEYS
+
+/* mbed TLS modules */
+#define MBEDTLS_AES_C
+#define MBEDTLS_ASN1_PARSE_C
+#define MBEDTLS_ASN1_WRITE_C
+#define MBEDTLS_BIGNUM_C
+#define MBEDTLS_CIPHER_C
+#define MBEDTLS_CTR_DRBG_C
+#define MBEDTLS_ECP_C
+#define MBEDTLS_ENTROPY_C
+#define MBEDTLS_MD_C
+#define MBEDTLS_OID_C
+#define MBEDTLS_PK_C
+#define MBEDTLS_PK_PARSE_C
+#define MBEDTLS_SHA256_C
+#define MBEDTLS_SSL_COOKIE_C
+#define MBEDTLS_SSL_CLI_C
+#define MBEDTLS_SSL_SRV_C
+#define MBEDTLS_SSL_TLS_C
+
+// XXX mbedclient needs these: mbedtls_x509_crt_free, mbedtls_x509_crt_init, mbedtls_x509_crt_parse
+#define MBEDTLS_X509_USE_C
+#define MBEDTLS_X509_CRT_PARSE_C
+
+// XXX: clean these up!!
+#define MBEDTLS_SHA512_C
+#define MBEDTLS_ECDH_C
+#define MBEDTLS_GCM_C
+
+#define MBEDTLS_ECDH_C
+#define MBEDTLS_ECDSA_C
+#define MBEDTLS_X509_CRT_PARSE_C
+
+// Remove RSA, save 20KB at total
+#undef MBEDTLS_RSA_C
+#undef MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED
+
+// Remove error messages, save 10KB of ROM
+#undef MBEDTLS_ERROR_C
+
+// Remove selftesting and save 11KB of ROM
+#undef MBEDTLS_SELF_TEST
+
+// Reduces ROM size by 30 kB
+#undef MBEDTLS_ERROR_STRERROR_DUMMY
+#undef MBEDTLS_VERSION_FEATURES
+#undef MBEDTLS_DEBUG_C
+
+// needed for parsing the certificates
+#define MBEDTLS_PEM_PARSE_C
+// dep of the previous
+#define MBEDTLS_BASE64_C
+
+// Reduce IO buffer to save RAM, default is 16KB
+#define MBEDTLS_SSL_MAX_CONTENT_LEN 2048
+
+// define to save 8KB RAM at the expense of ROM
+#undef MBEDTLS_AES_ROM_TABLES
+
+// Save ROM and a few bytes of RAM by specifying our own ciphersuite list
+#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
+
+#include "mbedtls/check_config.h"
+
+#endif /* MBEDTLS_CUSTOM_CONFIG_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal.lib	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/pal/#4e46c0ea870631bb5bec3e4aa9fd7eebf3db21f0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/FETCH_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,6 @@
+03d26ec0975c752144e16bd70585782481fe8eca	not-for-merge	branch 'ARCH_A9_fix' of https://github.com/ARMmbed/pal
+3b664c8bb1384fb1ef244821d054814fbbecf51b	not-for-merge	branch 'PAL-R0.8-IAR-build-fixes' of https://github.com/ARMmbed/pal
+f6ed72fe831dc05c511cd055d4967537b6e7d953	not-for-merge	branch 'feature-mbed-os-bootloader' of https://github.com/ARMmbed/pal
+dd3291844bc556bbed39038074d9151b94dcbc31	not-for-merge	branch 'iar_fixes' of https://github.com/ARMmbed/pal
+6e21a6901c5346681b091a70b865dd787311e255	not-for-merge	branch 'master' of https://github.com/ARMmbed/pal
+066663c08f1f43bf88f0298be59221031d59a3bb	not-for-merge	branch 'releaseCandidate' of https://github.com/ARMmbed/pal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+4e46c0ea870631bb5bec3e4aa9fd7eebf3db21f0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/ORIG_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+6e21a6901c5346681b091a70b865dd787311e255
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/config	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,11 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[remote "origin"]
+	fetch = +refs/heads/*:refs/remotes/origin/*
+	url = https://github.com/ARMmbed/pal/
+[branch "master"]
+	remote = origin
+	merge = refs/heads/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/description	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/hooks/applypatch-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/hooks/commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/hooks/post-update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/hooks/pre-applypatch.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/hooks/pre-commit.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	echo "Error: Attempt to add a non-ascii file name."
+	echo
+	echo "This can cause problems if you want to work"
+	echo "with people on other platforms."
+	echo
+	echo "To be portable it is advisable to rename the file ..."
+	echo
+	echo "If you know what you are doing you can disable this"
+	echo "check using:"
+	echo
+	echo "  git config hooks.allownonascii true"
+	echo
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/hooks/pre-rebase.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/hooks/prepare-commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/hooks/update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
Binary file pal/.git/index has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/info/exclude	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+.hg
+.git
+.svn
+.CVS
+.cvs
+*.orig
+.build
+.export
+.msub
+.meta
+.ctags*
+*.uvproj
+*.uvopt
+*.project
+*.cproject
+*.launch
+*.ewp
+*.eww
+Makefile
+Debug
+*.htm
+*.settings
+mbed_settings.py
+*.py[cod]
+# subrepo ignores
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/logs/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+0000000000000000000000000000000000000000 6e21a6901c5346681b091a70b865dd787311e255 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056532 +0000	clone: from https://github.com/ARMmbed/pal/
+6e21a6901c5346681b091a70b865dd787311e255 4e46c0ea870631bb5bec3e4aa9fd7eebf3db21f0 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056537 +0000	checkout: moving from master to 4e46c0ea870631bb5bec3e4aa9fd7eebf3db21f0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/logs/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 6e21a6901c5346681b091a70b865dd787311e255 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056532 +0000	clone: from https://github.com/ARMmbed/pal/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/logs/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 6e21a6901c5346681b091a70b865dd787311e255 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056532 +0000	clone: from https://github.com/ARMmbed/pal/
Binary file pal/.git/objects/pack/pack-3d2d08030cabc95d2e1deeec0dfd50d9910e18c1.idx has changed
Binary file pal/.git/objects/pack/pack-3d2d08030cabc95d2e1deeec0dfd50d9910e18c1.pack has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/packed-refs	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,32 @@
+# pack-refs with: peeled 
+03d26ec0975c752144e16bd70585782481fe8eca refs/remotes/origin/ARCH_A9_fix
+3b664c8bb1384fb1ef244821d054814fbbecf51b refs/remotes/origin/PAL-R0.8-IAR-build-fixes
+f6ed72fe831dc05c511cd055d4967537b6e7d953 refs/remotes/origin/feature-mbed-os-bootloader
+dd3291844bc556bbed39038074d9151b94dcbc31 refs/remotes/origin/iar_fixes
+6e21a6901c5346681b091a70b865dd787311e255 refs/remotes/origin/master
+066663c08f1f43bf88f0298be59221031d59a3bb refs/remotes/origin/releaseCandidate
+778b5bb2e8f9c23916227faa0999277cbe5d449a refs/tags/PAL-R0.8
+4e46c0ea870631bb5bec3e4aa9fd7eebf3db21f0 refs/tags/PAL-R1.0
+4e46c0ea870631bb5bec3e4aa9fd7eebf3db21f0 refs/tags/PAL-R1.0RC
+6d088ca840faf4d08ad42be272b7e84424ffa480 refs/tags/PAL-R1.1
+c453dcb6b637002d6585a04edafdc7096b46ef8b refs/tags/PAL-R1.1RC
+^8f8f330213245fd1072de2fa9aa04d709e235f8d
+e6738b403b63174a10015acbe7e7dbb576872b5e refs/tags/mbedCloudClient-R1.1
+^6d088ca840faf4d08ad42be272b7e84424ffa480
+79b0d23d539cf09a153f0a399daaba9b35671fd1 refs/tags/mbedCloudClient-R1.1-RC1
+^6d088ca840faf4d08ad42be272b7e84424ffa480
+ff2db616074f491c6ddeddedda8c5d4f6fc46353 refs/tags/mbedCloudClient-R1.1-RC2
+^6d088ca840faf4d08ad42be272b7e84424ffa480
+84e39936d5a06c3842b9e30f97a180f694ef621b refs/tags/mbedCloudClient-R1.1-RC3
+^6d088ca840faf4d08ad42be272b7e84424ffa480
+83e084d2c90b8b6d796a8b430dfdd336f0d348a9 refs/tags/mbedCloudClient-r0.8
+^797a41b1ec7d5d7e495267cf485faba2fe0f4573
+4b31ee48cd64b0836031305863a3164b864a19f3 refs/tags/mbedCloudClient-r0.8.1
+^797a41b1ec7d5d7e495267cf485faba2fe0f4573
+25b3dd71affa02d7be7c9343ba0f142b4c25627b refs/tags/mbedCloudClient-r0.8.2
+^08f7c93f8e24b00817a817d6f36ac676f10251c2
+d456bf624ff44e2f5d155b15633f51dbd11101de refs/tags/mbedCloudClient-r1.0
+^4e46c0ea870631bb5bec3e4aa9fd7eebf3db21f0
+e2102fd27ab7ed604eba2849dc7d3a840b410017 refs/tags/place_holder_for_official_0.8
+c0742b2e32586a14d4ef87807674d21d3dfbbe39 refs/tags/test_tag
+^797a41b1ec7d5d7e495267cf485faba2fe0f4573
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+6e21a6901c5346681b091a70b865dd787311e255
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.git/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+ref: refs/remotes/origin/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.gitignore	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,51 @@
+*.o
+*.so
+*.a
+*.user
+*.aps
+*.pch
+*.vspscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.bak
+*.cache
+*.ilk
+*.log
+*.obj
+*.DxLog
+*.sbr
+*.exe
+*.tlog
+Thumbs.db
+*.idb
+*.pdb
+*.bsc
+*.pdb
+*.sdf
+*.opensdf
+*.pyc
+*.d
+*.elf
+*.bin
+*.lst
+*.*~
+*.map
+*.hex
+.cproject
+.project
+*.vc.*
+Build/
+out/
+mbed-os/
+CMakeFiles/
+CMakeCache.txt
+files.cmake
+Makefile
+cmake_install.cmake
+Test/RTOS_tests/*
+Workspace/VS2013/PAL/PAL.vcxproj.filters
+Workspace/VS2013/PAL/PAL.vcxproj
+Workspace/VS2013/PAL/PAL.sln
+.vscode/*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/.mbedignore	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,5 @@
+Docs/*
+Examples/*
+Non-Dist/*
+Test/*
+Utils/*
\ No newline at end of file
Binary file pal/Docs/PAL Porting Guide.pdf has changed
Binary file pal/Docs/PAL.chm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# PAL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/ReleaseNotes/R1.0-release.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,37 @@
+# Platform Abstraction Layer R1.0 Release Notes
+
+## Introduction
+This version is the first release of the Platform Abstraction Layer (PAL) package. The target of PAL is to support easy porting of the mbed Cloud Client services to different platforms and operating systems. 
+The version also includes a reference porting to the mbedOS 5.2 (mbed-os-5.2) operating system, running on Cortex-M SoC.
+
+## Content
+Version R1.0 includes the following features:
+
+1. Service APIs:
+  A set of APIs to be used by the mbed Cloud Client services. Currently supported:
+  1. RTOS API: OS primitives: Threads, Semaphores, memory pools, ...
+  2. Network API: networking API. Supporting TCP & UDP in synchronous & asynchronous modes. 
+
+2. Platform APIs
+  Set of APIs the platform owner is expected to implement for the specific device and operating system.
+
+3. Documentation:
+  1. API documentation
+  2. Porting guide
+  
+3. Reference implementation of the Platform APIs for the mbedOS 5.2 (mbed-os-5.2) OS.
+
+## Release
+Unless differently stated in file, the PAL package is released as an Open Source, under the Apache-2.0 license model. You can find a copy of the license [here](https://github.com/ARMmbed/pal/blob/master/apache-2.0.txt).
+
+The repository of PAL can be found at: https://github.com/ARMmbed/pal
+
+The Release tag is: PAL-R1.0
+
+## Known issues
+No known issues exists at the time of release.
+
+Since not all interfaces needed by the services are covered yet, we assume [mbedTLS](https://tls.mbed.org) is supplied by the platform.
+
+## Reporting issues
+Please report any issue on the PAL GitHub project.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/annotated.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Data Structures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structures</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d8/d19/struct__pal_buffer__t.html" target="_self">_palBuffer_t</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d2/dab/struct__pal_const_buffer__t.html" target="_self">_palConstBuffer_t</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="df/d48/structpal__thread_local_store.html" target="_self">pal_threadLocalStore</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="de/dfc/structpal__time_val.html" target="_self">pal_timeVal</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d9/d16/structpal_net_interface_info.html" target="_self">palNetInterfaceInfo</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="db/d42/structpal_socket_address.html" target="_self">palSocketAddress</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="d3/d30/structthreads_argument.html" target="_self">threadsArgument</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="dc/d2c/structtimer_argument.html" target="_self">timerArgument</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
Binary file pal/Docs/html/arrowdown.png has changed
Binary file pal/Docs/html/arrowright.png has changed
Binary file pal/Docs/html/bc_s.png has changed
Binary file pal/Docs/html/bdwn.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/classes.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Data Structure Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structure Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a>&#160;|&#160;<a class="qindex" href="#letter__">_</a></div>
+<table class="classindex">
+<tr><td rowspan="2" valign="bottom"><a name="letter__"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;_&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="d2/dab/struct__pal_const_buffer__t.html">_palConstBuffer_t</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="de/dfc/structpal__time_val.html">pal_timeVal</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_t"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;t&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="dc/d2c/structtimer_argument.html">timerArgument</a>&#160;&#160;&#160;</td></tr>
+<tr><td rowspan="2" valign="bottom"><a name="letter_p"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;p&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="d9/d16/structpal_net_interface_info.html">palNetInterfaceInfo</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="d8/d19/struct__pal_buffer__t.html">_palBuffer_t</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="db/d42/structpal_socket_address.html">palSocketAddress</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="d3/d30/structthreads_argument.html">threadsArgument</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td></td><td valign="top"><a class="el" href="df/d48/structpal__thread_local_store.html">pal_threadLocalStore</a>&#160;&#160;&#160;</td><td></td><td></td><td></td></tr>
+<tr><td></td><td></td><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a>&#160;|&#160;<a class="qindex" href="#letter__">_</a></div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
Binary file pal/Docs/html/closed.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d0/d51/pal__test__utils_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Common/pal_test_utils.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_f8e9a069a0807d5f7341f9bc5892e16f.html">Common</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_test_utils.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="../../d0/d51/pal__test__utils_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a7f0c3a0f2f1c4062d776a7bc64bed815"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d51/pal__test__utils_8h.html#a7f0c3a0f2f1c4062d776a7bc64bed815">TEST_PRINTF</a>(ARGS...)&#160;&#160;&#160;<a class="el" href="../../d4/d01/pal__rtos_8h.html#a2e5b95b90c72b6bdf62897efd58f98fb">PAL_PRINTF</a>(ARGS)</td></tr>
+<tr class="separator:a7f0c3a0f2f1c4062d776a7bc64bed815"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a7f0c3a0f2f1c4062d776a7bc64bed815"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TEST_PRINTF</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">ARGS...</td><td>)</td>
+          <td>&#160;&#160;&#160;<a class="el" href="../../d4/d01/pal__rtos_8h.html#a2e5b95b90c72b6bdf62897efd58f98fb">PAL_PRINTF</a>(ARGS)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d0/d51/pal__test__utils_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Common/pal_test_utils.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_f8e9a069a0807d5f7341f9bc5892e16f.html">Common</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_test_utils.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../d0/d51/pal__test__utils_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef TEST_UNITEST_PAL_TEST_UTILS_H_</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define TEST_UNITEST_PAL_TEST_UTILS_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="../../d0/d51/pal__test__utils_8h.html#a7f0c3a0f2f1c4062d776a7bc64bed815">   21</a></span>&#160;<span class="preprocessor">#define TEST_PRINTF(ARGS...) PAL_PRINTF(ARGS)</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* TEST_UNITEST_PAL_TEST_UTILS_H_ */</span><span class="preprocessor"></span></div></div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d1/d99/pal__update__test__runner_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_update_test_runner.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_update_test_runner.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;unity.h&quot;</code><br />
+<code>#include &quot;unity_fixture.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad550ecdbd7d30076749ad542e11670b4"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/d99/pal__update__test__runner_8c.html#ad550ecdbd7d30076749ad542e11670b4">TEST_GROUP_RUNNER</a> (pal_update)</td></tr>
+<tr class="separator:ad550ecdbd7d30076749ad542e11670b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad550ecdbd7d30076749ad542e11670b4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d1/dc4/pal__network_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,844 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Modules/Networking/pal_network.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_5097254b22164c5ad71a4eec719a72ee.html">Modules</a></li><li class="navelem"><a class="el" href="../../dir_59e3d70b06141856a554dd7aab1293ae.html">Networking</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_network.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d9/d16/pal_8h_source.html">pal.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d17/pal__network_8h_source.html">pal_network.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d2c/pal__plat__network_8h_source.html">pal_plat_network.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:abd4e26912e35fc58e5bc0172765bdc6e"><td class="memItemLeft" align="right" valign="top">typedef struct pal_in_addr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#abd4e26912e35fc58e5bc0172765bdc6e">pal_in_addr_t</a></td></tr>
+<tr class="separator:abd4e26912e35fc58e5bc0172765bdc6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc2b368e206e7353e31a520fa573cd8a"><td class="memItemLeft" align="right" valign="top">typedef struct pal_socketAddressInternal&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#abc2b368e206e7353e31a520fa573cd8a">pal_socketAddressInternal_t</a></td></tr>
+<tr class="separator:abc2b368e206e7353e31a520fa573cd8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaf4e46664d7b7f8902c69cb72a65c943"><td class="memItemLeft" align="right" valign="top">typedef struct pal_socketAddressInternal6&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#aaf4e46664d7b7f8902c69cb72a65c943">pal_socketAddressInternal6_t</a></td></tr>
+<tr class="separator:aaf4e46664d7b7f8902c69cb72a65c943"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a081cc2fd09644c41068673487b39f6b8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#a081cc2fd09644c41068673487b39f6b8">pal_registerNetworkInterface</a> (void *networkInterfaceContext, uint32_t *interfaceIndex)</td></tr>
+<tr class="separator:a081cc2fd09644c41068673487b39f6b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abbeb1395896eb79ab564568b9ab8a628"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#abbeb1395896eb79ab564568b9ab8a628">pal_setSockAddrPort</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, uint16_t port)</td></tr>
+<tr class="separator:abbeb1395896eb79ab564568b9ab8a628"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed02a6f53b88e1d5e81607b1221a3efa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#aed02a6f53b88e1d5e81607b1221a3efa">pal_setSockAddrIPV4Addr</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, <a class="el" href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">palIpV4Addr_t</a> ipV4Addr)</td></tr>
+<tr class="separator:aed02a6f53b88e1d5e81607b1221a3efa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0cc13f7ef9ceb4a75884a8bebf0d831c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#a0cc13f7ef9ceb4a75884a8bebf0d831c">pal_setSockAddrIPV6Addr</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, <a class="el" href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">palIpV6Addr_t</a> ipV6Addr)</td></tr>
+<tr class="separator:a0cc13f7ef9ceb4a75884a8bebf0d831c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade5cf610808db5462666465b648e7724"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#ade5cf610808db5462666465b648e7724">pal_getSockAddrIPV4Addr</a> (const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, <a class="el" href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">palIpV4Addr_t</a> ipV4Addr)</td></tr>
+<tr class="separator:ade5cf610808db5462666465b648e7724"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a153bc6165f64bbf3e6bcc79b0d39138f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#a153bc6165f64bbf3e6bcc79b0d39138f">pal_getSockAddrIPV6Addr</a> (const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, <a class="el" href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">palIpV6Addr_t</a> ipV6Addr)</td></tr>
+<tr class="separator:a153bc6165f64bbf3e6bcc79b0d39138f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4658c7e8224b536d4fd71fed2602b12e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#a4658c7e8224b536d4fd71fed2602b12e">pal_getSockAddrPort</a> (const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, uint16_t *port)</td></tr>
+<tr class="separator:a4658c7e8224b536d4fd71fed2602b12e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa852fb6e271fb91efd65e2a1ead93b9a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a> domain, <a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a> type, bool nonBlockingSocket, uint32_t interfaceNum, <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *socket)</td></tr>
+<tr class="separator:aa852fb6e271fb91efd65e2a1ead93b9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d9d4e04e43995123efe134c767cd6e1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#a2d9d4e04e43995123efe134c767cd6e1">pal_getSocketOptions</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a> optionName, void *optionValue, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *optionLength)</td></tr>
+<tr class="separator:a2d9d4e04e43995123efe134c767cd6e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e1bbe81a35a1cb54c351912bb97736f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#a2e1bbe81a35a1cb54c351912bb97736f">pal_setSocketOptions</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, int optionName, const void *optionValue, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> optionLength)</td></tr>
+<tr class="separator:a2e1bbe81a35a1cb54c351912bb97736f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac1ff0fb22cbd84e6c7920c095ddbde63"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#ac1ff0fb22cbd84e6c7920c095ddbde63">pal_bind</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *myAddress, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> addressLength)</td></tr>
+<tr class="separator:ac1ff0fb22cbd84e6c7920c095ddbde63"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b5e705be1e7c3c16080f2b05b87ff7d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#a6b5e705be1e7c3c16080f2b05b87ff7d">pal_receiveFrom</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, void *buffer, size_t length, <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *from, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *fromLength, size_t *bytesReceived)</td></tr>
+<tr class="separator:a6b5e705be1e7c3c16080f2b05b87ff7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acce808f708e653b6bed317072888ca23"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#acce808f708e653b6bed317072888ca23">pal_sendTo</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, const void *buffer, size_t length, const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *to, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> toLength, size_t *bytesSent)</td></tr>
+<tr class="separator:acce808f708e653b6bed317072888ca23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18197e0f047f17d2617461594f5ed644"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#a18197e0f047f17d2617461594f5ed644">pal_close</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *socket)</td></tr>
+<tr class="separator:a18197e0f047f17d2617461594f5ed644"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65df7c68bcf7a21db5d1a7a3830fd19c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#a65df7c68bcf7a21db5d1a7a3830fd19c">pal_getNumberOfNetInterfaces</a> (uint32_t *numInterfaces)</td></tr>
+<tr class="separator:a65df7c68bcf7a21db5d1a7a3830fd19c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5258efd8b21d9c881df29b29686674d8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#a5258efd8b21d9c881df29b29686674d8">pal_getNetInterfaceInfo</a> (uint32_t interfaceNum, <a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a> *interfaceInfo)</td></tr>
+<tr class="separator:a5258efd8b21d9c881df29b29686674d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5cab4ea55a3d28cfd8d4dca8376a111c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dc4/pal__network_8c.html#a5cab4ea55a3d28cfd8d4dca8376a111c">pal_socketMiniSelect</a> (const <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socketsToCheck[<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>], uint32_t numberOfSockets, <a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a> *timeout, uint8_t palSocketStatus[<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>], uint32_t *numberOfSocketsSet)</td></tr>
+<tr class="separator:a5cab4ea55a3d28cfd8d4dca8376a111c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="abd4e26912e35fc58e5bc0172765bdc6e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct pal_in_addr  <a class="el" href="../../d1/dc4/pal__network_8c.html#abd4e26912e35fc58e5bc0172765bdc6e">pal_in_addr_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aaf4e46664d7b7f8902c69cb72a65c943"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct pal_socketAddressInternal6  <a class="el" href="../../d1/dc4/pal__network_8c.html#aaf4e46664d7b7f8902c69cb72a65c943">pal_socketAddressInternal6_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abc2b368e206e7353e31a520fa573cd8a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct pal_socketAddressInternal  <a class="el" href="../../d1/dc4/pal__network_8c.html#abc2b368e206e7353e31a520fa573cd8a">pal_socketAddressInternal_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac1ff0fb22cbd84e6c7920c095ddbde63"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_bind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>myAddress</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>addressLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>bind a given socket to a local address </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>the socket to bind </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">myAddress</td><td>the address to which to bind </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">addressLength</td><td>the length of the address passed in myAddress </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a18197e0f047f17d2617461594f5ed644"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_close </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *&#160;</td>
+          <td class="paramname"><em>socket</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>close a network socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">socket</td><td>release and zero socket pointed to by given pointer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>recieves palSocket_t* and not palSocket_t so that it can zero the socket to avoid re-use. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5258efd8b21d9c881df29b29686674d8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getNetInterfaceInfo </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>interfaceNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a> *&#160;</td>
+          <td class="paramname"><em>interfaceInfo</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get information regarding the socket at the index/interface number given (this number is returned when registering the socket) </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">interfaceNum</td><td>the number of the interface to get information for. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">interfaceInfo</td><td>will be set to the information for the given interface number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a65df7c68bcf7a21db5d1a7a3830fd19c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getNumberOfNetInterfaces </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>numInterfaces</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get the number of current network interfaces </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">numInterfaces</td><td>will hold the number of interfaces after a successful call </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ade5cf610808db5462666465b648e7724"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getSockAddrIPV4Addr </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">palIpV4Addr_t</a>&#160;</td>
+          <td class="paramname"><em>ipV4Addr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get an ipV4 address from a palSocketAddress_t </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">ipV4Addr</td><td>the address that is set in the address </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a153bc6165f64bbf3e6bcc79b0d39138f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getSockAddrIPV6Addr </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">palIpV6Addr_t</a>&#160;</td>
+          <td class="paramname"><em>ipV6Addr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get an ipV6 address from a palSocketAddress_t </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">ipV6Addr</td><td>the address that is set in the address </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4658c7e8224b536d4fd71fed2602b12e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getSockAddrPort </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint16_t *&#160;</td>
+          <td class="paramname"><em>port</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get a port from a palSocketAddress_t </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">port</td><td>the port that is set in the address </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2d9d4e04e43995123efe134c767cd6e1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getSocketOptions </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a>&#160;</td>
+          <td class="paramname"><em>optionName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>optionValue</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *&#160;</td>
+          <td class="paramname"><em>optionLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get options for a given network socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>the socket for which to get options </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionName</td><td>for which we are setting the option (see enum PAL_NET_SOCKET_OPTION for supported types) </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">optionValue</td><td>the buffer holding the option value returned by the function </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">optionLength</td><td>the size of the buffer provided for optionValue when calling the function after the call it will contain the length of data actually written to the optionValue buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6b5e705be1e7c3c16080f2b05b87ff7d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_receiveFrom </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>from</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *&#160;</td>
+          <td class="paramname"><em>fromLength</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>bytesReceived</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>receive a payload from the given socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>the socket to receive from [we expect sockets passed to this function to be of type PAL_SOCK_DGRAM ( the implementation may support other types as well) ] </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">buffer</td><td>the buffer for the payload data </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>of the buffer for the payload data </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">from</td><td>the address which sent the payload </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">fromLength</td><td>the length of the 'from' address, after completion will contain the amount of data actually written to the from address </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">bytesReceived</td><td>after the call will contain the actual amount of payload data received to the buffer </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a081cc2fd09644c41068673487b39f6b8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_registerNetworkInterface </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>networkInterfaceContext</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>interfaceIndex</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Register a network interface for use with PAL sockets - must be called before other socket functions - most APIs will not work before a single interface is added. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">networkInterfaceContext</td><td>of the network interface to be added (OS specific , e.g. in MbedOS this is the NetworkInterface object pointer for the network adapter [note: we assume connect has already been called on this]) - if not available use NULL . </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">InterfaceIndex</td><td>will contain the index assigned to the interface in case it has been assigned successfully. this index can be used when creating a socket to bind the socket to the interface. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="acce808f708e653b6bed317072888ca23"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_sendTo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>to</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>toLength</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>bytesSent</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>send a payload to the given address using the given socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>the socket to use for sending the payload [we expect sockets passed to this function to be of type PAL_SOCK_DGRAM ( the implementation may support other types as well) ] </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">buffer</td><td>the buffer for the payload data </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>of the buffer for the payload data </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">to</td><td>the address to which to payload should be sent </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">toLength</td><td>the length of the 'to' address </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">bytesSent</td><td>after the call will contain the actual amount of payload data sent </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aed02a6f53b88e1d5e81607b1221a3efa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_setSockAddrIPV4Addr </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">palIpV4Addr_t</a>&#160;</td>
+          <td class="paramname"><em>ipV4Addr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>set an ipV4 address to a palSocketAddress_t and also set the addressType to ipv4 </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">ipV4Addr</td><td>the address value to set </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a0cc13f7ef9ceb4a75884a8bebf0d831c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_setSockAddrIPV6Addr </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">palIpV6Addr_t</a>&#160;</td>
+          <td class="paramname"><em>ipV6Addr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>set an ipV6 address to a palSocketAddress_t and also set the addressType to ipv6 </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">ipV6Addr</td><td>the address value to set </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abbeb1395896eb79ab564568b9ab8a628"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_setSockAddrPort </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>port</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>set a port to a palSocketAddress_t setting it can be done either directly or via the palSetSockAddrIPV4Addr or palSetSockAddrIPV6Addr functions </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">port</td><td>the port number to set </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>for the socket to be set correctly the addressType field of the address must be set correctly. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2e1bbe81a35a1cb54c351912bb97736f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_setSocketOptions </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>optionName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>optionValue</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>optionLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>set options for a given network socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>the socket for which to get options </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionName</td><td>for which we are setting the option (see enum PAL_NET_SOCKET_OPTION for supported types) </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionValue</td><td>the buffer holding the option value to set for the given option </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionLength</td><td>the size of the buffer provided for optionValue </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa852fb6e271fb91efd65e2a1ead93b9a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_socket </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a>&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>nonBlockingSocket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>interfaceNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *&#160;</td>
+          <td class="paramname"><em>socket</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get a network socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">domain</td><td>the domain for the created socket (see palSocketDomain_t for supported types) </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>the type for the created socket (see palSocketType_t for supported types) </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">nonBlockingSocket</td><td>if true the socket created is created as non-blocking (i.e. with O_NONBLOCK set) </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">interfaceNum</td><td>the number of the network interface used for this socket (info in interfaces supported via pal_getNumberOfNetInterfaces and pal_getNetInterfaceInfo ), choose PAL_NET_DEFAULT_INTERFACE for default interface. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">socket</td><td>socket is returned through this output parameter </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5cab4ea55a3d28cfd8d4dca8376a111c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_socketMiniSelect </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socketsToCheck</em>[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>numberOfSockets</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a> *&#160;</td>
+          <td class="paramname"><em>timeout</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>palSocketStatus</em>[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>numberOfSocketsSet</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>check if one or more (up to PAL_NET_SOCKET_SELECT_MAX_SOCKETS) sockets given has data available for reading/writing/error, the function will block until data is available for one of the given sockets or the timeout expires. To use the function: set the sockets you want to check in the socketsToCheck array and set a timeout, when it returns the socketStatus output will indicate the status of each socket passed in. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socketsToCheck</td><td>on input: the array of up to 8 sockets handles to check. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">numberOfSockets</td><td>the number of sockets set in the input socketsToCheck array. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>the amount of time till timeout if no socket activity is detected </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">socketStatus</td><td>will provide information on each socket in the input array indicating which event was set (none, rx, tx, err) check for desired event using macros. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">numberOfSocketsSet</td><td>is the total number of sockets set in all three data sets (tx, rx, err)after the function completes </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the entry in index x in the socketStatus array corresponds to the socket at index x in the sockets to check array. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d1/dee/pal__rtos__test__utils_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,338 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Common/pal_rtos_test_utils.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_f8e9a069a0807d5f7341f9bc5892e16f.html">Common</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_rtos_test_utils.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d9/d28/pal__rtos__test__utils_8h_source.html">pal_rtos_test_utils.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d4/d01/pal__rtos_8h_source.html">pal_rtos.h</a>&quot;</code><br />
+<code>#include &quot;unity_fixture.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d16/pal_8h_source.html">pal.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0a153da028aee8f220377b516ff065c8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#a0a153da028aee8f220377b516ff065c8">palThreadFunc1</a> (void const *argument)</td></tr>
+<tr class="separator:a0a153da028aee8f220377b516ff065c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29dc69cbcc48b55d48a5fd668da7fe15"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#a29dc69cbcc48b55d48a5fd668da7fe15">palThreadFunc2</a> (void const *argument)</td></tr>
+<tr class="separator:a29dc69cbcc48b55d48a5fd668da7fe15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf68b041960be3c58f516986504fcd0f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#acf68b041960be3c58f516986504fcd0f">palThreadFunc3</a> (void const *argument)</td></tr>
+<tr class="separator:acf68b041960be3c58f516986504fcd0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a844c7469189866b502ef85df5063e79c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#a844c7469189866b502ef85df5063e79c">palThreadFunc4</a> (void const *argument)</td></tr>
+<tr class="separator:a844c7469189866b502ef85df5063e79c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5be7a07498de9cc847215e6aa8f77914"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#a5be7a07498de9cc847215e6aa8f77914">palThreadFunc5</a> (void const *argument)</td></tr>
+<tr class="separator:a5be7a07498de9cc847215e6aa8f77914"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a52dc025f6020b0d456bbbcacc3aa4e3e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#a52dc025f6020b0d456bbbcacc3aa4e3e">palThreadFunc6</a> (void const *argument)</td></tr>
+<tr class="separator:a52dc025f6020b0d456bbbcacc3aa4e3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abac822ed4b356b85117101aa0d8701d6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#abac822ed4b356b85117101aa0d8701d6">palTimerFunc1</a> (void const *argument)</td></tr>
+<tr class="separator:abac822ed4b356b85117101aa0d8701d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8581bcb8f9f435a87c3dd651d65e32c8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#a8581bcb8f9f435a87c3dd651d65e32c8">palTimerFunc2</a> (void const *argument)</td></tr>
+<tr class="separator:a8581bcb8f9f435a87c3dd651d65e32c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7c8c7a38fca8b62acc6094ba1f072ec7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#a7c8c7a38fca8b62acc6094ba1f072ec7">palThreadFuncCustom1</a> (void const *argument)</td></tr>
+<tr class="separator:a7c8c7a38fca8b62acc6094ba1f072ec7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a663a9130dc598399ec3bd9ab9e6680fa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#a663a9130dc598399ec3bd9ab9e6680fa">palThreadFuncCustom2</a> (void const *argument)</td></tr>
+<tr class="separator:a663a9130dc598399ec3bd9ab9e6680fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a300d95346a90a5f17aa6140647243b64"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#a300d95346a90a5f17aa6140647243b64">palThreadFuncCustom3</a> (void const *argument)</td></tr>
+<tr class="separator:a300d95346a90a5f17aa6140647243b64"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa5b1f9c927c18d821a46d99dfe533cb0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#aa5b1f9c927c18d821a46d99dfe533cb0">palThreadFuncCustom4</a> (void const *argument)</td></tr>
+<tr class="separator:aa5b1f9c927c18d821a46d99dfe533cb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a393f7a6e534c05e534cfdaf46473db45"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#a393f7a6e534c05e534cfdaf46473db45">palRunThreads</a> ()</td></tr>
+<tr class="separator:a393f7a6e534c05e534cfdaf46473db45"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:aecb21b545f5a0c542dc82a8ef0b89b3f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">threadsArgument_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#aecb21b545f5a0c542dc82a8ef0b89b3f">threadsArg</a></td></tr>
+<tr class="separator:aecb21b545f5a0c542dc82a8ef0b89b3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad4897778c444c8e8fbcb65c84901ac78"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">timerArgument_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d1/dee/pal__rtos__test__utils_8c.html#ad4897778c444c8e8fbcb65c84901ac78">timerArgs</a></td></tr>
+<tr class="separator:ad4897778c444c8e8fbcb65c84901ac78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a393f7a6e534c05e534cfdaf46473db45"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palRunThreads </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0a153da028aee8f220377b516ff065c8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc1 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a29dc69cbcc48b55d48a5fd668da7fe15"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc2 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acf68b041960be3c58f516986504fcd0f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc3 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a844c7469189866b502ef85df5063e79c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc4 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5be7a07498de9cc847215e6aa8f77914"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc5 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a52dc025f6020b0d456bbbcacc3aa4e3e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc6 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7c8c7a38fca8b62acc6094ba1f072ec7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFuncCustom1 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a663a9130dc598399ec3bd9ab9e6680fa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFuncCustom2 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a300d95346a90a5f17aa6140647243b64"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFuncCustom3 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa5b1f9c927c18d821a46d99dfe533cb0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFuncCustom4 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abac822ed4b356b85117101aa0d8701d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palTimerFunc1 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8581bcb8f9f435a87c3dd651d65e32c8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palTimerFunc2 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="aecb21b545f5a0c542dc82a8ef0b89b3f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">threadsArgument_t</a> threadsArg</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad4897778c444c8e8fbcb65c84901ac78"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">timerArgument_t</a> timerArgs</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d2/d3a/pal__rtos__test__main___free_r_t_o_s_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,198 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_rtos_test_main_FreeRTOS.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_rtos_test_main_FreeRTOS.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;fsl_device_registers.h&quot;</code><br />
+<code>#include &quot;fsl_debug_console.h&quot;</code><br />
+<code>#include &quot;board.h&quot;</code><br />
+<code>#include &quot;pin_mux.h&quot;</code><br />
+<code>#include &quot;clock_config.h&quot;</code><br />
+<code>#include &quot;unity.c&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a37fa0e609ebaa8565ad388e41cc92a43"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d3a/pal__rtos__test__main___free_r_t_o_s_8c.html#a37fa0e609ebaa8565ad388e41cc92a43">APP_DEBUG_UART_BAUDRATE</a>&#160;&#160;&#160;9600                 /* Debug console baud rate.           */</td></tr>
+<tr class="separator:a37fa0e609ebaa8565ad388e41cc92a43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b196c652283b89130c86ca7bd1559bc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d3a/pal__rtos__test__main___free_r_t_o_s_8c.html#a3b196c652283b89130c86ca7bd1559bc">APP_DEBUG_UART_CLKSRC_NAME</a>&#160;&#160;&#160;kCLOCK_CoreSysClk /* System clock.       */</td></tr>
+<tr class="separator:a3b196c652283b89130c86ca7bd1559bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a58ec279183697abbd5d3efea3442d4e5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d3a/pal__rtos__test__main___free_r_t_o_s_8c.html#a58ec279183697abbd5d3efea3442d4e5">UnityMain</a> (int argc, const char *argv[], void(*runAllTests)(void))</td></tr>
+<tr class="separator:a58ec279183697abbd5d3efea3442d4e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e9aa39842df82b3f5086f3215cc74fc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d3a/pal__rtos__test__main___free_r_t_o_s_8c.html#a9e9aa39842df82b3f5086f3215cc74fc">TEST_pal_rtos_GROUP_RUNNER</a> (void)</td></tr>
+<tr class="separator:a9e9aa39842df82b3f5086f3215cc74fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a840291bc02cba5474a4cb46a9b9566fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d3a/pal__rtos__test__main___free_r_t_o_s_8c.html#a840291bc02cba5474a4cb46a9b9566fe">main</a> (void)</td></tr>
+<tr class="memdesc:a840291bc02cba5474a4cb46a9b9566fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Main function.  <a href="#a840291bc02cba5474a4cb46a9b9566fe">More...</a><br /></td></tr>
+<tr class="separator:a840291bc02cba5474a4cb46a9b9566fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad7d1365a74953be39a9a7e65702b69a3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d3a/pal__rtos__test__main___free_r_t_o_s_8c.html#ad7d1365a74953be39a9a7e65702b69a3">unity_output_char</a> (int c)</td></tr>
+<tr class="separator:ad7d1365a74953be39a9a7e65702b69a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a37fa0e609ebaa8565ad388e41cc92a43"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APP_DEBUG_UART_BAUDRATE&#160;&#160;&#160;9600                 /* Debug console baud rate.           */</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3b196c652283b89130c86ca7bd1559bc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APP_DEBUG_UART_CLKSRC_NAME&#160;&#160;&#160;kCLOCK_CoreSysClk /* System clock.       */</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a840291bc02cba5474a4cb46a9b9566fe"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Main function. </p>
+
+</div>
+</div>
+<a class="anchor" id="a9e9aa39842df82b3f5086f3215cc74fc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TEST_pal_rtos_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad7d1365a74953be39a9a7e65702b69a3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void unity_output_char </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>c</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58ec279183697abbd5d3efea3442d4e5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UnityMain </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(void)&#160;</td>
+          <td class="paramname"><em>runAllTests</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d2/d47/pal__plat__update_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,497 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Platform-API/pal_plat_update.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="../../dir_21bbc5adf7d2637a4cb8a3cee979c96f.html">Platform-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_plat_update.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../dd/df9/pal__update_8h_source.html">pal_update.h</a>&quot;</code><br />
+</div>
+<p><a href="../../d2/d47/pal__plat__update_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a3184f4433c02437d70307b21bc755cb8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#a3184f4433c02437d70307b21bc755cb8">pal_plat_imageInitAPI</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a> CBfunction)</td></tr>
+<tr class="separator:a3184f4433c02437d70307b21bc755cb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9974172099eb04fa008b12c6432e832a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#a9974172099eb04fa008b12c6432e832a">pal_plat_imageDeInit</a> (void)</td></tr>
+<tr class="separator:a9974172099eb04fa008b12c6432e832a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a459d4051428d92cf6e0d960b198c87d3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#a459d4051428d92cf6e0d960b198c87d3">pal_plat_imageGetMaxNumberOfImages</a> (uint8_t *imageNumber)</td></tr>
+<tr class="separator:a459d4051428d92cf6e0d960b198c87d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5a811ed8f4fff3a8f5317de00198ca4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#ab5a811ed8f4fff3a8f5317de00198ca4">pal_plat_imageReserveSpace</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, size_t imageSize)</td></tr>
+<tr class="separator:ab5a811ed8f4fff3a8f5317de00198ca4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5086927381d43a2ec2818209b20c2261"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#a5086927381d43a2ec2818209b20c2261">pal_plat_imageSetHeader</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, <a class="el" href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a> *details)</td></tr>
+<tr class="separator:a5086927381d43a2ec2818209b20c2261"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6c3c91cf0da39abb1a4a50ff089936f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#ad6c3c91cf0da39abb1a4a50ff089936f">pal_plat_imageWrite</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, size_t offset, <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *chunk)</td></tr>
+<tr class="separator:ad6c3c91cf0da39abb1a4a50ff089936f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a90614195d6390f9cffb77e840c1eca0e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#a90614195d6390f9cffb77e840c1eca0e">pal_plat_imageSetVersion</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *version)</td></tr>
+<tr class="separator:a90614195d6390f9cffb77e840c1eca0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af2c039c8331a9fb3444a209fc1de4cc3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#af2c039c8331a9fb3444a209fc1de4cc3">pal_plat_imageFlush</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId)</td></tr>
+<tr class="separator:af2c039c8331a9fb3444a209fc1de4cc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a04bdb18ea6bbad040310007e1c7dad52"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#a04bdb18ea6bbad040310007e1c7dad52">pal_plat_imageGetDirectMemAccess</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, void **imagePtr, size_t *imageSizeInBytes)</td></tr>
+<tr class="separator:a04bdb18ea6bbad040310007e1c7dad52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ea8421acb807fa8f769be11d3d24e7c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#a1ea8421acb807fa8f769be11d3d24e7c">pal_plat_imageReadToBuffer</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, size_t offset, <a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *chunk)</td></tr>
+<tr class="separator:a1ea8421acb807fa8f769be11d3d24e7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0975a4b263074cd29ad2c048bd65fc57"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#a0975a4b263074cd29ad2c048bd65fc57">pal_plat_imageActivate</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId)</td></tr>
+<tr class="separator:a0975a4b263074cd29ad2c048bd65fc57"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13dee681c787b26269df36464a114bf9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#a13dee681c787b26269df36464a114bf9">pal_plat_imageGetActiveHash</a> (<a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *hash)</td></tr>
+<tr class="separator:a13dee681c787b26269df36464a114bf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aac3002ca0559fa4a266f8ff7f10a653e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#aac3002ca0559fa4a266f8ff7f10a653e">pal_plat_imageGetActiveVersion</a> (<a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *version)</td></tr>
+<tr class="separator:aac3002ca0559fa4a266f8ff7f10a653e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66c15f74e8d3e11e449531e41d39e20a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d47/pal__plat__update_8h.html#a66c15f74e8d3e11e449531e41d39e20a">pal_plat_imageWriteHashToMemory</a> (const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *const hashValue)</td></tr>
+<tr class="separator:a66c15f74e8d3e11e449531e41d39e20a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0975a4b263074cd29ad2c048bd65fc57"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageActivate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the imageId to be the active image (after device reset). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a9974172099eb04fa008b12c6432e832a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageDeInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Clear all the resources used by the pal_update APIs. </p><dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="af2c039c8331a9fb3444a209fc1de4cc3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageFlush </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Flush the entire image data after writing ends for imageId. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a13dee681c787b26269df36464a114bf9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageGetActiveHash </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>hash</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Retrieve the hash value of the active image to hash buffer with max size hash maxBufferLength, and set the hash bufferLength to the hash size. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">hash</td><td>The hash and actual size of hash read. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aac3002ca0559fa4a266f8ff7f10a653e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageGetActiveVersion </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>version</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Retrieve the version of the active image to version buffer with the size set to version bufferLength. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">version</td><td>The version and actual size of version read. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a04bdb18ea6bbad040310007e1c7dad52"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageGetDirectMemAccess </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void **&#160;</td>
+          <td class="paramname"><em>imagePtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>imageSizeInBytes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Verify whether the imageId is readable and set imagePtr to point to the beginning of the image in the memory and imageSizeInBytes to the image size. In case of failure sets imagePtr to NULL and returns the relevant palStatus_t error. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">imagePtr</td><td>A pointer to the start of the image. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">imageSizeInBytes</td><td>The size of the image. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a459d4051428d92cf6e0d960b198c87d3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageGetMaxNumberOfImages </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>imageNumber</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the imageNumber to the number of available images. You can do this through hard coded define inside the linker script. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">imageNumber</td><td>The total number of images the system supports. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a3184f4433c02437d70307b21bc755cb8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageInitAPI </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a>&#160;</td>
+          <td class="paramname"><em>CBfunction</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the callback function that is called before the end of each API (except imageGetDirectMemAccess). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">CBfunction</td><td>A pointer to the callback function. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1ea8421acb807fa8f769be11d3d24e7c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageReadToBuffer </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>chunk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Read the max of chunk maxBufferLength bytes from the imageId with relative offset and store it in chunk buffer. Set the chunk bufferLength value to the actual number of bytes read. Note: Please use this API in case the image is not directly accessible via the imageGetDirectMemAccess function. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">offset</td><td>The offset to start reading from. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">chunk</td><td>The data and actual bytes read. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab5a811ed8f4fff3a8f5317de00198ca4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageReserveSpace </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>imageSize</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Claim space in the relevant storage region for imageId with the size of the image. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageSize</td><td>The size of the images. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5086927381d43a2ec2818209b20c2261"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageSetHeader </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a> *&#160;</td>
+          <td class="paramname"><em>details</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set up the details for the image header. The data is written when the image write is called for the first time. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">details</td><td>The data needed to build the image header. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a90614195d6390f9cffb77e840c1eca0e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageSetVersion </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>version</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Update the image version of imageId to version written in version buffer with version bufferLength. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">version</td><td>The image version and its length. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ad6c3c91cf0da39abb1a4a50ff089936f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageWrite </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>chunk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Write the data in the chunk buffer with the size written in chunk bufferLength in the location of imageId adding the relative offset. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">offset</td><td>the relative offset to write the data into </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">chunk</td><td>A pointer to struct containing the data and the data length to write. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a66c15f74e8d3e11e449531e41d39e20a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageWriteHashToMemory </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *const&#160;</td>
+          <td class="paramname"><em>hashValue</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Write the dataId stored in dataBuffer to memory accessible to the bootloader. Currently, only HASH is available. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">hashValue</td><td>The data and size of the HASH. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d2/d47/pal__plat__update_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Platform-API/pal_plat_update.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="../../dir_21bbc5adf7d2637a4cb8a3cee979c96f.html">Platform-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_plat_update.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../d2/d47/pal__plat__update_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef PAL_PLAT_UPDATE_HEADER</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define PAL_PLAT_UPDATE_HEADER</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../dd/df9/pal__update_8h.html">pal_update.h</a>&quot;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#a3184f4433c02437d70307b21bc755cb8">pal_plat_imageInitAPI</a>(<a class="code" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a> CBfunction);</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#a9974172099eb04fa008b12c6432e832a">pal_plat_imageDeInit</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#a459d4051428d92cf6e0d960b198c87d3">pal_plat_imageGetMaxNumberOfImages</a>(uint8_t* imageNumber);</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#ab5a811ed8f4fff3a8f5317de00198ca4">pal_plat_imageReserveSpace</a>(<a class="code" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, <span class="keywordtype">size_t</span> imageSize);</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#a5086927381d43a2ec2818209b20c2261">pal_plat_imageSetHeader</a>(<a class="code" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId,<a class="code" href="../../df/d0d/struct__pal_image_header_deails__t.html">palImageHeaderDeails_t</a>* details);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#ad6c3c91cf0da39abb1a4a50ff089936f">pal_plat_imageWrite</a>(<a class="code" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, <span class="keywordtype">size_t</span> offset, <a class="code" href="../../d2/dab/struct__pal_const_buffer__t.html">palConstBuffer_t</a>*  chunk);</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#a90614195d6390f9cffb77e840c1eca0e">pal_plat_imageSetVersion</a>(<a class="code" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, <span class="keyword">const</span> <a class="code" href="../../d2/dab/struct__pal_const_buffer__t.html">palConstBuffer_t</a>* version);</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#af2c039c8331a9fb3444a209fc1de4cc3">pal_plat_imageFlush</a>(<a class="code" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#a04bdb18ea6bbad040310007e1c7dad52">pal_plat_imageGetDirectMemAccess</a>(<a class="code" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, <span class="keywordtype">void</span>** imagePtr, <span class="keywordtype">size_t</span>* imageSizeInBytes);</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#a1ea8421acb807fa8f769be11d3d24e7c">pal_plat_imageReadToBuffer</a>(<a class="code" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, <span class="keywordtype">size_t</span> offset, <a class="code" href="../../d8/d19/struct__pal_buffer__t.html">palBuffer_t</a>* chunk);</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#a0975a4b263074cd29ad2c048bd65fc57">pal_plat_imageActivate</a>(<a class="code" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId);</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#a13dee681c787b26269df36464a114bf9">pal_plat_imageGetActiveHash</a>(<a class="code" href="../../d8/d19/struct__pal_buffer__t.html">palBuffer_t</a>* hash);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#aac3002ca0559fa4a266f8ff7f10a653e">pal_plat_imageGetActiveVersion</a> (<a class="code" href="../../d8/d19/struct__pal_buffer__t.html">palBuffer_t</a>* version);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d2/d47/pal__plat__update_8h.html#a66c15f74e8d3e11e449531e41d39e20a">pal_plat_imageWriteHashToMemory</a>(<span class="keyword">const</span> <a class="code" href="../../d2/dab/struct__pal_const_buffer__t.html">palConstBuffer_t</a>* <span class="keyword">const</span> hashValue);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* SOURCE_PAL_IMPL_MODULES_UPDATE_PAL_PALT_UPDATE_H_ */</span><span class="preprocessor"></span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;}</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="struct__pal_buffer__t_html"><div class="ttname"><a href="../../d8/d19/struct__pal_buffer__t.html">_palBuffer_t</a></div><div class="ttdef"><b>Definition:</b> pal_types.h:34</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_a90614195d6390f9cffb77e840c1eca0e"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#a90614195d6390f9cffb77e840c1eca0e">pal_plat_imageSetVersion</a></div><div class="ttdeci">palStatus_t pal_plat_imageSetVersion(palImageId_t imageId, const palConstBuffer_t *version)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:420</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_a3184f4433c02437d70307b21bc755cb8"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#a3184f4433c02437d70307b21bc755cb8">pal_plat_imageInitAPI</a></div><div class="ttdeci">palStatus_t pal_plat_imageInitAPI(palImageSignalEvent_t CBfunction)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:244</div></div>
+<div class="ttc" id="struct__pal_image_header_deails__t_html"><div class="ttname"><a href="../../df/d0d/struct__pal_image_header_deails__t.html">_palImageHeaderDeails_t</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:33</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_a66c15f74e8d3e11e449531e41d39e20a"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#a66c15f74e8d3e11e449531e41d39e20a">pal_plat_imageWriteHashToMemory</a></div><div class="ttdeci">palStatus_t pal_plat_imageWriteHashToMemory(const palConstBuffer_t *const hashValue)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:551</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_aac3002ca0559fa4a266f8ff7f10a653e"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#aac3002ca0559fa4a266f8ff7f10a653e">pal_plat_imageGetActiveVersion</a></div><div class="ttdeci">palStatus_t pal_plat_imageGetActiveVersion(palBuffer_t *version)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:545</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_ad6c3c91cf0da39abb1a4a50ff089936f"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#ad6c3c91cf0da39abb1a4a50ff089936f">pal_plat_imageWrite</a></div><div class="ttdeci">palStatus_t pal_plat_imageWrite(palImageId_t imageId, size_t offset, palConstBuffer_t *chunk)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:926</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_af2c039c8331a9fb3444a209fc1de4cc3"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#af2c039c8331a9fb3444a209fc1de4cc3">pal_plat_imageFlush</a></div><div class="ttdeci">palStatus_t pal_plat_imageFlush(palImageId_t imageId)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:1175</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_a459d4051428d92cf6e0d960b198c87d3"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#a459d4051428d92cf6e0d960b198c87d3">pal_plat_imageGetMaxNumberOfImages</a></div><div class="ttdeci">palStatus_t pal_plat_imageGetMaxNumberOfImages(uint8_t *imageNumber)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:415</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_a13dee681c787b26269df36464a114bf9"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#a13dee681c787b26269df36464a114bf9">pal_plat_imageGetActiveHash</a></div><div class="ttdeci">palStatus_t pal_plat_imageGetActiveHash(palBuffer_t *hash)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:534</div></div>
+<div class="ttc" id="struct__pal_const_buffer__t_html"><div class="ttname"><a href="../../d2/dab/struct__pal_const_buffer__t.html">_palConstBuffer_t</a></div><div class="ttdef"><b>Definition:</b> pal_types.h:41</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_a9974172099eb04fa008b12c6432e832a"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#a9974172099eb04fa008b12c6432e832a">pal_plat_imageDeInit</a></div><div class="ttdeci">palStatus_t pal_plat_imageDeInit(void)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:251</div></div>
+<div class="ttc" id="pal__update_8h_html_a9ac73ac0e2421507424182ebaffc8b21"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a></div><div class="ttdeci">void(* palImageSignalEvent_t)(palImageEvents_t event)</div><div class="ttdef"><b>Definition:</b> pal_update.h:64</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_a5086927381d43a2ec2818209b20c2261"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#a5086927381d43a2ec2818209b20c2261">pal_plat_imageSetHeader</a></div><div class="ttdeci">palStatus_t pal_plat_imageSetHeader(palImageId_t imageId, palImageHeaderDeails_t *details)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:697</div></div>
+<div class="ttc" id="pal__update_8h_html"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html">pal_update.h</a></div></div>
+<div class="ttc" id="pal__plat__update_8h_html_a1ea8421acb807fa8f769be11d3d24e7c"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#a1ea8421acb807fa8f769be11d3d24e7c">pal_plat_imageReadToBuffer</a></div><div class="ttdeci">palStatus_t pal_plat_imageReadToBuffer(palImageId_t imageId, size_t offset, palBuffer_t *chunk)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:1055</div></div>
+<div class="ttc" id="pal__update_8h_html_a4a9214b57530228af5cfba5ec05b406b"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a></div><div class="ttdeci">uint32_t palImageId_t</div><div class="ttdef"><b>Definition:</b> pal_update.h:31</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_ab5a811ed8f4fff3a8f5317de00198ca4"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#ab5a811ed8f4fff3a8f5317de00198ca4">pal_plat_imageReserveSpace</a></div><div class="ttdeci">palStatus_t pal_plat_imageReserveSpace(palImageId_t imageId, size_t imageSize)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:718</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_a04bdb18ea6bbad040310007e1c7dad52"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#a04bdb18ea6bbad040310007e1c7dad52">pal_plat_imageGetDirectMemAccess</a></div><div class="ttdeci">palStatus_t pal_plat_imageGetDirectMemAccess(palImageId_t imageId, void **imagePtr, size_t *imageSizeInBytes)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:425</div></div>
+<div class="ttc" id="pal__plat__update_8h_html_a0975a4b263074cd29ad2c048bd65fc57"><div class="ttname"><a href="../../d2/d47/pal__plat__update_8h.html#a0975a4b263074cd29ad2c048bd65fc57">pal_plat_imageActivate</a></div><div class="ttdeci">palStatus_t pal_plat_imageActivate(palImageId_t imageId)</div><div class="ttdef"><b>Definition:</b> pal_plat_update.cpp:430</div></div>
+<div class="ttc" id="pal__types_8h_html_a160277354e86b9aea01d7689ec26d88d"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a></div><div class="ttdeci">int32_t palStatus_t</div><div class="ttdef"><b>Definition:</b> pal_types.h:31</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d2/d87/pal__configuration_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,177 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_configuration.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_configuration.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="../../d2/d87/pal__configuration_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a4662be64705952cfa0925001c9d917c3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d87/pal__configuration_8h.html#a4662be64705952cfa0925001c9d917c3">PAL_NET_TCP_AND_TLS_SUPPORT</a>&#160;&#160;&#160;true/* add pal support for TCP */</td></tr>
+<tr class="memdesc:a4662be64705952cfa0925001c9d917c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">pal configuration options  <a href="#a4662be64705952cfa0925001c9d917c3">More...</a><br /></td></tr>
+<tr class="separator:a4662be64705952cfa0925001c9d917c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a337c171a4cf5d7f04894051002d81eba"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d87/pal__configuration_8h.html#a337c171a4cf5d7f04894051002d81eba">PAL_NET_ASYNCHRONOUS_SOCKET_API</a>&#160;&#160;&#160;true/* add pal support for asynchronous sockets */</td></tr>
+<tr class="separator:a337c171a4cf5d7f04894051002d81eba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad7e2f6ebd028faacc239229cce972fa7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d87/pal__configuration_8h.html#ad7e2f6ebd028faacc239229cce972fa7">PAL_NET_DNS_SUPPORT</a>&#160;&#160;&#160;true/* add pal support for DNS lookup */</td></tr>
+<tr class="separator:ad7e2f6ebd028faacc239229cce972fa7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c7f7687d719d388a67c1f18f200962d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d87/pal__configuration_8h.html#a2c7f7687d719d388a67c1f18f200962d">PAL_RTOS_64BIT_TICK_SUPPORTED</a>&#160;&#160;&#160;false /* add pal support for asynchronous sockets */</td></tr>
+<tr class="separator:a2c7f7687d719d388a67c1f18f200962d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4d2f5187ecd7e90c094e2f103e5b6839"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d87/pal__configuration_8h.html#a4d2f5187ecd7e90c094e2f103e5b6839">PAL_UNIQUE_THREAD_PRIORITY</a>&#160;&#160;&#160;(!defined(PAL_IGNORE_UNIQUE_THREAD_PRIORITY))/* if defined code skips the uniqueness priority check */</td></tr>
+<tr class="separator:a4d2f5187ecd7e90c094e2f103e5b6839"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb1ceb83ff6a709614d1394e7e39391d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d87/pal__configuration_8h.html#abb1ceb83ff6a709614d1394e7e39391d">PAL_MAX_NUMBER_OF_THREADS</a>&#160;&#160;&#160;7</td></tr>
+<tr class="memdesc:abb1ceb83ff6a709614d1394e7e39391d"><td class="mdescLeft">&#160;</td><td class="mdescRight">number of valid priorities limits the number of threads- if priorities are added this value should be increased  <a href="#abb1ceb83ff6a709614d1394e7e39391d">More...</a><br /></td></tr>
+<tr class="separator:abb1ceb83ff6a709614d1394e7e39391d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79ed46284848e83d0dba68933c40f82a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/d87/pal__configuration_8h.html#a79ed46284848e83d0dba68933c40f82a">PAL_MAX_SUPORTED_NET_INTEFACES</a>&#160;&#160;&#160;5</td></tr>
+<tr class="memdesc:a79ed46284848e83d0dba68933c40f82a"><td class="mdescLeft">&#160;</td><td class="mdescRight">the maximal number of interfaces that can be supported at once.  <a href="#a79ed46284848e83d0dba68933c40f82a">More...</a><br /></td></tr>
+<tr class="separator:a79ed46284848e83d0dba68933c40f82a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="abb1ceb83ff6a709614d1394e7e39391d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MAX_NUMBER_OF_THREADS&#160;&#160;&#160;7</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>number of valid priorities limits the number of threads- if priorities are added this value should be increased </p>
+
+</div>
+</div>
+<a class="anchor" id="a79ed46284848e83d0dba68933c40f82a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MAX_SUPORTED_NET_INTEFACES&#160;&#160;&#160;5</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>the maximal number of interfaces that can be supported at once. </p>
+
+</div>
+</div>
+<a class="anchor" id="a337c171a4cf5d7f04894051002d81eba"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_ASYNCHRONOUS_SOCKET_API&#160;&#160;&#160;true/* add pal support for asynchronous sockets */</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad7e2f6ebd028faacc239229cce972fa7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_DNS_SUPPORT&#160;&#160;&#160;true/* add pal support for DNS lookup */</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4662be64705952cfa0925001c9d917c3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_TCP_AND_TLS_SUPPORT&#160;&#160;&#160;true/* add pal support for TCP */</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>pal configuration options </p>
+
+</div>
+</div>
+<a class="anchor" id="a2c7f7687d719d388a67c1f18f200962d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_RTOS_64BIT_TICK_SUPPORTED&#160;&#160;&#160;false /* add pal support for asynchronous sockets */</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4d2f5187ecd7e90c094e2f103e5b6839"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_UNIQUE_THREAD_PRIORITY&#160;&#160;&#160;(!defined(PAL_IGNORE_UNIQUE_THREAD_PRIORITY))/* if defined code skips the uniqueness priority check */</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d2/d87/pal__configuration_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_configuration.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_configuration.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../d2/d87/pal__configuration_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef _PAL_COFIGURATION_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define _PAL_COFIGURATION_H</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="../../d2/d87/pal__configuration_8h.html#a4662be64705952cfa0925001c9d917c3">   26</a></span>&#160;<span class="preprocessor">#define PAL_NET_TCP_AND_TLS_SUPPORT         true</span><span class="comment">/* add pal support for TCP */</span><span class="preprocessor"></span></div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="../../d2/d87/pal__configuration_8h.html#a337c171a4cf5d7f04894051002d81eba">   27</a></span>&#160;<span class="preprocessor">#define PAL_NET_ASYNCHRONOUS_SOCKET_API     true</span><span class="comment">/* add pal support for asynchronous sockets */</span><span class="preprocessor"></span></div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="../../d2/d87/pal__configuration_8h.html#ad7e2f6ebd028faacc239229cce972fa7">   28</a></span>&#160;<span class="preprocessor">#define PAL_NET_DNS_SUPPORT                 true</span><span class="comment">/* add pal support for DNS lookup */</span><span class="preprocessor"></span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="../../d2/d87/pal__configuration_8h.html#a2c7f7687d719d388a67c1f18f200962d">   30</a></span>&#160;<span class="preprocessor">#define PAL_RTOS_64BIT_TICK_SUPPORTED       false </span><span class="comment">/* add pal support for asynchronous sockets */</span><span class="preprocessor"></span></div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="../../d2/d87/pal__configuration_8h.html#a4d2f5187ecd7e90c094e2f103e5b6839">   31</a></span>&#160;<span class="preprocessor">#define PAL_UNIQUE_THREAD_PRIORITY          (!defined(PAL_IGNORE_UNIQUE_THREAD_PRIORITY))</span><span class="comment">/* if defined code skips the uniqueness priority check */</span><span class="preprocessor"></span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="../../d2/d87/pal__configuration_8h.html#abb1ceb83ff6a709614d1394e7e39391d">   34</a></span>&#160;<span class="preprocessor">#define PAL_MAX_NUMBER_OF_THREADS 7 </span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="../../d2/d87/pal__configuration_8h.html#a79ed46284848e83d0dba68933c40f82a">   37</a></span>&#160;<span class="preprocessor">#define PAL_MAX_SUPORTED_NET_INTEFACES 5</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#ifdef __GNUC__ // we are compiling using GCC/G++</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">    #define PAL_TARGET_POINTER_SIZE __SIZEOF_POINTER__</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">    #ifdef __BYTE_ORDER</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">        #if __BYTE_ORDER == __BIG_ENDIAN //if both are not defined it is TRUE!</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">            #define PAL_COMPILATION_ENDIANITY 1 //define pal compilation endianity (0 is little endian, 1 is big endian)</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">        #elif __BYTE_ORDER == __LITTLE_ENDIAN</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">            #define PAL_COMPILATION_ENDIANITY 0//define pal compilation endianity (0 is little endian, 1 is big endian)</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">        #else</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">            #error missing endiantiy defintion for GCC</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">        #endif</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">    #endif</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">    #ifdef __arm__ // we are compiling using the ARM compiler</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">        #define PAL_TARGET_POINTER_SIZE __sizeof_ptr</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">        #ifdef __BIG_ENDIAN</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">            #define PAL_COMPILATION_ENDIANITY 1 //define pal compilation endianity (0 is little endian, 1 is big endian)</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="preprocessor">        #else </span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">            #define PAL_COMPILATION_ENDIANITY 0 //define pal compilation endianity (0 is little endian, 1 is big endian)</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">        #endif</span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">    #else</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;        <span class="comment">//#error neither ARMCC nor GCC used for compilation - not supported</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="preprocessor">    #endif</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;}</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="preprocessor">#endif //_PAL_COFIGURATION_H</span></div></div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d2/dab/struct__pal_const_buffer__t.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: _palConstBuffer_t Struct Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="../../functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">_palConstBuffer_t Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="../../d6/dc2/pal__types_8h_source.html">pal_types.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ad411a35599e0f8500f29e5bd2cb66cc7"><td class="memItemLeft" align="right" valign="top">const uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/dab/struct__pal_const_buffer__t.html#ad411a35599e0f8500f29e5bd2cb66cc7">maxBufferLength</a></td></tr>
+<tr class="separator:ad411a35599e0f8500f29e5bd2cb66cc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d4966dc771ad87628b4bd01ae4ea801"><td class="memItemLeft" align="right" valign="top">const uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/dab/struct__pal_const_buffer__t.html#a8d4966dc771ad87628b4bd01ae4ea801">bufferLength</a></td></tr>
+<tr class="separator:a8d4966dc771ad87628b4bd01ae4ea801"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3660dfb9336b8d57a3c2223de14646d3"><td class="memItemLeft" align="right" valign="top">const uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/dab/struct__pal_const_buffer__t.html#a3660dfb9336b8d57a3c2223de14646d3">buffer</a></td></tr>
+<tr class="separator:a3660dfb9336b8d57a3c2223de14646d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a3660dfb9336b8d57a3c2223de14646d3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint8_t* _palConstBuffer_t::buffer</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8d4966dc771ad87628b4bd01ae4ea801"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint32_t _palConstBuffer_t::bufferLength</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad411a35599e0f8500f29e5bd2cb66cc7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint32_t _palConstBuffer_t::maxBufferLength</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/<a class="el" href="../../d6/dc2/pal__types_8h_source.html">pal_types.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d3/d30/structthreads_argument.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,168 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: threadsArgument Struct Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="../../functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">threadsArgument Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="../../d9/d28/pal__rtos__test__utils_8h_source.html">pal_rtos_test_utils.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a9532cb931dee4c326444e7c366019639"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d30/structthreads_argument.html#a9532cb931dee4c326444e7c366019639">arg1</a></td></tr>
+<tr class="separator:a9532cb931dee4c326444e7c366019639"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acecc240150225e2786524a2e4b3adf78"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d30/structthreads_argument.html#acecc240150225e2786524a2e4b3adf78">arg2</a></td></tr>
+<tr class="separator:acecc240150225e2786524a2e4b3adf78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abcba9882b15e3845a7794220a5c9e4f4"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d30/structthreads_argument.html#abcba9882b15e3845a7794220a5c9e4f4">arg3</a></td></tr>
+<tr class="separator:abcba9882b15e3845a7794220a5c9e4f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fad7cea38d81eb88f9ff01d4baec32a"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d30/structthreads_argument.html#a6fad7cea38d81eb88f9ff01d4baec32a">arg4</a></td></tr>
+<tr class="separator:a6fad7cea38d81eb88f9ff01d4baec32a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2720a7d49d96277778f83a2488859fe9"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d30/structthreads_argument.html#a2720a7d49d96277778f83a2488859fe9">arg5</a></td></tr>
+<tr class="separator:a2720a7d49d96277778f83a2488859fe9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a460c4a55dba6130f386f648138184074"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d30/structthreads_argument.html#a460c4a55dba6130f386f648138184074">arg6</a></td></tr>
+<tr class="separator:a460c4a55dba6130f386f648138184074"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a200c590896768ffb09f8d90c774f6b74"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d30/structthreads_argument.html#a200c590896768ffb09f8d90c774f6b74">arg7</a></td></tr>
+<tr class="separator:a200c590896768ffb09f8d90c774f6b74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a9532cb931dee4c326444e7c366019639"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t threadsArgument::arg1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acecc240150225e2786524a2e4b3adf78"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t threadsArgument::arg2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abcba9882b15e3845a7794220a5c9e4f4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t threadsArgument::arg3</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6fad7cea38d81eb88f9ff01d4baec32a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t threadsArgument::arg4</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2720a7d49d96277778f83a2488859fe9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t threadsArgument::arg5</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a460c4a55dba6130f386f648138184074"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t threadsArgument::arg6</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a200c590896768ffb09f8d90c774f6b74"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t threadsArgument::arg7</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>C:/work/PAL/zolFull/mbed-client-pal/Test/Common/<a class="el" href="../../d9/d28/pal__rtos__test__utils_8h_source.html">pal_rtos_test_utils.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d3/d44/pal__plat__update_8cpp.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl/mbedOS/Update/pal_plat_update.cpp File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="../../dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li><li class="navelem"><a class="el" href="../../dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html">mbedOS</a></li><li class="navelem"><a class="el" href="../../dir_e0c4a7f8a7dec467104a1fe0064ec60f.html">Update</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_plat_update.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d2/d47/pal__plat__update_8h_source.html">pal_plat_update.h</a>&quot;</code><br />
+<code>#include &quot;crc.h&quot;</code><br />
+<code>#include &lt;mbed.h&gt;</code><br />
+<code>#include &lt;flash-journal-strategy-sequential/flash_journal_strategy_sequential.h&gt;</code><br />
+<code>#include &lt;storage-volume-manager/storage_volume_manager.h&gt;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:aa4e05c8dbea6df808259b1adeff368df"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aa4e05c8dbea6df808259b1adeff368df">PAL_UPDATE_JOURNAL_SIZE</a>&#160;&#160;&#160;0x80000UL</td></tr>
+<tr class="separator:aa4e05c8dbea6df808259b1adeff368df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44ea4a279fb4c7322e7eedde623a868e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a44ea4a279fb4c7322e7eedde623a868e">PAL_UPDATE_JOURNAL_START_OFFSET</a>&#160;&#160;&#160;0x80000UL</td></tr>
+<tr class="separator:a44ea4a279fb4c7322e7eedde623a868e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a38372cedac04192680fb4b532e1dcaed"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a38372cedac04192680fb4b532e1dcaed">PAL_UPDATE_ACTIVE_METADATA_HEADER_OFFSET</a>&#160;&#160;&#160;0x80000UL</td></tr>
+<tr class="separator:a38372cedac04192680fb4b532e1dcaed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a30455a95b24a21e7ef22e021d7b530bf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a30455a95b24a21e7ef22e021d7b530bf">SIZEOF_SHA256</a>&#160;&#160;&#160;256/8</td></tr>
+<tr class="separator:a30455a95b24a21e7ef22e021d7b530bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9762be6170804525a2b45df94fd9293c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a9762be6170804525a2b45df94fd9293c">FIRMWARE_HEADER_MAGIC</a>&#160;&#160;&#160;0x5a51b3d4UL</td></tr>
+<tr class="separator:a9762be6170804525a2b45df94fd9293c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af3abc5e3f32ad8114e385a7b137a602d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#af3abc5e3f32ad8114e385a7b137a602d">FIRMWARE_HEADER_VERSION</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:af3abc5e3f32ad8114e385a7b137a602d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ad53f6cbdcb10beae7d1bdf6a79d2a48f"><td class="memItemLeft" align="right" valign="top">typedef struct FirmwareHeader&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#ad53f6cbdcb10beae7d1bdf6a79d2a48f">FirmwareHeader_t</a></td></tr>
+<tr class="separator:ad53f6cbdcb10beae7d1bdf6a79d2a48f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:af6eff2fe90d3ca8092902993dd53a3b0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#af6eff2fe90d3ca8092902993dd53a3b0">pal_pi_mbed_fsm_t</a> { <br />
+&#160;&#160;<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#af6eff2fe90d3ca8092902993dd53a3b0a5cf2a95bc6f4d8a51a6cf0aea1d58033">PAL_PI_MBED_FSM_NONE</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#af6eff2fe90d3ca8092902993dd53a3b0a772f4a05fd47853ef0790561efde3a13">PAL_PI_MBED_FSM_SETUP</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#af6eff2fe90d3ca8092902993dd53a3b0a8fc3ba51ba4cd0da9e48180e03aaa8dd">PAL_PI_MBED_FSM_WRITE</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#af6eff2fe90d3ca8092902993dd53a3b0a07be41f5418b0058409c8bde84807ca9">PAL_PI_MBED_FSM_READ</a>, 
+<br />
+&#160;&#160;<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#af6eff2fe90d3ca8092902993dd53a3b0aaa504471738039669d93625c9406d05f">PAL_PI_MBED_FSM_COMMIT</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#af6eff2fe90d3ca8092902993dd53a3b0a7bec3fd0760122a3079c0a792cde5362">PAL_PI_MBED_FSM_GETACTIVEHASH</a>
+<br />
+ }</td></tr>
+<tr class="separator:af6eff2fe90d3ca8092902993dd53a3b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a176daf5f8b17cca4c81a449fdf7929e4"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a176daf5f8b17cca4c81a449fdf7929e4">pal_pi_mbed_getativehash_state_t</a> { <br />
+&#160;&#160;<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a176daf5f8b17cca4c81a449fdf7929e4a49c1eaa2e62d6a0a52e6757b9a84c6de">PAL_PI_GETATIVEHASH_UNINITIALIZED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a176daf5f8b17cca4c81a449fdf7929e4a8a7e22eb2ed8c53a075b03f5105127d1">PAL_PI_GETATIVEHASH_VOLUME_MANAGER_INITIALIZED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a176daf5f8b17cca4c81a449fdf7929e4a2b2b81919197445bf8f8124c16e6fefb">PAL_PI_GETATIVEHASH_STORAGE_DRIVER_INITIALIZED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a176daf5f8b17cca4c81a449fdf7929e4a9b3aeae8375b10e62d6ed9eec032e1b6">PAL_PI_GETATIVEHASH_DONE</a>, 
+<br />
+&#160;&#160;<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a176daf5f8b17cca4c81a449fdf7929e4aa1ce360c32e0ce97d762ebc09f00ffc2">PAL_PI_GETATIVEHASH_ERROR</a>
+<br />
+ }</td></tr>
+<tr class="separator:a176daf5f8b17cca4c81a449fdf7929e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c6cd7eb99781c3e521d223f31eb85d4"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a4c6cd7eb99781c3e521d223f31eb85d4">pal_pi_mbed_setup_state_t</a> { <br />
+&#160;&#160;<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a4c6cd7eb99781c3e521d223f31eb85d4a4f3b72371167ccaa8ce733cb24ca6c1d">PAL_PI_SETUP_UNINITIALIZED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a4c6cd7eb99781c3e521d223f31eb85d4ae464fa95827d6a705b47c3d078448c86">PAL_PI_SETUP_VOLUME_MANAGER_INITIALIZED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a4c6cd7eb99781c3e521d223f31eb85d4a1e88752d489258b3ed3e8fd74a906b8c">PAL_PI_SETUP_STORAGE_DRIVER_INITIALIZED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a4c6cd7eb99781c3e521d223f31eb85d4a5fcdac218b94e7828e37cea02b287e8f">PAL_PI_SETUP_DONE</a>, 
+<br />
+&#160;&#160;<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a4c6cd7eb99781c3e521d223f31eb85d4a8aa67fddbf4a8a17f86d450d94dd1657">PAL_PI_SETUP_ERROR</a> = -1
+<br />
+ }</td></tr>
+<tr class="separator:a4c6cd7eb99781c3e521d223f31eb85d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aea34e881864ec5991b8f41d4db2f20d6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aea34e881864ec5991b8f41d4db2f20d6">pal_pi_mbed_read_state_t</a> { <a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aea34e881864ec5991b8f41d4db2f20d6a5051dc71cfb98868baf2019cad9145c9">PAL_PI_READ_SKIP_METADATA</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aea34e881864ec5991b8f41d4db2f20d6affb00f509bebfc9107a3704e8153fe8a">PAL_PI_READ_UNINITIALIZED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aea34e881864ec5991b8f41d4db2f20d6a83af438c78b1a2f3296100142477bb57">PAL_PI_READ_DONE</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aea34e881864ec5991b8f41d4db2f20d6a70b722a803e391eadfb77cb1c09f73ac">PAL_PI_READ_ERROR</a>
+ }</td></tr>
+<tr class="separator:aea34e881864ec5991b8f41d4db2f20d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3e95f6ee79a2062ac9b4ab62ac7a6494"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a3e95f6ee79a2062ac9b4ab62ac7a6494">pal_pi_mbed_commit_state_t</a> { <a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a3e95f6ee79a2062ac9b4ab62ac7a6494ac2483588945dc3f18198c750cb264bb7">PAL_PI_COMMIT_UNINITIALIZED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a3e95f6ee79a2062ac9b4ab62ac7a6494a1c3902a003be99166f2fa06f375a58f8">PAL_PI_COMMIT_RESIDUAL_LOGGED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a3e95f6ee79a2062ac9b4ab62ac7a6494a37684be839e05d3fd45c79fc6f280ccb">PAL_PI_COMMIT_DONE</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a3e95f6ee79a2062ac9b4ab62ac7a6494a9732b652f3707bddc2dd9f011f81316e">PAL_PI_COMMIT_ERROR</a>
+ }</td></tr>
+<tr class="separator:a3e95f6ee79a2062ac9b4ab62ac7a6494"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afbf088d926918e852b1eebfaff80e133"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#afbf088d926918e852b1eebfaff80e133">pal_pi_mbed_write_state_t</a> { <br />
+&#160;&#160;<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#afbf088d926918e852b1eebfaff80e133a03d1c45616dab53a1f70519e0e1842a3">PAL_PI_WRITE_UNINITIALIZED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#afbf088d926918e852b1eebfaff80e133af7552fc42b2f4c2e8dab529e705c1aa5">PAL_PI_WRITE_METADATA_LOGGED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#afbf088d926918e852b1eebfaff80e133ad6189a3b8a082992de381bcadb5b632c">PAL_PI_WRITE_RESIDUAL_LOGGED</a>, 
+<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#afbf088d926918e852b1eebfaff80e133ab73cc7d38e31a075d76deb06a633b905">PAL_PI_WRITE_DONE</a>, 
+<br />
+&#160;&#160;<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#afbf088d926918e852b1eebfaff80e133a570a8ce15806e78709bc46db4d8d524b">PAL_PI_WRITE_ERROR</a>
+<br />
+ }</td></tr>
+<tr class="separator:afbf088d926918e852b1eebfaff80e133"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a632d90687b332ec52acf7f2361fd677b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a632d90687b332ec52acf7f2361fd677b">PAL_PI_MBED_journal_callbackHandler</a> (int32_t status, FlashJournal_OpCode_t cmd_code)</td></tr>
+<tr class="separator:a632d90687b332ec52acf7f2361fd677b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:affbf3a34b064837cbffa57ea03608ab1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#affbf3a34b064837cbffa57ea03608ab1">PAL_PI_MBED_journalMTD_callbackHandler</a> (int32_t status, ARM_STORAGE_OPERATION operation)</td></tr>
+<tr class="separator:affbf3a34b064837cbffa57ea03608ab1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1c4ab554059ee9d9a4c09f1e205f18f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#ad1c4ab554059ee9d9a4c09f1e205f18f">PAL_PI_MBED_volumeManager_initializeCallbackHandler</a> (int32_t status)</td></tr>
+<tr class="separator:ad1c4ab554059ee9d9a4c09f1e205f18f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f9492bd4207f64185e224edc41b92a7"><td class="memItemLeft" align="right" valign="top">ARM_DRIVER_STORAGE&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a6f9492bd4207f64185e224edc41b92a7">ARM_Driver_Storage_</a> (0)</td></tr>
+<tr class="separator:a6f9492bd4207f64185e224edc41b92a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae5619ca2f906c0525a5e94abc844fae"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aae5619ca2f906c0525a5e94abc844fae">PAL_PI_MBED_Setup_StateMachine_Enter</a> ()</td></tr>
+<tr class="separator:aae5619ca2f906c0525a5e94abc844fae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a10f6d348c44271256ce351332a1545"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a0a10f6d348c44271256ce351332a1545">PAL_PI_MBED_Setup_StateMachine_Advance</a> (int32_t status)</td></tr>
+<tr class="separator:a0a10f6d348c44271256ce351332a1545"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a39cf7e2ef5b8f65f1044b68527563d0f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a39cf7e2ef5b8f65f1044b68527563d0f">PAL_PI_MBED_Write_StateMachine_Enter</a> (int32_t status)</td></tr>
+<tr class="separator:a39cf7e2ef5b8f65f1044b68527563d0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2294ef45a3a4e30cd1744bb99a717a46"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a2294ef45a3a4e30cd1744bb99a717a46">PAL_PI_MBED_Write_StateMachine_Advance</a> (int32_t status)</td></tr>
+<tr class="separator:a2294ef45a3a4e30cd1744bb99a717a46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aadb42b35dc018f8357ea253b39b51016"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aadb42b35dc018f8357ea253b39b51016">PAL_PI_MBED_Read_StateMachine_Enter</a> ()</td></tr>
+<tr class="separator:aadb42b35dc018f8357ea253b39b51016"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afd4ce1b11218bf2b4bea9d1d26d148eb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#afd4ce1b11218bf2b4bea9d1d26d148eb">PAL_PI_MBED_Read_StateMachine_Advance</a> (int32_t status)</td></tr>
+<tr class="separator:afd4ce1b11218bf2b4bea9d1d26d148eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a47a7120931f8aae54f5cb63431718fa1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a47a7120931f8aae54f5cb63431718fa1">PAL_PI_MBED_Commit_StateMachine_Enter</a> ()</td></tr>
+<tr class="separator:a47a7120931f8aae54f5cb63431718fa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b615289b1b228eb37ed16a7a3d97e3a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a2b615289b1b228eb37ed16a7a3d97e3a">PAL_PI_MBED_Commit_StateMachine_Advance</a> (int32_t status)</td></tr>
+<tr class="separator:a2b615289b1b228eb37ed16a7a3d97e3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3184f4433c02437d70307b21bc755cb8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a3184f4433c02437d70307b21bc755cb8">pal_plat_imageInitAPI</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a> CBfunction)</td></tr>
+<tr class="separator:a3184f4433c02437d70307b21bc755cb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9974172099eb04fa008b12c6432e832a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a9974172099eb04fa008b12c6432e832a">pal_plat_imageDeInit</a> (void)</td></tr>
+<tr class="separator:a9974172099eb04fa008b12c6432e832a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a459d4051428d92cf6e0d960b198c87d3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a459d4051428d92cf6e0d960b198c87d3">pal_plat_imageGetMaxNumberOfImages</a> (uint8_t *imageNumber)</td></tr>
+<tr class="separator:a459d4051428d92cf6e0d960b198c87d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a90614195d6390f9cffb77e840c1eca0e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a90614195d6390f9cffb77e840c1eca0e">pal_plat_imageSetVersion</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *version)</td></tr>
+<tr class="separator:a90614195d6390f9cffb77e840c1eca0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a04bdb18ea6bbad040310007e1c7dad52"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a04bdb18ea6bbad040310007e1c7dad52">pal_plat_imageGetDirectMemAccess</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, void **imagePtr, size_t *imageSizeInBytes)</td></tr>
+<tr class="separator:a04bdb18ea6bbad040310007e1c7dad52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0975a4b263074cd29ad2c048bd65fc57"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a0975a4b263074cd29ad2c048bd65fc57">pal_plat_imageActivate</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId)</td></tr>
+<tr class="separator:a0975a4b263074cd29ad2c048bd65fc57"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af3bb3231669b76fbb25bbd6698a88792"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#af3bb3231669b76fbb25bbd6698a88792">PAL_PI_MBED_GetAtiveHash_StateMachine</a> ()</td></tr>
+<tr class="separator:af3bb3231669b76fbb25bbd6698a88792"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13dee681c787b26269df36464a114bf9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a13dee681c787b26269df36464a114bf9">pal_plat_imageGetActiveHash</a> (<a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *hash)</td></tr>
+<tr class="separator:a13dee681c787b26269df36464a114bf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aac3002ca0559fa4a266f8ff7f10a653e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aac3002ca0559fa4a266f8ff7f10a653e">pal_plat_imageGetActiveVersion</a> (<a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *version)</td></tr>
+<tr class="separator:aac3002ca0559fa4a266f8ff7f10a653e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66c15f74e8d3e11e449531e41d39e20a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a66c15f74e8d3e11e449531e41d39e20a">pal_plat_imageWriteHashToMemory</a> (const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *const hashValue)</td></tr>
+<tr class="separator:a66c15f74e8d3e11e449531e41d39e20a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5086927381d43a2ec2818209b20c2261"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a5086927381d43a2ec2818209b20c2261">pal_plat_imageSetHeader</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, <a class="el" href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a> *details)</td></tr>
+<tr class="separator:a5086927381d43a2ec2818209b20c2261"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5a811ed8f4fff3a8f5317de00198ca4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#ab5a811ed8f4fff3a8f5317de00198ca4">pal_plat_imageReserveSpace</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, size_t imageSize)</td></tr>
+<tr class="separator:ab5a811ed8f4fff3a8f5317de00198ca4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa7cba922f992a315f79a4bb253b26216"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aa7cba922f992a315f79a4bb253b26216">PAL_PI_MBED_Write_LogResidual</a> ()</td></tr>
+<tr class="separator:aa7cba922f992a315f79a4bb253b26216"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6c3c91cf0da39abb1a4a50ff089936f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#ad6c3c91cf0da39abb1a4a50ff089936f">pal_plat_imageWrite</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, size_t offset, <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *chunk)</td></tr>
+<tr class="separator:ad6c3c91cf0da39abb1a4a50ff089936f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ea8421acb807fa8f769be11d3d24e7c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a1ea8421acb807fa8f769be11d3d24e7c">pal_plat_imageReadToBuffer</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, size_t offset, <a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *chunk)</td></tr>
+<tr class="separator:a1ea8421acb807fa8f769be11d3d24e7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ac43c37ca09395eaef46ac9c48747dc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a2ac43c37ca09395eaef46ac9c48747dc">pal_plat_imageFlush</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> package_id)</td></tr>
+<tr class="separator:a2ac43c37ca09395eaef46ac9c48747dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a531aff6f188904a2cfc794770ffad311"><td class="memItemLeft" align="right" valign="top">FlashJournal_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a531aff6f188904a2cfc794770ffad311">pal_pi_mbed_journal</a></td></tr>
+<tr class="separator:a531aff6f188904a2cfc794770ffad311"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a120116f585e123cb4c022cae715a5b8f"><td class="memItemLeft" align="right" valign="top">FlashJournal_Info_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a120116f585e123cb4c022cae715a5b8f">pal_pi_mbed_journal_info</a></td></tr>
+<tr class="separator:a120116f585e123cb4c022cae715a5b8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba5a953cdba2ddaab784ef9696d0de02"><td class="memItemLeft" align="right" valign="top">uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aba5a953cdba2ddaab784ef9696d0de02">pal_pi_mbed_overflow_buffer</a></td></tr>
+<tr class="separator:aba5a953cdba2ddaab784ef9696d0de02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b830d51e5d967bf3b36e6a25fe39ebb"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a3b830d51e5d967bf3b36e6a25fe39ebb">pal_pi_mbed_overflow_buffer_size</a> = 0</td></tr>
+<tr class="separator:a3b830d51e5d967bf3b36e6a25fe39ebb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a735a834fc7071baefe08266ad9029da5"><td class="memItemLeft" align="right" valign="top">ARM_DRIVER_STORAGE *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a735a834fc7071baefe08266ad9029da5">mtd</a> = &amp;<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a6f9492bd4207f64185e224edc41b92a7">ARM_Driver_Storage_</a>(0)</td></tr>
+<tr class="separator:a735a834fc7071baefe08266ad9029da5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a3810ba98c634252b033b78dff47f69"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a0a3810ba98c634252b033b78dff47f69">pal_pi_mbed_metadata_logged</a></td></tr>
+<tr class="separator:a0a3810ba98c634252b033b78dff47f69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a9762be6170804525a2b45df94fd9293c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FIRMWARE_HEADER_MAGIC&#160;&#160;&#160;0x5a51b3d4UL</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af3abc5e3f32ad8114e385a7b137a602d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FIRMWARE_HEADER_VERSION&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a38372cedac04192680fb4b532e1dcaed"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_UPDATE_ACTIVE_METADATA_HEADER_OFFSET&#160;&#160;&#160;0x80000UL</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa4e05c8dbea6df808259b1adeff368df"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_UPDATE_JOURNAL_SIZE&#160;&#160;&#160;0x80000UL</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a44ea4a279fb4c7322e7eedde623a868e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_UPDATE_JOURNAL_START_OFFSET&#160;&#160;&#160;0x80000UL</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a30455a95b24a21e7ef22e021d7b530bf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SIZEOF_SHA256&#160;&#160;&#160;256/8</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ad53f6cbdcb10beae7d1bdf6a79d2a48f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct FirmwareHeader  <a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#ad53f6cbdcb10beae7d1bdf6a79d2a48f">FirmwareHeader_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="a3e95f6ee79a2062ac9b4ab62ac7a6494"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a3e95f6ee79a2062ac9b4ab62ac7a6494">pal_pi_mbed_commit_state_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a3e95f6ee79a2062ac9b4ab62ac7a6494ac2483588945dc3f18198c750cb264bb7"></a>PAL_PI_COMMIT_UNINITIALIZED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a3e95f6ee79a2062ac9b4ab62ac7a6494a1c3902a003be99166f2fa06f375a58f8"></a>PAL_PI_COMMIT_RESIDUAL_LOGGED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a3e95f6ee79a2062ac9b4ab62ac7a6494a37684be839e05d3fd45c79fc6f280ccb"></a>PAL_PI_COMMIT_DONE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a3e95f6ee79a2062ac9b4ab62ac7a6494a9732b652f3707bddc2dd9f011f81316e"></a>PAL_PI_COMMIT_ERROR&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="af6eff2fe90d3ca8092902993dd53a3b0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#af6eff2fe90d3ca8092902993dd53a3b0">pal_pi_mbed_fsm_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="af6eff2fe90d3ca8092902993dd53a3b0a5cf2a95bc6f4d8a51a6cf0aea1d58033"></a>PAL_PI_MBED_FSM_NONE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="af6eff2fe90d3ca8092902993dd53a3b0a772f4a05fd47853ef0790561efde3a13"></a>PAL_PI_MBED_FSM_SETUP&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="af6eff2fe90d3ca8092902993dd53a3b0a8fc3ba51ba4cd0da9e48180e03aaa8dd"></a>PAL_PI_MBED_FSM_WRITE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="af6eff2fe90d3ca8092902993dd53a3b0a07be41f5418b0058409c8bde84807ca9"></a>PAL_PI_MBED_FSM_READ&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="af6eff2fe90d3ca8092902993dd53a3b0aaa504471738039669d93625c9406d05f"></a>PAL_PI_MBED_FSM_COMMIT&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="af6eff2fe90d3ca8092902993dd53a3b0a7bec3fd0760122a3079c0a792cde5362"></a>PAL_PI_MBED_FSM_GETACTIVEHASH&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a176daf5f8b17cca4c81a449fdf7929e4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a176daf5f8b17cca4c81a449fdf7929e4">pal_pi_mbed_getativehash_state_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a176daf5f8b17cca4c81a449fdf7929e4a49c1eaa2e62d6a0a52e6757b9a84c6de"></a>PAL_PI_GETATIVEHASH_UNINITIALIZED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a176daf5f8b17cca4c81a449fdf7929e4a8a7e22eb2ed8c53a075b03f5105127d1"></a>PAL_PI_GETATIVEHASH_VOLUME_MANAGER_INITIALIZED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a176daf5f8b17cca4c81a449fdf7929e4a2b2b81919197445bf8f8124c16e6fefb"></a>PAL_PI_GETATIVEHASH_STORAGE_DRIVER_INITIALIZED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a176daf5f8b17cca4c81a449fdf7929e4a9b3aeae8375b10e62d6ed9eec032e1b6"></a>PAL_PI_GETATIVEHASH_DONE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a176daf5f8b17cca4c81a449fdf7929e4aa1ce360c32e0ce97d762ebc09f00ffc2"></a>PAL_PI_GETATIVEHASH_ERROR&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="aea34e881864ec5991b8f41d4db2f20d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#aea34e881864ec5991b8f41d4db2f20d6">pal_pi_mbed_read_state_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="aea34e881864ec5991b8f41d4db2f20d6a5051dc71cfb98868baf2019cad9145c9"></a>PAL_PI_READ_SKIP_METADATA&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aea34e881864ec5991b8f41d4db2f20d6affb00f509bebfc9107a3704e8153fe8a"></a>PAL_PI_READ_UNINITIALIZED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aea34e881864ec5991b8f41d4db2f20d6a83af438c78b1a2f3296100142477bb57"></a>PAL_PI_READ_DONE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="aea34e881864ec5991b8f41d4db2f20d6a70b722a803e391eadfb77cb1c09f73ac"></a>PAL_PI_READ_ERROR&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a4c6cd7eb99781c3e521d223f31eb85d4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a4c6cd7eb99781c3e521d223f31eb85d4">pal_pi_mbed_setup_state_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a4c6cd7eb99781c3e521d223f31eb85d4a4f3b72371167ccaa8ce733cb24ca6c1d"></a>PAL_PI_SETUP_UNINITIALIZED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4c6cd7eb99781c3e521d223f31eb85d4ae464fa95827d6a705b47c3d078448c86"></a>PAL_PI_SETUP_VOLUME_MANAGER_INITIALIZED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4c6cd7eb99781c3e521d223f31eb85d4a1e88752d489258b3ed3e8fd74a906b8c"></a>PAL_PI_SETUP_STORAGE_DRIVER_INITIALIZED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4c6cd7eb99781c3e521d223f31eb85d4a5fcdac218b94e7828e37cea02b287e8f"></a>PAL_PI_SETUP_DONE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a4c6cd7eb99781c3e521d223f31eb85d4a8aa67fddbf4a8a17f86d450d94dd1657"></a>PAL_PI_SETUP_ERROR&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="afbf088d926918e852b1eebfaff80e133"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#afbf088d926918e852b1eebfaff80e133">pal_pi_mbed_write_state_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="afbf088d926918e852b1eebfaff80e133a03d1c45616dab53a1f70519e0e1842a3"></a>PAL_PI_WRITE_UNINITIALIZED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="afbf088d926918e852b1eebfaff80e133af7552fc42b2f4c2e8dab529e705c1aa5"></a>PAL_PI_WRITE_METADATA_LOGGED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="afbf088d926918e852b1eebfaff80e133ad6189a3b8a082992de381bcadb5b632c"></a>PAL_PI_WRITE_RESIDUAL_LOGGED&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="afbf088d926918e852b1eebfaff80e133ab73cc7d38e31a075d76deb06a633b905"></a>PAL_PI_WRITE_DONE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="afbf088d926918e852b1eebfaff80e133a570a8ce15806e78709bc46db4d8d524b"></a>PAL_PI_WRITE_ERROR&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a6f9492bd4207f64185e224edc41b92a7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">ARM_DRIVER_STORAGE ARM_Driver_Storage_ </td>
+          <td>(</td>
+          <td class="paramtype">0&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2b615289b1b228eb37ed16a7a3d97e3a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PAL_PI_MBED_Commit_StateMachine_Advance </td>
+          <td>(</td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>status</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a47a7120931f8aae54f5cb63431718fa1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int PAL_PI_MBED_Commit_StateMachine_Enter </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af3bb3231669b76fbb25bbd6698a88792"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int PAL_PI_MBED_GetAtiveHash_StateMachine </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a632d90687b332ec52acf7f2361fd677b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PAL_PI_MBED_journal_callbackHandler </td>
+          <td>(</td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>status</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">FlashJournal_OpCode_t&#160;</td>
+          <td class="paramname"><em>cmd_code</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="affbf3a34b064837cbffa57ea03608ab1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PAL_PI_MBED_journalMTD_callbackHandler </td>
+          <td>(</td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>status</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">ARM_STORAGE_OPERATION&#160;</td>
+          <td class="paramname"><em>operation</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afd4ce1b11218bf2b4bea9d1d26d148eb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PAL_PI_MBED_Read_StateMachine_Advance </td>
+          <td>(</td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>status</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aadb42b35dc018f8357ea253b39b51016"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int PAL_PI_MBED_Read_StateMachine_Enter </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0a10f6d348c44271256ce351332a1545"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PAL_PI_MBED_Setup_StateMachine_Advance </td>
+          <td>(</td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>status</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aae5619ca2f906c0525a5e94abc844fae"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int PAL_PI_MBED_Setup_StateMachine_Enter </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad1c4ab554059ee9d9a4c09f1e205f18f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PAL_PI_MBED_volumeManager_initializeCallbackHandler </td>
+          <td>(</td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>status</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa7cba922f992a315f79a4bb253b26216"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int PAL_PI_MBED_Write_LogResidual </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2294ef45a3a4e30cd1744bb99a717a46"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void PAL_PI_MBED_Write_StateMachine_Advance </td>
+          <td>(</td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>status</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a39cf7e2ef5b8f65f1044b68527563d0f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int PAL_PI_MBED_Write_StateMachine_Enter </td>
+          <td>(</td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>status</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0975a4b263074cd29ad2c048bd65fc57"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageActivate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the imageId to be the active image (after device reset). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a9974172099eb04fa008b12c6432e832a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageDeInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Clear all the resources used by the pal_update APIs. </p><dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2ac43c37ca09395eaef46ac9c48747dc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageFlush </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Flush the entire image data after writing ends for imageId. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a13dee681c787b26269df36464a114bf9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageGetActiveHash </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>hash</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Retrieve the hash value of the active image to hash buffer with max size hash maxBufferLength, and set the hash bufferLength to the hash size. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">hash</td><td>The hash and actual size of hash read. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aac3002ca0559fa4a266f8ff7f10a653e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageGetActiveVersion </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>version</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Retrieve the version of the active image to version buffer with the size set to version bufferLength. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">version</td><td>The version and actual size of version read. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a04bdb18ea6bbad040310007e1c7dad52"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageGetDirectMemAccess </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void **&#160;</td>
+          <td class="paramname"><em>imagePtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>imageSizeInBytes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Verify whether the imageId is readable and set imagePtr to point to the beginning of the image in the memory and imageSizeInBytes to the image size. In case of failure sets imagePtr to NULL and returns the relevant palStatus_t error. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">imagePtr</td><td>A pointer to the start of the image. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">imageSizeInBytes</td><td>The size of the image. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a459d4051428d92cf6e0d960b198c87d3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageGetMaxNumberOfImages </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>imageNumber</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the imageNumber to the number of available images. You can do this through hard coded define inside the linker script. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">imageNumber</td><td>The total number of images the system supports. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a3184f4433c02437d70307b21bc755cb8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageInitAPI </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a>&#160;</td>
+          <td class="paramname"><em>CBfunction</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set the callback function that is called before the end of each API (except imageGetDirectMemAccess). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">CBfunction</td><td>A pointer to the callback function. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1ea8421acb807fa8f769be11d3d24e7c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageReadToBuffer </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>chunk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Read the max of chunk maxBufferLength bytes from the imageId with relative offset and store it in chunk buffer. Set the chunk bufferLength value to the actual number of bytes read. Note: Please use this API in case the image is not directly accessible via the imageGetDirectMemAccess function. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">offset</td><td>The offset to start reading from. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">chunk</td><td>The data and actual bytes read. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ab5a811ed8f4fff3a8f5317de00198ca4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageReserveSpace </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>imageSize</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Claim space in the relevant storage region for imageId with the size of the image. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageSize</td><td>The size of the images. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5086927381d43a2ec2818209b20c2261"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageSetHeader </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a> *&#160;</td>
+          <td class="paramname"><em>details</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set up the details for the image header. The data is written when the image write is called for the first time. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">details</td><td>The data needed to build the image header. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a90614195d6390f9cffb77e840c1eca0e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageSetVersion </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>version</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Update the image version of imageId to version written in version buffer with version bufferLength. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">version</td><td>The image version and its length. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ad6c3c91cf0da39abb1a4a50ff089936f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageWrite </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>chunk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Write the data in the chunk buffer with the size written in chunk bufferLength in the location of imageId adding the relative offset. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>The image ID. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">offset</td><td>the relative offset to write the data into </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">chunk</td><td>A pointer to struct containing the data and the data length to write. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a66c15f74e8d3e11e449531e41d39e20a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_imageWriteHashToMemory </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *const&#160;</td>
+          <td class="paramname"><em>hashValue</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Write the dataId stored in dataBuffer to memory accessible to the bootloader. Currently, only HASH is available. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">hashValue</td><td>The data and size of the HASH. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a735a834fc7071baefe08266ad9029da5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">ARM_DRIVER_STORAGE* mtd = &amp;<a class="el" href="../../d3/d44/pal__plat__update_8cpp.html#a6f9492bd4207f64185e224edc41b92a7">ARM_Driver_Storage_</a>(0)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a531aff6f188904a2cfc794770ffad311"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">FlashJournal_t pal_pi_mbed_journal</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a120116f585e123cb4c022cae715a5b8f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">FlashJournal_Info_t pal_pi_mbed_journal_info</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0a3810ba98c634252b033b78dff47f69"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t pal_pi_mbed_metadata_logged</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aba5a953cdba2ddaab784ef9696d0de02"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t* pal_pi_mbed_overflow_buffer</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3b830d51e5d967bf3b36e6a25fe39ebb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t pal_pi_mbed_overflow_buffer_size = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d3/dab/pal__all__test__runner_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_all_test_runner.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_all_test_runner.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;unity.h&quot;</code><br />
+<code>#include &quot;unity_fixture.h&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d3/dfb/pal__plat__network_8cpp.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,837 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl/mbedOS/Networking/pal_plat_network.cpp File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="../../dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li><li class="navelem"><a class="el" href="../../dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html">mbedOS</a></li><li class="navelem"><a class="el" href="../../dir_ddf5611ee10e8b15ebe1664d2c043f4e.html">Networking</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_plat_network.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d9/d16/pal_8h_source.html">pal.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d2c/pal__plat__network_8h_source.html">pal_plat_network.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d4/d01/pal__rtos_8h_source.html">pal_rtos.h</a>&quot;</code><br />
+<code>#include &quot;mbed.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a8c607fcbfa526e4485fcdb55b79b39d6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a8c607fcbfa526e4485fcdb55b79b39d6">PAL_SOCKET_OPTION_ERROR</a>&#160;&#160;&#160;(-1)</td></tr>
+<tr class="separator:a8c607fcbfa526e4485fcdb55b79b39d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:abb42afef799c3d7409ba0c29d645cbaf"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#abb42afef799c3d7409ba0c29d645cbaf">palSelectCallbackFunction_t</a>) ()</td></tr>
+<tr class="separator:abb42afef799c3d7409ba0c29d645cbaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab92cca0e4facf3d62e03c0d0ca0523da"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#ab92cca0e4facf3d62e03c0d0ca0523da">pal_plat_socketsInit</a> (void *context)</td></tr>
+<tr class="separator:ab92cca0e4facf3d62e03c0d0ca0523da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab37f007a0574ca73916b26240ff1126b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#ab37f007a0574ca73916b26240ff1126b">pal_plat_RegisterNetworkInterface</a> (void *context, uint32_t *interfaceIndex)</td></tr>
+<tr class="separator:ab37f007a0574ca73916b26240ff1126b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a2b36db2bb5d71ade0fe8cb00d3cecd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd">pal_plat_socketsTerminate</a> (void *context)</td></tr>
+<tr class="separator:a6a2b36db2bb5d71ade0fe8cb00d3cecd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58a25ae30bb6225cc8b5344053fd705c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a58a25ae30bb6225cc8b5344053fd705c">pal_plat_socket</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a> domain, <a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a> type, bool nonBlockingSocket, uint32_t interfaceNum, <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *socket)</td></tr>
+<tr class="separator:a58a25ae30bb6225cc8b5344053fd705c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76c4e2adf95702c4db8f3792ae373bf9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a76c4e2adf95702c4db8f3792ae373bf9">pal_plat_getSocketOptions</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a> optionName, void *optionValue, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *optionLength)</td></tr>
+<tr class="separator:a76c4e2adf95702c4db8f3792ae373bf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08ea05dacec7f7d9dc892dab0318542d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a08ea05dacec7f7d9dc892dab0318542d">pal_plat_setSocketOptions</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, int optionName, const void *optionValue, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> optionLength)</td></tr>
+<tr class="separator:a08ea05dacec7f7d9dc892dab0318542d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a53a267fd8ed0b7a5cf988224e95bd47c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a53a267fd8ed0b7a5cf988224e95bd47c">pal_plat_bind</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *myAddress, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> addressLength)</td></tr>
+<tr class="separator:a53a267fd8ed0b7a5cf988224e95bd47c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa869b5eddbf4eb6aebbbb587ece84aac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#aa869b5eddbf4eb6aebbbb587ece84aac">pal_plat_receiveFrom</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, void *buffer, size_t length, <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *from, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *fromLength, size_t *bytesReceived)</td></tr>
+<tr class="separator:aa869b5eddbf4eb6aebbbb587ece84aac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17365747ed8d29df153a336da3942187"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a17365747ed8d29df153a336da3942187">pal_plat_sendTo</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, const void *buffer, size_t length, const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *to, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> toLength, size_t *bytesSent)</td></tr>
+<tr class="separator:a17365747ed8d29df153a336da3942187"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a071355a0ca4d4eece45f0ed85a9ab1da"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a071355a0ca4d4eece45f0ed85a9ab1da">pal_plat_close</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *socket)</td></tr>
+<tr class="separator:a071355a0ca4d4eece45f0ed85a9ab1da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af36bf075867e5ed0be7479312469361f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#af36bf075867e5ed0be7479312469361f">pal_plat_getNumberOfNetInterfaces</a> (uint32_t *numInterfaces)</td></tr>
+<tr class="separator:af36bf075867e5ed0be7479312469361f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6dc3b4c06e96b29068995809b98a935e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a6dc3b4c06e96b29068995809b98a935e">pal_plat_getNetInterfaceInfo</a> (uint32_t interfaceNum, <a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a> *interfaceInfo)</td></tr>
+<tr class="separator:a6dc3b4c06e96b29068995809b98a935e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a056dbb70ade63a6ebc47f1f11733b8da"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a056dbb70ade63a6ebc47f1f11733b8da">palSelectCallback0</a> ()</td></tr>
+<tr class="separator:a056dbb70ade63a6ebc47f1f11733b8da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4dcff46004af6c4d300d542de9c7d38e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a4dcff46004af6c4d300d542de9c7d38e">palSelectCallback1</a> ()</td></tr>
+<tr class="separator:a4dcff46004af6c4d300d542de9c7d38e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe369a2a4de2c8e25ed47166f068918f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#abe369a2a4de2c8e25ed47166f068918f">palSelectCallback2</a> ()</td></tr>
+<tr class="separator:abe369a2a4de2c8e25ed47166f068918f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeabad2d66db156a97447f6e22614e78c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#aeabad2d66db156a97447f6e22614e78c">palSelectCallback3</a> ()</td></tr>
+<tr class="separator:aeabad2d66db156a97447f6e22614e78c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a521d96ff90d0b417e6749df8ae90bf8b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a521d96ff90d0b417e6749df8ae90bf8b">palSelectCallback4</a> ()</td></tr>
+<tr class="separator:a521d96ff90d0b417e6749df8ae90bf8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae937bf3f397b1642a29a44c6cf9bc075"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#ae937bf3f397b1642a29a44c6cf9bc075">palSelectCallback5</a> ()</td></tr>
+<tr class="separator:ae937bf3f397b1642a29a44c6cf9bc075"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b99c0251a9efb7224658c8da6e3ad27"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a6b99c0251a9efb7224658c8da6e3ad27">palSelectCallback6</a> ()</td></tr>
+<tr class="separator:a6b99c0251a9efb7224658c8da6e3ad27"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e102ddea1bd5315a4224c2a1fdddd58"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a6e102ddea1bd5315a4224c2a1fdddd58">palSelectCallback7</a> ()</td></tr>
+<tr class="separator:a6e102ddea1bd5315a4224c2a1fdddd58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa0c26dfeee80444e58eacab238206d09"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#aa0c26dfeee80444e58eacab238206d09">pal_plat_socketMiniSelect</a> (const <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socketsToCheck[<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>], uint32_t numberOfSockets, <a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a> *timeout, uint8_t palSocketStatus[<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>], uint32_t *numberOfSocketsSet)</td></tr>
+<tr class="separator:aa0c26dfeee80444e58eacab238206d09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a77af6aede7e9f4d41f8c87ebc381b517"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a77af6aede7e9f4d41f8c87ebc381b517">s_select_event_happened</a> [<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>]</td></tr>
+<tr class="separator:a77af6aede7e9f4d41f8c87ebc381b517"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4f6fdfaea202b7b50e57e7253705d96e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#abb42afef799c3d7409ba0c29d645cbaf">palSelectCallbackFunction_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a4f6fdfaea202b7b50e57e7253705d96e">s_palSelectPalCallbackFunctions</a> [<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>] = { <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a056dbb70ade63a6ebc47f1f11733b8da">palSelectCallback0</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a4dcff46004af6c4d300d542de9c7d38e">palSelectCallback1</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#abe369a2a4de2c8e25ed47166f068918f">palSelectCallback2</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#aeabad2d66db156a97447f6e22614e78c">palSelectCallback3</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a521d96ff90d0b417e6749df8ae90bf8b">palSelectCallback4</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#ae937bf3f397b1642a29a44c6cf9bc075">palSelectCallback5</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a6b99c0251a9efb7224658c8da6e3ad27">palSelectCallback6</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a6e102ddea1bd5315a4224c2a1fdddd58">palSelectCallback7</a> }</td></tr>
+<tr class="separator:a4f6fdfaea202b7b50e57e7253705d96e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a8c607fcbfa526e4485fcdb55b79b39d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_SOCKET_OPTION_ERROR&#160;&#160;&#160;(-1)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="abb42afef799c3d7409ba0c29d645cbaf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef void(* palSelectCallbackFunction_t) ()</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a53a267fd8ed0b7a5cf988224e95bd47c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_bind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>myAddress</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>addressLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Bind a given socket to a local address. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket to bind. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">myAddress</td><td>The address to bind to. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">addressLength</td><td>The length of the address passed in myAddress. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a071355a0ca4d4eece45f0ed85a9ab1da"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_close </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *&#160;</td>
+          <td class="paramname"><em>socket</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Close a network socket. NOTE: recieves palSocket_t* and not palSocket_t so that it can zero the socket to avoid re-use. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">socket</td><td>Release and zero socket pointed to by given pointer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6dc3b4c06e96b29068995809b98a935e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_getNetInterfaceInfo </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>interfaceNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a> *&#160;</td>
+          <td class="paramname"><em>interfaceInfo</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get information regarding the socket at the index/interface number given (this number is returned when registering the socket). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">interfaceNum</td><td>The number of the interface to get information for. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">interfaceInfo</td><td>The information for the given interface number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="af36bf075867e5ed0be7479312469361f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_getNumberOfNetInterfaces </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>numInterfaces</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the number of current network interfaces (interfaces that have been registered through). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">numInterfaces</td><td>The number of interfaces after a successful call. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status as in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a76c4e2adf95702c4db8f3792ae373bf9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_getSocketOptions </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a>&#160;</td>
+          <td class="paramname"><em>optionName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>optionValue</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *&#160;</td>
+          <td class="paramname"><em>optionLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get options for a given network socket. Only a few options are supported (see palSocketOptionName_t for supported options). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket for which to get options. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionName</td><td>The name for which to set the option (see enum PAL_NET_SOCKET_OPTION for supported types). </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">optionValue</td><td>The buffer holding the option value returned by the function. </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">optionLength</td><td>The size of the buffer provided for optionValue when calling the function. After the call, it contains the length of data actually written to the optionValue buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa869b5eddbf4eb6aebbbb587ece84aac"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_receiveFrom </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>from</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *&#160;</td>
+          <td class="paramname"><em>fromLength</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>bytesReceived</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Receive a payload from the given socket. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket to receive from [sockets passed to this function should be of type PAL_SOCK_DGRAM (the implementation may support other types as well)]. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">buffer</td><td>The buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>The length of the buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">from</td><td>The address that sent the payload [optional - if not required pass NULL]. </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">fromLength</td><td>The length of the 'from' address. When completed, this contains the amount of data actually written to the from address [optional - if not required pass NULL]. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">bytesReceived</td><td>The actual amount of payload data received to the buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab37f007a0574ca73916b26240ff1126b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_RegisterNetworkInterface </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>networkInterfaceContext</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>interfaceIndex</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Register a network interface for use with PAL sockets - must be called before other socket functions - most APIs will not work before a single interface is added. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">networkInterfaceContext</td><td>The context of the network interface to be added (OS specific. In mbed OS, this is the NetworkInterface object pointer for the network adapter [note: we assume connect has already been called on this]). - if not available use NULL (may not be required on some OSs). </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">interfaceIndex</td><td>Contains the index assigned to the interface in case it has been assigned successfully. This index can be used when creating a socket to bind the socket to the interface. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a17365747ed8d29df153a336da3942187"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_sendTo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>to</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>toLength</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>bytesSent</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Send a payload to the given address using the given socket. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket to use for sending the payload [sockets passed to this function should be of type PAL_SOCK_DGRAM (the implementation may support other types as well)]. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">buffer</td><td>The buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>The length of the buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">to</td><td>The address to which the payload should be sent. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">toLength</td><td>The length of the 'to' address. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">bytesSent</td><td>The actual amount of payload data sent. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a08ea05dacec7f7d9dc892dab0318542d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_setSocketOptions </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>optionName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>optionValue</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>optionLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set options for a given network socket. Only a few options are supported (see palSocketOptionName_t for supported options). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket for which to get options. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionName</td><td>The name for which to set the option (see enum PAL_NET_SOCKET_OPTION for supported types). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionValue</td><td>The buffer holding the option value to set for the given option. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionLength</td><td>The size of the buffer provided for optionValue. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a58a25ae30bb6225cc8b5344053fd705c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_socket </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a>&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>nonBlockingSocket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>interfaceNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *&#160;</td>
+          <td class="paramname"><em>socket</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get a network socket. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">domain</td><td>The domain of the created socket (see palSocketDomain_t for supported types). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>The type of the created socket (see palSocketType_t for supported types). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">nonBlockingSocket</td><td>If true, the socket is non-blocking (with O_NONBLOCK set). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">interfaceNum</td><td>The number of the network interface used for this socket (info in interfaces supported via pal_getNumberOfNetInterfaces and pal_getNetInterfaceInfo ), choose PAL_NET_DEFAULT_INTERFACE for default interface. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">socket</td><td>The socket is returned through this output parameter. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa0c26dfeee80444e58eacab238206d09"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_socketMiniSelect </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socketsToCheck</em>[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>numberOfSockets</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a> *&#160;</td>
+          <td class="paramname"><em>timeout</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>palSocketStatus</em>[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>numberOfSocketsSet</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Check if one or more (up to PAL_NET_SOCKET_SELECT_MAX_SOCKETS) sockets has data available for reading/writing/error. The function blocks until data is available for one of the given sockets or the timeout expires. To use the function, set the sockets you want to check in the socketsToCheck array and set a timeout. When it returns the socketStatus output inidcates the status of each socket passed in. Note: The entry in index x in the socketStatus array corresponds to the socket at index x in the sockets to check array. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socketsToCheck</td><td>The array of up to 8 socket handles to check. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">numberOfSockets</td><td>The number of sockets set in the input socketsToCheck array. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>The time until timeout if no socket activity is detected. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">palSocketStatus</td><td>Information on each socket in the input array indicating which event was set (none, rx, tx, err). Check for a desired event using macros. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">numberOfSocketsSet</td><td>The total number of sockets set in all three data sets (tx, rx, err) after a completed function. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab92cca0e4facf3d62e03c0d0ca0523da"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_socketsInit </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>context</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>PAL network socket API PAL network sockets configurations options: define PAL_NET_TCP_AND_TLS_SUPPORT if TCP is supported by the platform and is required. define PAL_NET_ASYNCHRONOUS_SOCKET_API if asynchronous socket API is supported by the platform. Currently MANDATORY. define PAL_NET_DNS_SUPPORT if DNS name resolution is supported. </p><pre class="fragment">Initialize sockets - must be called before other socket functions (is called from PAL init).
+</pre> <dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">context</td><td>Optional context - if not available/applicable use NULL. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6a2b36db2bb5d71ade0fe8cb00d3cecd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_socketsTerminate </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>context</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Initialize terminate - can be called when sockets are no longer needed to free socket resources allocated by init. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">context</td><td>Optional context - if not available use NULL. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a056dbb70ade63a6ebc47f1f11733b8da"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palSelectCallback0 </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4dcff46004af6c4d300d542de9c7d38e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palSelectCallback1 </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abe369a2a4de2c8e25ed47166f068918f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palSelectCallback2 </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aeabad2d66db156a97447f6e22614e78c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palSelectCallback3 </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a521d96ff90d0b417e6749df8ae90bf8b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palSelectCallback4 </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae937bf3f397b1642a29a44c6cf9bc075"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palSelectCallback5 </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6b99c0251a9efb7224658c8da6e3ad27"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palSelectCallback6 </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6e102ddea1bd5315a4224c2a1fdddd58"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palSelectCallback7 </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a4f6fdfaea202b7b50e57e7253705d96e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#abb42afef799c3d7409ba0c29d645cbaf">palSelectCallbackFunction_t</a> s_palSelectPalCallbackFunctions[<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>] = { <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a056dbb70ade63a6ebc47f1f11733b8da">palSelectCallback0</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a4dcff46004af6c4d300d542de9c7d38e">palSelectCallback1</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#abe369a2a4de2c8e25ed47166f068918f">palSelectCallback2</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#aeabad2d66db156a97447f6e22614e78c">palSelectCallback3</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a521d96ff90d0b417e6749df8ae90bf8b">palSelectCallback4</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#ae937bf3f397b1642a29a44c6cf9bc075">palSelectCallback5</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a6b99c0251a9efb7224658c8da6e3ad27">palSelectCallback6</a>, <a class="el" href="../../d3/dfb/pal__plat__network_8cpp.html#a6e102ddea1bd5315a4224c2a1fdddd58">palSelectCallback7</a> }</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a77af6aede7e9f4d41f8c87ebc381b517"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t s_select_event_happened[<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d4/d01/pal__rtos_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1452 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_rtos.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_rtos.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br />
+<code>#include &quot;<a class="el" href="../../db/dcf/pal__macros_8h_source.html">pal_macros.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d6/dc2/pal__types_8h_source.html">pal_types.h</a>&quot;</code><br />
+</div>
+<p><a href="../../d4/d01/pal__rtos_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d48/structpal__thread_local_store.html">pal_threadLocalStore</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ad19aa2a408e848a5f86d897ab50500ec"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ad19aa2a408e848a5f86d897ab50500ec">PAL_RTOS_WAIT_FOREVER</a>&#160;&#160;&#160;<a class="el" href="../../db/dcf/pal__macros_8h.html#ac7e2d509703ff033a302b325aa664f6e">PAL_MAX_UINT32</a></td></tr>
+<tr class="memdesc:ad19aa2a408e848a5f86d897ab50500ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wait forever define. used for Semaphores and Mutexes.  <a href="#ad19aa2a408e848a5f86d897ab50500ec">More...</a><br /></td></tr>
+<tr class="separator:ad19aa2a408e848a5f86d897ab50500ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e5b95b90c72b6bdf62897efd58f98fb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a2e5b95b90c72b6bdf62897efd58f98fb">PAL_PRINTF</a>(ARGS...)&#160;&#160;&#160;<a class="el" href="../../d4/d01/pal__rtos_8h.html#a2b4f475c89ea263557d6529c4d9a9353">dbgPrintf</a>(__FUNCTION__,__LINE__, ARGS);</td></tr>
+<tr class="separator:a2e5b95b90c72b6bdf62897efd58f98fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:aa61aba50e0f2dba5c8571417c2bdd9a5"><td class="memItemLeft" align="right" valign="top">typedef uintptr_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a></td></tr>
+<tr class="memdesc:aa61aba50e0f2dba5c8571417c2bdd9a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Primitives IDs types declarations.  <a href="#aa61aba50e0f2dba5c8571417c2bdd9a5">More...</a><br /></td></tr>
+<tr class="separator:aa61aba50e0f2dba5c8571417c2bdd9a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b627efa48e79a6fbcafae87ae397985"><td class="memItemLeft" align="right" valign="top">typedef uintptr_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a></td></tr>
+<tr class="separator:a4b627efa48e79a6fbcafae87ae397985"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac6b402eec0e5f2ab64c43abffd4d9901"><td class="memItemLeft" align="right" valign="top">typedef uintptr_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a></td></tr>
+<tr class="separator:ac6b402eec0e5f2ab64c43abffd4d9901"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a8206fc36c3dca549aed450f7777481"><td class="memItemLeft" align="right" valign="top">typedef uintptr_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a></td></tr>
+<tr class="separator:a0a8206fc36c3dca549aed450f7777481"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73ab99198ebc6e6af72064739b05bdcb"><td class="memItemLeft" align="right" valign="top">typedef uintptr_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a></td></tr>
+<tr class="separator:a73ab99198ebc6e6af72064739b05bdcb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acb4162ac097039734d15916d29880910"><td class="memItemLeft" align="right" valign="top">typedef uintptr_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a></td></tr>
+<tr class="separator:acb4162ac097039734d15916d29880910"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9858103df451aaf98a8af08c2583b94a"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2">palTimerType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a></td></tr>
+<tr class="memdesc:a9858103df451aaf98a8af08c2583b94a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Timers types supported in PAL.  <a href="#a9858103df451aaf98a8af08c2583b94a">More...</a><br /></td></tr>
+<tr class="separator:a9858103df451aaf98a8af08c2583b94a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21fd378211ce09c12c15c39ff579627b"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a>) (void const *funcArgument)</td></tr>
+<tr class="memdesc:a21fd378211ce09c12c15c39ff579627b"><td class="mdescLeft">&#160;</td><td class="mdescRight">PAL timer function prototype.  <a href="#a21fd378211ce09c12c15c39ff579627b">More...</a><br /></td></tr>
+<tr class="separator:a21fd378211ce09c12c15c39ff579627b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a54696b00a498a3c4a1346030acd18853"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a>) (void const *funcArgument)</td></tr>
+<tr class="memdesc:a54696b00a498a3c4a1346030acd18853"><td class="mdescLeft">&#160;</td><td class="mdescRight">PAL thread function prototype.  <a href="#a54696b00a498a3c4a1346030acd18853">More...</a><br /></td></tr>
+<tr class="separator:a54696b00a498a3c4a1346030acd18853"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a278568ee407204e02cbd783f612e55be"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535">pal_osPriority</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a></td></tr>
+<tr class="memdesc:a278568ee407204e02cbd783f612e55be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Available priorities in PAL implementation, each priority can appear only once.  <a href="#a278568ee407204e02cbd783f612e55be">More...</a><br /></td></tr>
+<tr class="separator:a278568ee407204e02cbd783f612e55be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a381fb3b26136f4983dcce371652fb20c"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="../../df/d48/structpal__thread_local_store.html">pal_threadLocalStore</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a></td></tr>
+<tr class="separator:a381fb3b26136f4983dcce371652fb20c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:a7ee094f262d03cbc97380f3fcd34c7d2"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2">palTimerType</a> { <a class="el" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2a0f237f01e8978b2dc987ff3b5cde0f30">palOsTimerOnce</a> = 0, 
+<a class="el" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2aadcc58d31964426d67650ca958fb80f9">palOsTimerPeriodic</a> = 1
+ }<tr class="memdesc:a7ee094f262d03cbc97380f3fcd34c7d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Timers types supported in PAL.  <a href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:a7ee094f262d03cbc97380f3fcd34c7d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f32dbade90ba4bf593f475f51fb6535"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535">pal_osPriority</a> { <br />
+&#160;&#160;<a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a62b0350b25146b93c57a71ce65bb017a">PAL_osPriorityIdle</a> = -3, 
+<a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ab3b5b218f45b07de8153427c63273fec">PAL_osPriorityLow</a> = -2, 
+<a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a23fdf72acf5a9475ca4054d4e1a187a5">PAL_osPriorityBelowNormal</a> = -1, 
+<a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a897a2d3cf2fa39f82141535d0d4e51a1">PAL_osPriorityNormal</a> = 0, 
+<br />
+&#160;&#160;<a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ac6ad927a77b4275e1da2373f810ee2af">PAL_osPriorityAboveNormal</a> = +1, 
+<a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a70d584591ab861e247ccfe94e55e35a2">PAL_osPriorityHigh</a> = +2, 
+<a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a3c2b8a244cae70bbf23a5a4d033df2ce">PAL_osPriorityRealtime</a> = +3, 
+<a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a94aea8f14f0bc89f7f4540416c08da3e">PAL_osPriorityError</a> = 0x84
+<br />
+ }<tr class="memdesc:a6f32dbade90ba4bf593f475f51fb6535"><td class="mdescLeft">&#160;</td><td class="mdescRight">Available priorities in PAL implementation, each priority can appear only once.  <a href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:a6f32dbade90ba4bf593f475f51fb6535"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab8ab0f31bbf4258b7684d22e7725a9f8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ab8ab0f31bbf4258b7684d22e7725a9f8">pal_osReboot</a> (void)</td></tr>
+<tr class="separator:ab8ab0f31bbf4258b7684d22e7725a9f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9800b8b9e057fe17e50c4259c809f898"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a9800b8b9e057fe17e50c4259c809f898">pal_osKernelSysTick</a> (void)</td></tr>
+<tr class="separator:a9800b8b9e057fe17e50c4259c809f898"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af88551b6ca24a7a2bb6d94d423eb4401"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#af88551b6ca24a7a2bb6d94d423eb4401">pal_osKernelSysTick64</a> (void)</td></tr>
+<tr class="separator:af88551b6ca24a7a2bb6d94d423eb4401"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a34375ee82619a4064849daccbdfbc966"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a34375ee82619a4064849daccbdfbc966">pal_osKernelSysTickMicroSec</a> (uint64_t microseconds)</td></tr>
+<tr class="separator:a34375ee82619a4064849daccbdfbc966"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59e85747582417a1395ed0f9c140eb8a"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a59e85747582417a1395ed0f9c140eb8a">pal_osKernelSysMilliSecTick</a> (uint64_t sysTicks)</td></tr>
+<tr class="separator:a59e85747582417a1395ed0f9c140eb8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a087214ae87c20fd59f47fe3c96d0eefc"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a087214ae87c20fd59f47fe3c96d0eefc">pal_osKernelSysTickFrequency</a> (void)</td></tr>
+<tr class="separator:a087214ae87c20fd59f47fe3c96d0eefc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2dae64d917f644982b893037adf562b4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a2dae64d917f644982b893037adf562b4">pal_osThreadCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a> function, void *funcArgument, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a> priority, uint32_t stackSize, uint32_t *stackPtr, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a> *store, <a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *threadID)</td></tr>
+<tr class="separator:a2dae64d917f644982b893037adf562b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abcfa47b411929b33d5d9cfaaff28ce18"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#abcfa47b411929b33d5d9cfaaff28ce18">pal_osThreadTerminate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *threadID)</td></tr>
+<tr class="separator:abcfa47b411929b33d5d9cfaaff28ce18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2993b8f6b5e8d7ccd6121dc18330e4be"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a2993b8f6b5e8d7ccd6121dc18330e4be">pal_osThreadGetId</a> (void)</td></tr>
+<tr class="separator:a2993b8f6b5e8d7ccd6121dc18330e4be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac94f4efc4bad73969e57c8255c136a0d"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac94f4efc4bad73969e57c8255c136a0d">pal_osThreadGetLocalStore</a> (void)</td></tr>
+<tr class="separator:ac94f4efc4bad73969e57c8255c136a0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6aaee432fd7ea5e35ab500a6278cc25"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ad6aaee432fd7ea5e35ab500a6278cc25">pal_osDelay</a> (uint32_t milliseconds)</td></tr>
+<tr class="separator:ad6aaee432fd7ea5e35ab500a6278cc25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4da36fbbba744a14d1bdfe2a26d1a18"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa4da36fbbba744a14d1bdfe2a26d1a18">pal_osTimerCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a> function, void *funcArgument, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a> timerType, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *timerID)</td></tr>
+<tr class="separator:aa4da36fbbba744a14d1bdfe2a26d1a18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c60c9e433bc6005bac6b02d5aba7363"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a6c60c9e433bc6005bac6b02d5aba7363">pal_osTimerStart</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> timerID, uint32_t millisec)</td></tr>
+<tr class="separator:a6c60c9e433bc6005bac6b02d5aba7363"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94f4df594102e582cbd2114f6eebb57d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a94f4df594102e582cbd2114f6eebb57d">pal_osTimerStop</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> timerID)</td></tr>
+<tr class="separator:a94f4df594102e582cbd2114f6eebb57d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac7ca6e7c3c229f4092c9df4b69e7dd59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac7ca6e7c3c229f4092c9df4b69e7dd59">pal_osTimerDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *timerID)</td></tr>
+<tr class="separator:ac7ca6e7c3c229f4092c9df4b69e7dd59"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af89aab14085207b1a0951f7aad24193c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#af89aab14085207b1a0951f7aad24193c">pal_osMutexCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *mutexID)</td></tr>
+<tr class="separator:af89aab14085207b1a0951f7aad24193c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acda0974247325955719b23494d66c622"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acda0974247325955719b23494d66c622">pal_osMutexWait</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutexID, uint32_t millisec)</td></tr>
+<tr class="separator:acda0974247325955719b23494d66c622"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d976a616a5c850b2016b2b87d8b47cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a1d976a616a5c850b2016b2b87d8b47cc">pal_osMutexRelease</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutexID)</td></tr>
+<tr class="separator:a1d976a616a5c850b2016b2b87d8b47cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03f43d7e53435d89f316862b48b573c4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a03f43d7e53435d89f316862b48b573c4">pal_osMutexDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *mutexID)</td></tr>
+<tr class="separator:a03f43d7e53435d89f316862b48b573c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa7aee442a5c8cc274d3e52206984037"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aaa7aee442a5c8cc274d3e52206984037">pal_osSemaphoreCreate</a> (uint32_t count, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *semaphoreID)</td></tr>
+<tr class="separator:aaa7aee442a5c8cc274d3e52206984037"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa2d998744dbc9504bfe0358f85457fc4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa2d998744dbc9504bfe0358f85457fc4">pal_osSemaphoreWait</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphoreID, uint32_t millisec, int32_t *countersAvailable)</td></tr>
+<tr class="separator:aa2d998744dbc9504bfe0358f85457fc4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a009d0c063119265f9c5c0c9bff379c14"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a009d0c063119265f9c5c0c9bff379c14">pal_osSemaphoreRelease</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphoreID)</td></tr>
+<tr class="separator:a009d0c063119265f9c5c0c9bff379c14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a45f071482f8669821b90264e0470b33d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a45f071482f8669821b90264e0470b33d">pal_osSemaphoreDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *semaphoreID)</td></tr>
+<tr class="separator:a45f071482f8669821b90264e0470b33d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1245f053abb3fdb7ab2ceb5a2899e8c6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a1245f053abb3fdb7ab2ceb5a2899e8c6">pal_osPoolCreate</a> (uint32_t blockSize, uint32_t blockCount, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *memoryPoolID)</td></tr>
+<tr class="separator:a1245f053abb3fdb7ab2ceb5a2899e8c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3a2b57685096d16a110ee38f7f29e099"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a3a2b57685096d16a110ee38f7f29e099">pal_osPoolAlloc</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID)</td></tr>
+<tr class="separator:a3a2b57685096d16a110ee38f7f29e099"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d20661cd387a172450a2fe12993687a"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a5d20661cd387a172450a2fe12993687a">pal_osPoolCAlloc</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID)</td></tr>
+<tr class="separator:a5d20661cd387a172450a2fe12993687a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79f4997069310aa7bbb6ae7995988dd7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a79f4997069310aa7bbb6ae7995988dd7">pal_osPoolFree</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID, void *block)</td></tr>
+<tr class="separator:a79f4997069310aa7bbb6ae7995988dd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c01464448f8d7bd95bf518d651484c6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a1c01464448f8d7bd95bf518d651484c6">pal_osPoolDestroy</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *memoryPoolID)</td></tr>
+<tr class="separator:a1c01464448f8d7bd95bf518d651484c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c7f0003e92b3494089966d53ab24a1b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0c7f0003e92b3494089966d53ab24a1b">pal_osMessageQueueCreate</a> (uint32_t messageQSize, <a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *messageQID)</td></tr>
+<tr class="separator:a0c7f0003e92b3494089966d53ab24a1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a966daa5b0bd9282fbffa7c462da1c417"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a966daa5b0bd9282fbffa7c462da1c417">pal_osMessagePut</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> messageQID, uint32_t info, uint32_t timeout)</td></tr>
+<tr class="separator:a966daa5b0bd9282fbffa7c462da1c417"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab70d0be45514258874c0406c2040372c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ab70d0be45514258874c0406c2040372c">pal_osMessageGet</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> messageQID, uint32_t timeout, uint32_t *messageValue)</td></tr>
+<tr class="separator:ab70d0be45514258874c0406c2040372c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adba13212ec060092acdf6165e82be5b6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#adba13212ec060092acdf6165e82be5b6">pal_osMessageQueueDestroy</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *messageQID)</td></tr>
+<tr class="separator:adba13212ec060092acdf6165e82be5b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b33d260ee1022f5b5f6a9dfc3363f2a"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a9b33d260ee1022f5b5f6a9dfc3363f2a">pal_osAtomicIncrement</a> (int32_t *valuePtr, int32_t increment)</td></tr>
+<tr class="separator:a9b33d260ee1022f5b5f6a9dfc3363f2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b4f475c89ea263557d6529c4d9a9353"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a2b4f475c89ea263557d6529c4d9a9353">dbgPrintf</a> (const char *function, uint32_t line, const char *format,...)</td></tr>
+<tr class="separator:a2b4f475c89ea263557d6529c4d9a9353"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a2e5b95b90c72b6bdf62897efd58f98fb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_PRINTF</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">ARGS...</td><td>)</td>
+          <td>&#160;&#160;&#160;<a class="el" href="../../d4/d01/pal__rtos_8h.html#a2b4f475c89ea263557d6529c4d9a9353">dbgPrintf</a>(__FUNCTION__,__LINE__, ARGS);</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad19aa2a408e848a5f86d897ab50500ec"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_RTOS_WAIT_FOREVER&#160;&#160;&#160;<a class="el" href="../../db/dcf/pal__macros_8h.html#ac7e2d509703ff033a302b325aa664f6e">PAL_MAX_UINT32</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Wait forever define. used for Semaphores and Mutexes. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="a73ab99198ebc6e6af72064739b05bdcb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uintptr_t <a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acb4162ac097039734d15916d29880910"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uintptr_t <a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac6b402eec0e5f2ab64c43abffd4d9901"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uintptr_t <a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0a8206fc36c3dca549aed450f7777481"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uintptr_t <a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a54696b00a498a3c4a1346030acd18853"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef void(* palThreadFuncPtr) (void const *funcArgument)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>PAL thread function prototype. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa61aba50e0f2dba5c8571417c2bdd9a5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uintptr_t <a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Primitives IDs types declarations. </p>
+
+</div>
+</div>
+<a class="anchor" id="a381fb3b26136f4983dcce371652fb20c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="../../df/d48/structpal__thread_local_store.html">pal_threadLocalStore</a>  <a class="el" href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Thread priority levels for PAL threads - each thread must have a different priority Thread Local Store struct. Can be used to hold: State, configurations and etc inside the thread. </p>
+
+</div>
+</div>
+<a class="anchor" id="a278568ee407204e02cbd783f612e55be"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535">pal_osPriority</a>  <a class="el" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Available priorities in PAL implementation, each priority can appear only once. </p>
+
+</div>
+</div>
+<a class="anchor" id="a21fd378211ce09c12c15c39ff579627b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef void(* palTimerFuncPtr) (void const *funcArgument)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>PAL timer function prototype. </p>
+
+</div>
+</div>
+<a class="anchor" id="a4b627efa48e79a6fbcafae87ae397985"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uintptr_t <a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9858103df451aaf98a8af08c2583b94a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2">palTimerType</a>  <a class="el" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Timers types supported in PAL. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="a6f32dbade90ba4bf593f475f51fb6535"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535">pal_osPriority</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Available priorities in PAL implementation, each priority can appear only once. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a6f32dbade90ba4bf593f475f51fb6535a62b0350b25146b93c57a71ce65bb017a"></a>PAL_osPriorityIdle&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a6f32dbade90ba4bf593f475f51fb6535ab3b5b218f45b07de8153427c63273fec"></a>PAL_osPriorityLow&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a6f32dbade90ba4bf593f475f51fb6535a23fdf72acf5a9475ca4054d4e1a187a5"></a>PAL_osPriorityBelowNormal&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a6f32dbade90ba4bf593f475f51fb6535a897a2d3cf2fa39f82141535d0d4e51a1"></a>PAL_osPriorityNormal&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a6f32dbade90ba4bf593f475f51fb6535ac6ad927a77b4275e1da2373f810ee2af"></a>PAL_osPriorityAboveNormal&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a6f32dbade90ba4bf593f475f51fb6535a70d584591ab861e247ccfe94e55e35a2"></a>PAL_osPriorityHigh&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a6f32dbade90ba4bf593f475f51fb6535a3c2b8a244cae70bbf23a5a4d033df2ce"></a>PAL_osPriorityRealtime&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a6f32dbade90ba4bf593f475f51fb6535a94aea8f14f0bc89f7f4540416c08da3e"></a>PAL_osPriorityError&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a7ee094f262d03cbc97380f3fcd34c7d2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2">palTimerType</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Timers types supported in PAL. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a7ee094f262d03cbc97380f3fcd34c7d2a0f237f01e8978b2dc987ff3b5cde0f30"></a>palOsTimerOnce&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a7ee094f262d03cbc97380f3fcd34c7d2aadcc58d31964426d67650ca958fb80f9"></a>palOsTimerPeriodic&#160;</td><td class="fielddoc">
+<p>One shot timer </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2b4f475c89ea263557d6529c4d9a9353"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dbgPrintf </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>function</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>line</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Printf like function with prefix of function and line.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">function</td><td>name of the current function </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">line</td><td>line number to be printed </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">format</td><td>print format (just like printf)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the value of the valuePtr after the increment operation. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9b33d260ee1022f5b5f6a9dfc3363f2a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t pal_osAtomicIncrement </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>valuePtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>increment</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Perform an atomic increment for a signed32 bit value</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">valuePtr</td><td>the address of the value to increment </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname"></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ad6aaee432fd7ea5e35ab500a6278cc25"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osDelay </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>milliseconds</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait for a specified time period in milliseconds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">milliseconds</td><td>the amount of milliseconds to wait before proceeding.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a59e85747582417a1395ed0f9c140eb8a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_osKernelSysMilliSecTick </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>sysTicks</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Converts value from kernel system ticks to milliseconds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">sysTicks</td><td>the amount of kernel system ticks to convert into millieseconds</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>converted value in system ticks </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9800b8b9e057fe17e50c4259c809f898"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t pal_osKernelSysTick </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the RTOS kernel system timer counter. </p><dl class="section note"><dt>Note</dt><dd>this counter will wrap around very often (e.g. once every 42 sec for 100Mhz) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>the RTOS kernel system timer counter </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="af88551b6ca24a7a2bb6d94d423eb4401"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_osKernelSysTick64 </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the RTOS kernel system timer counter. </p><dl class="section return"><dt>Returns</dt><dd>the RTOS kernel system timer counter </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a087214ae87c20fd59f47fe3c96d0eefc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_osKernelSysTickFrequency </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the system tick frequency </p><dl class="section return"><dt>Returns</dt><dd>the system tick frequency </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a34375ee82619a4064849daccbdfbc966"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_osKernelSysTickMicroSec </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>microseconds</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Converts value from microseconds to kernel sys tick</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">microseconds</td><td>the amount of microseconds to convert into system ticks</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>converted value in system ticks </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab70d0be45514258874c0406c2040372c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMessageGet </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a>&#160;</td>
+          <td class="paramname"><em>messageQID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>timeout</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>messageValue</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get a Message or Wait for a Message from a Queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQID</td><td>the handle for the memory pool </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>timeout in milliseconds </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">event</td><td>the data to send</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - in case semaphore was not available but not due to time out. PAL_ERR_RTOS_TIMEOUT - no message arrived during the timeout period. PAL_ERR_RTOS_RESOURCE - no message received and there was no timeout </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a966daa5b0bd9282fbffa7c462da1c417"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMessagePut </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a>&#160;</td>
+          <td class="paramname"><em>messageQID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>info</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>timeout</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Put a Message to a Queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQID</td><td>the handle for the memory pool </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">info</td><td>the data to send </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>timeout in milliseconds</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a0c7f0003e92b3494089966d53ab24a1b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMessageQueueCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>messageQSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *&#160;</td>
+          <td class="paramname"><em>messageQID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a message queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQSize</td><td>size of the message queue. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">memoryPoolID</td><td>holds the created memory pool ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when message queue created successfully. PAL_ERR_NO_MEMORY: no memory resource available to create message queue object. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="adba13212ec060092acdf6165e82be5b6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMessageQueueDestroy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *&#160;</td>
+          <td class="paramname"><em>messageQID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a message queue object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">messageQID</td><td>the handle for the message queue, in success:(*messageQID = NULL).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="af89aab14085207b1a0951f7aad24193c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMutexCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize Mutex object</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">mutexID</td><td>holds the created mutex ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when mutex created successfully. PAL_ERR_NO_MEMORY: no memory resource available to create mutex object. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a03f43d7e53435d89f316862b48b573c4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMutexDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a Mutex object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">mutexID</td><td>Mutex handle to delete, in success:(*mutexID = NULL).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when mutex deleted successfully. PAL_ERR_RTOS_RESOURCE - mutex already released. PAL_ERR_RTOS_PARAMETER - mutex id is invalid. PAL_ERR_RTOS_ISR - cannot be called from interrupt service routines. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>After this call the mutex_id is no longer valid and cannot be used. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1d976a616a5c850b2016b2b87d8b47cc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMutexRelease </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Release a Mutex that was obtained by osMutexWait.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">mutexID</td><td>the handle for the mutex </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="acda0974247325955719b23494d66c622"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMutexWait </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td>
+          <td class="paramname"><em>mutexID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait until a Mutex becomes available.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">mutexID</td><td>the handle for the mutex </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>the timeout for the waiting operation if the timeout expires before the semaphore is released and error will be returned from the function, PAL_RTOS_WAIT_FOREVER can be used.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - mutex not avaialbe but no time out set. PAL_ERR_RTOS_TIMEOUT - mutex was not available until timeout expired. PAL_ERR_RTOS_PARAMETER - mutex id is invalid PAL_ERR_RTOS_ISR - cannot be called from interrupt service routines </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a3a2b57685096d16a110ee38f7f29e099"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_osPoolAlloc </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Allocate a single memory block from a memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolID</td><td>the handle for the memory pool</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns a pointer to a single allocated memory from the pool or NULL in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5d20661cd387a172450a2fe12993687a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_osPoolCAlloc </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Allocate a single memory block from a memory pool and set memory block to zero.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolID</td><td>the handle for the memory pool</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns a pointer to a single allocated memory from the pool or NULL in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1245f053abb3fdb7ab2ceb5a2899e8c6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osPoolCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>blockSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>blockCount</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">blockSize</td><td>size of single block in bytes. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">blockCount</td><td>maximum number of blocks in memory pool. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">memoryPoolID</td><td>holds the created memory pool ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when memory pool created successfully. PAL_ERR_NO_MEMORY: no memory resource available to create memory pool object. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1c01464448f8d7bd95bf518d651484c6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osPoolDestroy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a memory pool object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">memoryPoolID</td><td>the handle for the memory pool, in success:(*memoryPoolID = NULL).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a79f4997069310aa7bbb6ae7995988dd7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osPoolFree </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>block</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Return an memoryPoolID memory block back to a specific memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolHandle</td><td>the handle for the memory pool </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">block</td><td>the block to free</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab8ab0f31bbf4258b7684d22e7725a9f8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pal_osReboot </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Initiates a system reboot </p>
+
+</div>
+</div>
+<a class="anchor" id="aaa7aee442a5c8cc274d3e52206984037"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osSemaphoreCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>count</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *&#160;</td>
+          <td class="paramname"><em>semaphoreID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a Semaphore object</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">count</td><td>number of available resources </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">semaphoreID</td><td>holds the created semaphore ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when semaphore created successfully. PAL_ERR_NO_MEMORY: no memory resource available to create semaphore object. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a45f071482f8669821b90264e0470b33d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osSemaphoreDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *&#160;</td>
+          <td class="paramname"><em>semaphoreID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a Semaphore object</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">semaphoreID</td><td>Semaphore handle to delete, in success:(*semaphoreID = NULL).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when semaphore deleted successfully. PAL_ERR_RTOS_RESOURCE - semaphore already released. PAL_ERR_RTOS_PARAMETER - semaphore id is invalid. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>After this call the semaphore_id is no longer valid and cannot be used. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a009d0c063119265f9c5c0c9bff379c14"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osSemaphoreRelease </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>&#160;</td>
+          <td class="paramname"><em>semaphoreID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Release a Semaphore token.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">semaphoreID</td><td>the handle for the semaphore</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa2d998744dbc9504bfe0358f85457fc4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osSemaphoreWait </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>&#160;</td>
+          <td class="paramname"><em>semaphoreID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>countersAvailable</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait until a Semaphore token becomes available.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">semaphoreID</td><td>the handle for the semaphore </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>the timeout for the waiting operation if the timeout expires before the semaphore is released and error will be returned from the function, PAL_RTOS_WAIT_FOREVER can be used. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">counteresAvailable</td><td>the number of semaphore available at the call if semaphore is available, if semaphore was not available (timeout/error) zero is returned. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and one of the following error codes in case of failure: PAL_ERR_RTOS_TIMEOUT - semaphore was not available until timeout expired. PAL_ERR_RTOS_PARAMETER - semaphore id is invalid. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2dae64d917f644982b893037adf562b4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osThreadCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a>&#160;</td>
+          <td class="paramname"><em>function</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>funcArgument</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a>&#160;</td>
+          <td class="paramname"><em>priority</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>stackSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>stackPtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a> *&#160;</td>
+          <td class="paramname"><em>store</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *&#160;</td>
+          <td class="paramname"><em>threadID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Creates and starts thread function.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">function</td><td>function pointer to the thread callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">funcArgument</td><td>argument for the thread function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">priority</td><td>priotity of the thread. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">stackSize</td><td>the stack size of the thread can NOT be 0. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">stackPtr</td><td>pointer to the thread's stack can NOT be NULL. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">store</td><td>pointer to thread's local sotre, can be NULL. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">threadID</td><td>holds the created thread ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when thread created successfully. PAL_ERR_RTOS_PRIORITY : the given priority already used before in the system.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Each thread MUST be with unique priority. </dd>
+<dd>
+When the priority of the created thread function is higher than the current running thread, the created thread function starts instantly and becomes the new running thread. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2993b8f6b5e8d7ccd6121dc18330e4be"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> pal_osThreadGetId </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get ID of the current thread </p><dl class="section return"><dt>Returns</dt><dd>the ID of the current thread - in case of error return PAL_MAX_UINT32 </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>for thread with Real Time priority the function will always return PAL_MAX_UINT32 </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac94f4efc4bad73969e57c8255c136a0d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_osThreadGetLocalStore </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the storage of current thread </p><dl class="section return"><dt>Returns</dt><dd>the storage of the current thread </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abcfa47b411929b33d5d9cfaaff28ce18"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osThreadTerminate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *&#160;</td>
+          <td class="paramname"><em>threadID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Terminates and free allocated data for the thread.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">threadID</td><td>thread ID to stop and terminate.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure PAL_ERR_RTOS_RESOURCE: if the thread ID is not correct. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa4da36fbbba744a14d1bdfe2a26d1a18"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osTimerCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a>&#160;</td>
+          <td class="paramname"><em>function</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>funcArgument</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a>&#160;</td>
+          <td class="paramname"><em>timerType</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *&#160;</td>
+          <td class="paramname"><em>timerID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Creates a Timer.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">function</td><td>function pointer to the timer callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">funcArgument</td><td>funcArgument for the timer callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerType</td><td>timer type to be created - (periodic or oneShot). </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">timerID</td><td>holds the created timer ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when timer created successfully. PAL_ERR_NO_MEMORY: no memory resource available to create timer object.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the timer function runs according to the platform resources of stack-size and priority. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac7ca6e7c3c229f4092c9df4b69e7dd59"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osTimerDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *&#160;</td>
+          <td class="paramname"><em>timerID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete the timer object</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">timerID</td><td>the handle for the timer to delete, in success:(*timerID = NULL).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when timer deleted successfully. PAL_ERR_RTOS_PARAMETER when timerID is incorrect. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6c60c9e433bc6005bac6b02d5aba7363"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osTimerStart </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a>&#160;</td>
+          <td class="paramname"><em>timerID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Start or restart a timer.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerID</td><td>the handle for the timer to start </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>the amount of time in milliseconds to set the timer to.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a94f4df594102e582cbd2114f6eebb57d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osTimerStop </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a>&#160;</td>
+          <td class="paramname"><em>timerID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Stop a timer. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerID</td><td>the handle for the timer to stop </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d4/d01/pal__rtos_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_rtos.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_rtos.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../d4/d01/pal__rtos_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef _PAL_RTOS_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define _PAL_RTOS_H</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../db/dcf/pal__macros_8h.html">pal_macros.h</a>&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d6/dc2/pal__types_8h.html">pal_types.h</a>&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#ad19aa2a408e848a5f86d897ab50500ec">   31</a></span>&#160;<span class="preprocessor">#define PAL_RTOS_WAIT_FOREVER PAL_MAX_UINT32</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">   34</a></span>&#160;<span class="keyword">typedef</span> uintptr_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a>;</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">   35</a></span>&#160;<span class="keyword">typedef</span> uintptr_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">   36</a></span>&#160;<span class="keyword">typedef</span> uintptr_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">   37</a></span>&#160;<span class="keyword">typedef</span> uintptr_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">   38</a></span>&#160;<span class="keyword">typedef</span> uintptr_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">   39</a></span>&#160;<span class="keyword">typedef</span> uintptr_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a>;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2">   42</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span>  <a class="code" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2">palTimerType</a> {</div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2a0f237f01e8978b2dc987ff3b5cde0f30">   43</a></span>&#160;    <a class="code" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2a0f237f01e8978b2dc987ff3b5cde0f30">palOsTimerOnce</a> = 0, </div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2aadcc58d31964426d67650ca958fb80f9">   44</a></span>&#160;    <a class="code" href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2aadcc58d31964426d67650ca958fb80f9">palOsTimerPeriodic</a> = 1 </div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;} <a class="code" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a>;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">   48</a></span>&#160;<span class="keyword">typedef</span> void(*<a class="code" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a>)(<span class="keywordtype">void</span> <span class="keyword">const</span> *funcArgument);</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">   51</a></span>&#160;<span class="keyword">typedef</span> void(*<a class="code" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a>)(<span class="keywordtype">void</span> <span class="keyword">const</span> *funcArgument); </div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535">   54</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span>    <a class="code" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535">pal_osPriority</a> {</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a62b0350b25146b93c57a71ce65bb017a">   55</a></span>&#160;    <a class="code" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a62b0350b25146b93c57a71ce65bb017a">PAL_osPriorityIdle</a> = -3,</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ab3b5b218f45b07de8153427c63273fec">   56</a></span>&#160;    <a class="code" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ab3b5b218f45b07de8153427c63273fec">PAL_osPriorityLow</a> = -2,</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a23fdf72acf5a9475ca4054d4e1a187a5">   57</a></span>&#160;    <a class="code" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a23fdf72acf5a9475ca4054d4e1a187a5">PAL_osPriorityBelowNormal</a> = -1,</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a897a2d3cf2fa39f82141535d0d4e51a1">   58</a></span>&#160;    <a class="code" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a897a2d3cf2fa39f82141535d0d4e51a1">PAL_osPriorityNormal</a> = 0,</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ac6ad927a77b4275e1da2373f810ee2af">   59</a></span>&#160;    <a class="code" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ac6ad927a77b4275e1da2373f810ee2af">PAL_osPriorityAboveNormal</a> = +1,</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a70d584591ab861e247ccfe94e55e35a2">   60</a></span>&#160;    <a class="code" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a70d584591ab861e247ccfe94e55e35a2">PAL_osPriorityHigh</a> = +2,</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a3c2b8a244cae70bbf23a5a4d033df2ce">   61</a></span>&#160;    <a class="code" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a3c2b8a244cae70bbf23a5a4d033df2ce">PAL_osPriorityRealtime</a> = +3,</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a94aea8f14f0bc89f7f4540416c08da3e">   62</a></span>&#160;    <a class="code" href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a94aea8f14f0bc89f7f4540416c08da3e">PAL_osPriorityError</a> = 0x84</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;} <a class="code" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a>; </div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="../../df/d48/structpal__thread_local_store.html">pal_threadLocalStore</a>{</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="../../df/d48/structpal__thread_local_store.html#abe68dca8335fc1c9e6da5359117625bc">   68</a></span>&#160;    <span class="keywordtype">void</span>* <a class="code" href="../../df/d48/structpal__thread_local_store.html#abe68dca8335fc1c9e6da5359117625bc">storeData</a>;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;} <a class="code" href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a>;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="comment">//------- system general functions</span></div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="../../d4/d01/pal__rtos_8h.html#ab8ab0f31bbf4258b7684d22e7725a9f8">pal_osReboot</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="comment">//------- system tick functions</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="comment"></span>uint32_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#a9800b8b9e057fe17e50c4259c809f898">pal_osKernelSysTick</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;uint64_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#af88551b6ca24a7a2bb6d94d423eb4401">pal_osKernelSysTick64</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;uint64_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#a34375ee82619a4064849daccbdfbc966">pal_osKernelSysTickMicroSec</a>(uint64_t microseconds);</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;uint64_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#a59e85747582417a1395ed0f9c140eb8a">pal_osKernelSysMilliSecTick</a>(uint64_t sysTicks);</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;uint64_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#a087214ae87c20fd59f47fe3c96d0eefc">pal_osKernelSysTickFrequency</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a2dae64d917f644982b893037adf562b4">pal_osThreadCreate</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a> <span class="keyword">function</span>, <span class="keywordtype">void</span>* funcArgument, <a class="code" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a> priority, uint32_t stackSize, uint32_t* stackPtr, <a class="code" href="../../df/d48/structpal__thread_local_store.html">palThreadLocalStore_t</a>* store, palThreadID_t* threadID);</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#abcfa47b411929b33d5d9cfaaff28ce18">pal_osThreadTerminate</a>(palThreadID_t* threadID);</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;palThreadID_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#a2993b8f6b5e8d7ccd6121dc18330e4be">pal_osThreadGetId</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="keywordtype">void</span>* <a class="code" href="../../d4/d01/pal__rtos_8h.html#ac94f4efc4bad73969e57c8255c136a0d">pal_osThreadGetLocalStore</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#ad6aaee432fd7ea5e35ab500a6278cc25">pal_osDelay</a>(uint32_t milliseconds);</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#aa4da36fbbba744a14d1bdfe2a26d1a18">pal_osTimerCreate</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a> <span class="keyword">function</span>, <span class="keywordtype">void</span>* funcArgument, <a class="code" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a> timerType, palTimerID_t* timerID);</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a6c60c9e433bc6005bac6b02d5aba7363">pal_osTimerStart</a>(palTimerID_t timerID, uint32_t millisec);</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a94f4df594102e582cbd2114f6eebb57d">pal_osTimerStop</a>(palTimerID_t timerID);</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#ac7ca6e7c3c229f4092c9df4b69e7dd59">pal_osTimerDelete</a>(palTimerID_t* timerID);</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#af89aab14085207b1a0951f7aad24193c">pal_osMutexCreate</a>(palMutexID_t* mutexID);</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#acda0974247325955719b23494d66c622">pal_osMutexWait</a>(palMutexID_t mutexID, uint32_t millisec);</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a1d976a616a5c850b2016b2b87d8b47cc">pal_osMutexRelease</a>(palMutexID_t mutexID);</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a03f43d7e53435d89f316862b48b573c4">pal_osMutexDelete</a>(palMutexID_t* mutexID);</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#aaa7aee442a5c8cc274d3e52206984037">pal_osSemaphoreCreate</a>(uint32_t count, palSemaphoreID_t* semaphoreID);</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#aa2d998744dbc9504bfe0358f85457fc4">pal_osSemaphoreWait</a>(palSemaphoreID_t semaphoreID, uint32_t millisec, int32_t* countersAvailable);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a009d0c063119265f9c5c0c9bff379c14">pal_osSemaphoreRelease</a>(palSemaphoreID_t semaphoreID);</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a45f071482f8669821b90264e0470b33d">pal_osSemaphoreDelete</a>(palSemaphoreID_t* semaphoreID);</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a1245f053abb3fdb7ab2ceb5a2899e8c6">pal_osPoolCreate</a>(uint32_t blockSize, uint32_t blockCount, palMemoryPoolID_t* memoryPoolID);</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;<span class="keywordtype">void</span>* <a class="code" href="../../d4/d01/pal__rtos_8h.html#a3a2b57685096d16a110ee38f7f29e099">pal_osPoolAlloc</a>(palMemoryPoolID_t memoryPoolID);</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;<span class="keywordtype">void</span>* <a class="code" href="../../d4/d01/pal__rtos_8h.html#a5d20661cd387a172450a2fe12993687a">pal_osPoolCAlloc</a>(palMemoryPoolID_t memoryPoolID);</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a79f4997069310aa7bbb6ae7995988dd7">pal_osPoolFree</a>(palMemoryPoolID_t memoryPoolID, <span class="keywordtype">void</span>* block);</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a1c01464448f8d7bd95bf518d651484c6">pal_osPoolDestroy</a>(palMemoryPoolID_t* memoryPoolID);</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a0c7f0003e92b3494089966d53ab24a1b">pal_osMessageQueueCreate</a>(uint32_t messageQSize, palMessageQID_t* messageQID);</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a966daa5b0bd9282fbffa7c462da1c417">pal_osMessagePut</a>(palMessageQID_t messageQID, uint32_t info, uint32_t timeout);</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#ab70d0be45514258874c0406c2040372c">pal_osMessageGet</a>(palMessageQID_t messageQID, uint32_t timeout, uint32_t* messageValue);</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d4/d01/pal__rtos_8h.html#adba13212ec060092acdf6165e82be5b6">pal_osMessageQueueDestroy</a>(palMessageQID_t* messageQID);</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;int32_t <a class="code" href="../../d4/d01/pal__rtos_8h.html#a9b33d260ee1022f5b5f6a9dfc3363f2a">pal_osAtomicIncrement</a>(int32_t* valuePtr, int32_t increment);</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a2b4f475c89ea263557d6529c4d9a9353">dbgPrintf</a>( <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">function</span>, uint32_t line, <span class="keyword">const</span> <span class="keywordtype">char</span> * format, ... );</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="../../d4/d01/pal__rtos_8h.html#a2e5b95b90c72b6bdf62897efd58f98fb">  387</a></span>&#160;<span class="preprocessor">#define PAL_PRINTF( ARGS...) \</span></div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;<span class="preprocessor">        dbgPrintf(__FUNCTION__,__LINE__, ARGS);</span></div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;}</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;<span class="preprocessor">#endif //_PAL_RTOS_H</span></div><div class="ttc" id="pal__rtos_8h_html_a009d0c063119265f9c5c0c9bff379c14"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a009d0c063119265f9c5c0c9bff379c14">pal_osSemaphoreRelease</a></div><div class="ttdeci">palStatus_t pal_osSemaphoreRelease(palSemaphoreID_t semaphoreID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:205</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a9b33d260ee1022f5b5f6a9dfc3363f2a"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a9b33d260ee1022f5b5f6a9dfc3363f2a">pal_osAtomicIncrement</a></div><div class="ttdeci">int32_t pal_osAtomicIncrement(int32_t *valuePtr, int32_t increment)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:284</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a0a8206fc36c3dca549aed450f7777481"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a></div><div class="ttdeci">uintptr_t palSemaphoreID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:37</div></div>
+<div class="ttc" id="structpal__thread_local_store_html"><div class="ttname"><a href="../../df/d48/structpal__thread_local_store.html">pal_threadLocalStore</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:67</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a0c7f0003e92b3494089966d53ab24a1b"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a0c7f0003e92b3494089966d53ab24a1b">pal_osMessageQueueCreate</a></div><div class="ttdeci">palStatus_t pal_osMessageQueueCreate(uint32_t messageQSize, palMessageQID_t *messageQID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:256</div></div>
+<div class="ttc" id="pal__rtos_8h_html_ac7ca6e7c3c229f4092c9df4b69e7dd59"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#ac7ca6e7c3c229f4092c9df4b69e7dd59">pal_osTimerDelete</a></div><div class="ttdeci">palStatus_t pal_osTimerDelete(palTimerID_t *timerID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:157</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a1c01464448f8d7bd95bf518d651484c6"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a1c01464448f8d7bd95bf518d651484c6">pal_osPoolDestroy</a></div><div class="ttdeci">palStatus_t pal_osPoolDestroy(palMemoryPoolID_t *memoryPoolID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:249</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a9800b8b9e057fe17e50c4259c809f898"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a9800b8b9e057fe17e50c4259c809f898">pal_osKernelSysTick</a></div><div class="ttdeci">uint32_t pal_osKernelSysTick(void)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:31</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a966daa5b0bd9282fbffa7c462da1c417"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a966daa5b0bd9282fbffa7c462da1c417">pal_osMessagePut</a></div><div class="ttdeci">palStatus_t pal_osMessagePut(palMessageQID_t messageQID, uint32_t info, uint32_t timeout)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:263</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a2993b8f6b5e8d7ccd6121dc18330e4be"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a2993b8f6b5e8d7ccd6121dc18330e4be">pal_osThreadGetId</a></div><div class="ttdeci">palThreadID_t pal_osThreadGetId(void)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:114</div></div>
+<div class="ttc" id="pal__rtos_8h_html_af89aab14085207b1a0951f7aad24193c"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#af89aab14085207b1a0951f7aad24193c">pal_osMutexCreate</a></div><div class="ttdeci">palStatus_t pal_osMutexCreate(palMutexID_t *mutexID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:164</div></div>
+<div class="ttc" id="pal__rtos_8h_html_aa4da36fbbba744a14d1bdfe2a26d1a18"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#aa4da36fbbba744a14d1bdfe2a26d1a18">pal_osTimerCreate</a></div><div class="ttdeci">palStatus_t pal_osTimerCreate(palTimerFuncPtr function, void *funcArgument, palTimerType_t timerType, palTimerID_t *timerID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:136</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a9858103df451aaf98a8af08c2583b94a"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a></div><div class="ttdeci">enum palTimerType palTimerType_t</div><div class="ttdoc">Timers types supported in PAL. </div></div>
+<div class="ttc" id="pal__rtos_8h_html_aaa7aee442a5c8cc274d3e52206984037"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#aaa7aee442a5c8cc274d3e52206984037">pal_osSemaphoreCreate</a></div><div class="ttdeci">palStatus_t pal_osSemaphoreCreate(uint32_t count, palSemaphoreID_t *semaphoreID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:191</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a6c60c9e433bc6005bac6b02d5aba7363"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a6c60c9e433bc6005bac6b02d5aba7363">pal_osTimerStart</a></div><div class="ttdeci">palStatus_t pal_osTimerStart(palTimerID_t timerID, uint32_t millisec)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:143</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a6f32dbade90ba4bf593f475f51fb6535a70d584591ab861e247ccfe94e55e35a2"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a70d584591ab861e247ccfe94e55e35a2">PAL_osPriorityHigh</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:60</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a6f32dbade90ba4bf593f475f51fb6535a94aea8f14f0bc89f7f4540416c08da3e"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a94aea8f14f0bc89f7f4540416c08da3e">PAL_osPriorityError</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:62</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a21fd378211ce09c12c15c39ff579627b"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a></div><div class="ttdeci">void(* palTimerFuncPtr)(void const *funcArgument)</div><div class="ttdoc">PAL timer function prototype. </div><div class="ttdef"><b>Definition:</b> pal_rtos.h:48</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a6f32dbade90ba4bf593f475f51fb6535ab3b5b218f45b07de8153427c63273fec"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ab3b5b218f45b07de8153427c63273fec">PAL_osPriorityLow</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:56</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a6f32dbade90ba4bf593f475f51fb6535"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535">pal_osPriority</a></div><div class="ttdeci">pal_osPriority</div><div class="ttdoc">Available priorities in PAL implementation, each priority can appear only once. </div><div class="ttdef"><b>Definition:</b> pal_rtos.h:54</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a381fb3b26136f4983dcce371652fb20c"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a></div><div class="ttdeci">struct pal_threadLocalStore palThreadLocalStore_t</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a79f4997069310aa7bbb6ae7995988dd7"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a79f4997069310aa7bbb6ae7995988dd7">pal_osPoolFree</a></div><div class="ttdeci">palStatus_t pal_osPoolFree(palMemoryPoolID_t memoryPoolID, void *block)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:241</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a1245f053abb3fdb7ab2ceb5a2899e8c6"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a1245f053abb3fdb7ab2ceb5a2899e8c6">pal_osPoolCreate</a></div><div class="ttdeci">palStatus_t pal_osPoolCreate(uint32_t blockSize, uint32_t blockCount, palMemoryPoolID_t *memoryPoolID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:219</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a6f32dbade90ba4bf593f475f51fb6535a3c2b8a244cae70bbf23a5a4d033df2ce"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a3c2b8a244cae70bbf23a5a4d033df2ce">PAL_osPriorityRealtime</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:61</div></div>
+<div class="ttc" id="pal__rtos_8h_html_ac6b402eec0e5f2ab64c43abffd4d9901"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a></div><div class="ttdeci">uintptr_t palMutexID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:36</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a54696b00a498a3c4a1346030acd18853"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a></div><div class="ttdeci">void(* palThreadFuncPtr)(void const *funcArgument)</div><div class="ttdoc">PAL thread function prototype. </div><div class="ttdef"><b>Definition:</b> pal_rtos.h:51</div></div>
+<div class="ttc" id="pal__rtos_8h_html_acb4162ac097039734d15916d29880910"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a></div><div class="ttdeci">uintptr_t palMessageQID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:39</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a7ee094f262d03cbc97380f3fcd34c7d2aadcc58d31964426d67650ca958fb80f9"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2aadcc58d31964426d67650ca958fb80f9">palOsTimerPeriodic</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:44</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a5d20661cd387a172450a2fe12993687a"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a5d20661cd387a172450a2fe12993687a">pal_osPoolCAlloc</a></div><div class="ttdeci">void * pal_osPoolCAlloc(palMemoryPoolID_t memoryPoolID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:233</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a45f071482f8669821b90264e0470b33d"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a45f071482f8669821b90264e0470b33d">pal_osSemaphoreDelete</a></div><div class="ttdeci">palStatus_t pal_osSemaphoreDelete(palSemaphoreID_t *semaphoreID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:212</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a7ee094f262d03cbc97380f3fcd34c7d2a0f237f01e8978b2dc987ff3b5cde0f30"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2a0f237f01e8978b2dc987ff3b5cde0f30">palOsTimerOnce</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:43</div></div>
+<div class="ttc" id="pal__rtos_8h_html_abcfa47b411929b33d5d9cfaaff28ce18"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#abcfa47b411929b33d5d9cfaaff28ce18">pal_osThreadTerminate</a></div><div class="ttdeci">palStatus_t pal_osThreadTerminate(palThreadID_t *threadID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:107</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a7ee094f262d03cbc97380f3fcd34c7d2"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2">palTimerType</a></div><div class="ttdeci">palTimerType</div><div class="ttdoc">Timers types supported in PAL. </div><div class="ttdef"><b>Definition:</b> pal_rtos.h:42</div></div>
+<div class="ttc" id="pal__rtos_8h_html_ab8ab0f31bbf4258b7684d22e7725a9f8"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#ab8ab0f31bbf4258b7684d22e7725a9f8">pal_osReboot</a></div><div class="ttdeci">void pal_osReboot(void)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:26</div></div>
+<div class="ttc" id="pal__types_8h_html"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html">pal_types.h</a></div></div>
+<div class="ttc" id="pal__rtos_8h_html_a278568ee407204e02cbd783f612e55be"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a></div><div class="ttdeci">enum pal_osPriority palThreadPriority_t</div><div class="ttdoc">Available priorities in PAL implementation, each priority can appear only once. </div></div>
+<div class="ttc" id="pal__rtos_8h_html_a1d976a616a5c850b2016b2b87d8b47cc"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a1d976a616a5c850b2016b2b87d8b47cc">pal_osMutexRelease</a></div><div class="ttdeci">palStatus_t pal_osMutexRelease(palMutexID_t mutexID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:178</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a59e85747582417a1395ed0f9c140eb8a"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a59e85747582417a1395ed0f9c140eb8a">pal_osKernelSysMilliSecTick</a></div><div class="ttdeci">uint64_t pal_osKernelSysMilliSecTick(uint64_t sysTicks)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:68</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a3a2b57685096d16a110ee38f7f29e099"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a3a2b57685096d16a110ee38f7f29e099">pal_osPoolAlloc</a></div><div class="ttdeci">void * pal_osPoolAlloc(palMemoryPoolID_t memoryPoolID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:226</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a94f4df594102e582cbd2114f6eebb57d"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a94f4df594102e582cbd2114f6eebb57d">pal_osTimerStop</a></div><div class="ttdeci">palStatus_t pal_osTimerStop(palTimerID_t timerID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:150</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a2dae64d917f644982b893037adf562b4"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a2dae64d917f644982b893037adf562b4">pal_osThreadCreate</a></div><div class="ttdeci">palStatus_t pal_osThreadCreate(palThreadFuncPtr function, void *funcArgument, palThreadPriority_t priority, uint32_t stackSize, uint32_t *stackPtr, palThreadLocalStore_t *store, palThreadID_t *threadID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:82</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a73ab99198ebc6e6af72064739b05bdcb"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a></div><div class="ttdeci">uintptr_t palMemoryPoolID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:38</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a4b627efa48e79a6fbcafae87ae397985"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a></div><div class="ttdeci">uintptr_t palTimerID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:35</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a6f32dbade90ba4bf593f475f51fb6535ac6ad927a77b4275e1da2373f810ee2af"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ac6ad927a77b4275e1da2373f810ee2af">PAL_osPriorityAboveNormal</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:59</div></div>
+<div class="ttc" id="pal__macros_8h_html"><div class="ttname"><a href="../../db/dcf/pal__macros_8h.html">pal_macros.h</a></div></div>
+<div class="ttc" id="pal__rtos_8h_html_a34375ee82619a4064849daccbdfbc966"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a34375ee82619a4064849daccbdfbc966">pal_osKernelSysTickMicroSec</a></div><div class="ttdeci">uint64_t pal_osKernelSysTickMicroSec(uint64_t microseconds)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:61</div></div>
+<div class="ttc" id="pal__rtos_8h_html_af88551b6ca24a7a2bb6d94d423eb4401"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#af88551b6ca24a7a2bb6d94d423eb4401">pal_osKernelSysTick64</a></div><div class="ttdeci">uint64_t pal_osKernelSysTick64(void)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:39</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a2b4f475c89ea263557d6529c4d9a9353"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a2b4f475c89ea263557d6529c4d9a9353">dbgPrintf</a></div><div class="ttdeci">void dbgPrintf(const char *function, uint32_t line, const char *format,...)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:297</div></div>
+<div class="ttc" id="pal__rtos_8h_html_acda0974247325955719b23494d66c622"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#acda0974247325955719b23494d66c622">pal_osMutexWait</a></div><div class="ttdeci">palStatus_t pal_osMutexWait(palMutexID_t mutexID, uint32_t millisec)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:171</div></div>
+<div class="ttc" id="pal__rtos_8h_html_adba13212ec060092acdf6165e82be5b6"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#adba13212ec060092acdf6165e82be5b6">pal_osMessageQueueDestroy</a></div><div class="ttdeci">palStatus_t pal_osMessageQueueDestroy(palMessageQID_t *messageQID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:277</div></div>
+<div class="ttc" id="pal__rtos_8h_html_aa2d998744dbc9504bfe0358f85457fc4"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#aa2d998744dbc9504bfe0358f85457fc4">pal_osSemaphoreWait</a></div><div class="ttdeci">palStatus_t pal_osSemaphoreWait(palSemaphoreID_t semaphoreID, uint32_t millisec, int32_t *countersAvailable)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:198</div></div>
+<div class="ttc" id="pal__rtos_8h_html_ad6aaee432fd7ea5e35ab500a6278cc25"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#ad6aaee432fd7ea5e35ab500a6278cc25">pal_osDelay</a></div><div class="ttdeci">palStatus_t pal_osDelay(uint32_t milliseconds)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:128</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a6f32dbade90ba4bf593f475f51fb6535a897a2d3cf2fa39f82141535d0d4e51a1"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a897a2d3cf2fa39f82141535d0d4e51a1">PAL_osPriorityNormal</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:58</div></div>
+<div class="ttc" id="pal__rtos_8h_html_aa61aba50e0f2dba5c8571417c2bdd9a5"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a></div><div class="ttdeci">uintptr_t palThreadID_t</div><div class="ttdoc">Primitives IDs types declarations. </div><div class="ttdef"><b>Definition:</b> pal_rtos.h:34</div></div>
+<div class="ttc" id="pal__rtos_8h_html_ac94f4efc4bad73969e57c8255c136a0d"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#ac94f4efc4bad73969e57c8255c136a0d">pal_osThreadGetLocalStore</a></div><div class="ttdeci">void * pal_osThreadGetLocalStore(void)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:121</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a6f32dbade90ba4bf593f475f51fb6535a62b0350b25146b93c57a71ce65bb017a"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a62b0350b25146b93c57a71ce65bb017a">PAL_osPriorityIdle</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:55</div></div>
+<div class="ttc" id="pal__types_8h_html_a160277354e86b9aea01d7689ec26d88d"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a></div><div class="ttdeci">int32_t palStatus_t</div><div class="ttdef"><b>Definition:</b> pal_types.h:31</div></div>
+<div class="ttc" id="pal__rtos_8h_html_ab70d0be45514258874c0406c2040372c"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#ab70d0be45514258874c0406c2040372c">pal_osMessageGet</a></div><div class="ttdeci">palStatus_t pal_osMessageGet(palMessageQID_t messageQID, uint32_t timeout, uint32_t *messageValue)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:270</div></div>
+<div class="ttc" id="structpal__thread_local_store_html_abe68dca8335fc1c9e6da5359117625bc"><div class="ttname"><a href="../../df/d48/structpal__thread_local_store.html#abe68dca8335fc1c9e6da5359117625bc">pal_threadLocalStore::storeData</a></div><div class="ttdeci">void * storeData</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:68</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a087214ae87c20fd59f47fe3c96d0eefc"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a087214ae87c20fd59f47fe3c96d0eefc">pal_osKernelSysTickFrequency</a></div><div class="ttdeci">uint64_t pal_osKernelSysTickFrequency(void)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:75</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a03f43d7e53435d89f316862b48b573c4"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a03f43d7e53435d89f316862b48b573c4">pal_osMutexDelete</a></div><div class="ttdeci">palStatus_t pal_osMutexDelete(palMutexID_t *mutexID)</div><div class="ttdef"><b>Definition:</b> pal_rtos.c:185</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a6f32dbade90ba4bf593f475f51fb6535a23fdf72acf5a9475ca4054d4e1a187a5"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a23fdf72acf5a9475ca4054d4e1a187a5">PAL_osPriorityBelowNormal</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:57</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,273 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_rtos_test_main_mbedosClassic.cpp File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_rtos_test_main_mbedosClassic.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;mbed.h&quot;</code><br />
+<code>#include &quot;rtos.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6b71ffd718e2af00cebeb05560b44be7"><td class="memItemLeft" align="right" valign="top">DigitalOut&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7">led1</a> (LED1)</td></tr>
+<tr class="separator:a6b71ffd718e2af00cebeb05560b44be7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5543796fae8f0c3d5bfbd33f2389cb8"><td class="memItemLeft" align="right" valign="top">InterruptIn&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8">sw2</a> (SW2)</td></tr>
+<tr class="separator:af5543796fae8f0c3d5bfbd33f2389cb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21e1e181f00d9dc8dbb912650459bfde"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde">sw2_press</a> (void)</td></tr>
+<tr class="separator:a21e1e181f00d9dc8dbb912650459bfde"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a602cc5fb415f60615dbfa0643b3b3e26"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26">led_thread</a> (void const *argument)</td></tr>
+<tr class="separator:a602cc5fb415f60615dbfa0643b3b3e26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe6a59684384290b7f8710db5203944a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#afe6a59684384290b7f8710db5203944a">button_thread</a> (void const *argument)</td></tr>
+<tr class="separator:afe6a59684384290b7f8710db5203944a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58ec279183697abbd5d3efea3442d4e5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">UnityMain</a> (int argc, const char *argv[], void(*runAllTests)(void))</td></tr>
+<tr class="separator:a58ec279183697abbd5d3efea3442d4e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e9aa39842df82b3f5086f3215cc74fc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc">TEST_pal_rtos_GROUP_RUNNER</a> (void)</td></tr>
+<tr class="separator:a9e9aa39842df82b3f5086f3215cc74fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0f2228420376f4db7e1274f2b41667c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">main</a> (int argc, const char *argv[])</td></tr>
+<tr class="separator:ac0f2228420376f4db7e1274f2b41667c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ae8697e1a75bad4a53dd6d6ec81e486cb"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">button_pressed</a></td></tr>
+<tr class="separator:ae8697e1a75bad4a53dd6d6ec81e486cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d37e93ff0246ad7bf396650eaf84487"><td class="memItemLeft" align="right" valign="top">Thread *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487">thread2</a></td></tr>
+<tr class="separator:a7d37e93ff0246ad7bf396650eaf84487"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="afe6a59684384290b7f8710db5203944a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void button_thread </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6b71ffd718e2af00cebeb05560b44be7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">DigitalOut led1 </td>
+          <td>(</td>
+          <td class="paramtype">LED1&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a602cc5fb415f60615dbfa0643b3b3e26"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void led_thread </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac0f2228420376f4db7e1274f2b41667c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af5543796fae8f0c3d5bfbd33f2389cb8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">InterruptIn sw2 </td>
+          <td>(</td>
+          <td class="paramtype">SW2&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a21e1e181f00d9dc8dbb912650459bfde"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sw2_press </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9e9aa39842df82b3f5086f3215cc74fc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TEST_pal_rtos_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58ec279183697abbd5d3efea3442d4e5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UnityMain </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(void)&#160;</td>
+          <td class="paramname"><em>runAllTests</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ae8697e1a75bad4a53dd6d6ec81e486cb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t button_pressed</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7d37e93ff0246ad7bf396650eaf84487"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">Thread* thread2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d4/dc5/pal__plat__rtos_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1420 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl/mbedOS/RTOS/pal_plat_rtos.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="../../dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li><li class="navelem"><a class="el" href="../../dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html">mbedOS</a></li><li class="navelem"><a class="el" href="../../dir_1460475e8e667d8c97e1be97dbcd2231.html">RTOS</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_plat_rtos.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d6/dc2/pal__types_8h_source.html">pal_types.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d4/d01/pal__rtos_8h_source.html">pal_rtos.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d5/d59/pal__plat__rtos_8h_source.html">pal_plat_rtos.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../da/dfe/pal__errors_8h_source.html">pal_errors.h</a>&quot;</code><br />
+<code>#include &quot;stdlib.h&quot;</code><br />
+<code>#include &quot;string.h&quot;</code><br />
+<code>#include &quot;cmsis_os.h&quot;</code><br />
+<code>#include &quot;critical.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:aa25bb23dc9f40c91f9872c585e649723"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#aa25bb23dc9f40c91f9872c585e649723">PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE</a>(cmsisCode)&#160;&#160;&#160;((int32_t)(cmsisCode + <a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a>))</td></tr>
+<tr class="separator:aa25bb23dc9f40c91f9872c585e649723"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31d6d9a16b9891d7eb84e2b974c2c92b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a31d6d9a16b9891d7eb84e2b974c2c92b">PAL_RTOS_MEMORY_POOL_SIZE</a>(blockSize,  blockCount)&#160;&#160;&#160;(sizeof(uint32_t)*(3+((blockSize+3)/4)*(blockCount)))</td></tr>
+<tr class="memdesc:a31d6d9a16b9891d7eb84e2b974c2c92b"><td class="mdescLeft">&#160;</td><td class="mdescRight">the size of the memory to allocate was taken from CMSIS header (cmsis_os.h)  <a href="#a31d6d9a16b9891d7eb84e2b974c2c92b">More...</a><br /></td></tr>
+<tr class="separator:a31d6d9a16b9891d7eb84e2b974c2c92b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa1b17e5a20a5db09a3a3267f9a4191e0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#aa1b17e5a20a5db09a3a3267f9a4191e0">PAL_RTOS_MESSAGE_Q_SIZE</a>(messageQSize)&#160;&#160;&#160;(sizeof(uint32_t)*(4 + messageQSize))</td></tr>
+<tr class="memdesc:aa1b17e5a20a5db09a3a3267f9a4191e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">the size of the memory to allocate was taken from CMSIS header (cmsis_os.h)  <a href="#aa1b17e5a20a5db09a3a3267f9a4191e0">More...</a><br /></td></tr>
+<tr class="separator:aa1b17e5a20a5db09a3a3267f9a4191e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba1d833ce13b78f5648ec26cdd25f639"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#aba1d833ce13b78f5648ec26cdd25f639">PAL_TIMER_DATA_SIZE</a>&#160;&#160;&#160;6</td></tr>
+<tr class="separator:aba1d833ce13b78f5648ec26cdd25f639"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af12d673085039783ab1d2613eff7e4a4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#af12d673085039783ab1d2613eff7e4a4">PAL_MUTEX_DATA_SIZE</a>&#160;&#160;&#160;4</td></tr>
+<tr class="separator:af12d673085039783ab1d2613eff7e4a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66dcd5bd7ca661597fecabb1795fa393"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a66dcd5bd7ca661597fecabb1795fa393">PAL_SEMAPHORE_DATA_SIZE</a>&#160;&#160;&#160;2</td></tr>
+<tr class="separator:a66dcd5bd7ca661597fecabb1795fa393"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b3b50428d7ad199287a291137041c43"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a9b3b50428d7ad199287a291137041c43">PAL_NUM_OF_THREAD_INSTANCES</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a9b3b50428d7ad199287a291137041c43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78b1f63823e34bc82e272358701cbe67"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a78b1f63823e34bc82e272358701cbe67">PAL_TICK_TO_MILLI_FACTOR</a>&#160;&#160;&#160;1000</td></tr>
+<tr class="separator:a78b1f63823e34bc82e272358701cbe67"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a3b3cdd4235f3b1a26e63840b91c98e18"><td class="memItemLeft" align="right" valign="top">typedef struct palThreadFuncWrapper&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a3b3cdd4235f3b1a26e63840b91c98e18">palThreadFuncWrapper_t</a></td></tr>
+<tr class="separator:a3b3cdd4235f3b1a26e63840b91c98e18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06ecfc14d166863199ebfc4372d61127"><td class="memItemLeft" align="right" valign="top">typedef struct palThread&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a06ecfc14d166863199ebfc4372d61127">palThread_t</a></td></tr>
+<tr class="memdesc:a06ecfc14d166863199ebfc4372d61127"><td class="mdescLeft">&#160;</td><td class="mdescRight">Thread structure.  <a href="#a06ecfc14d166863199ebfc4372d61127">More...</a><br /></td></tr>
+<tr class="separator:a06ecfc14d166863199ebfc4372d61127"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2976c77ab047a577ddac4d82bfd40f10"><td class="memItemLeft" align="right" valign="top">typedef struct palTimer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a2976c77ab047a577ddac4d82bfd40f10">palTimer_t</a></td></tr>
+<tr class="memdesc:a2976c77ab047a577ddac4d82bfd40f10"><td class="mdescLeft">&#160;</td><td class="mdescRight">Timer structure.  <a href="#a2976c77ab047a577ddac4d82bfd40f10">More...</a><br /></td></tr>
+<tr class="separator:a2976c77ab047a577ddac4d82bfd40f10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a366960ed96b6cf998870481300a739d4"><td class="memItemLeft" align="right" valign="top">typedef struct palMutex&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a366960ed96b6cf998870481300a739d4">palMutex_t</a></td></tr>
+<tr class="memdesc:a366960ed96b6cf998870481300a739d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mutex structure.  <a href="#a366960ed96b6cf998870481300a739d4">More...</a><br /></td></tr>
+<tr class="separator:a366960ed96b6cf998870481300a739d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaab2b2c34911a85e67be94866be7e515"><td class="memItemLeft" align="right" valign="top">typedef struct palSemaphore&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#aaab2b2c34911a85e67be94866be7e515">palSemaphore_t</a></td></tr>
+<tr class="memdesc:aaab2b2c34911a85e67be94866be7e515"><td class="mdescLeft">&#160;</td><td class="mdescRight">Semaphore structure.  <a href="#aaab2b2c34911a85e67be94866be7e515">More...</a><br /></td></tr>
+<tr class="separator:aaab2b2c34911a85e67be94866be7e515"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa12596f9e3d06ce0b6fde07eb52d07a"><td class="memItemLeft" align="right" valign="top">typedef struct palMemPool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#afa12596f9e3d06ce0b6fde07eb52d07a">palMemoryPool_t</a></td></tr>
+<tr class="memdesc:afa12596f9e3d06ce0b6fde07eb52d07a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Memoey Pool structure.  <a href="#afa12596f9e3d06ce0b6fde07eb52d07a">More...</a><br /></td></tr>
+<tr class="separator:afa12596f9e3d06ce0b6fde07eb52d07a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a550ebbfa0932f76e30a372710bff8f60"><td class="memItemLeft" align="right" valign="top">typedef struct palMessageQ&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a550ebbfa0932f76e30a372710bff8f60">palMessageQ_t</a></td></tr>
+<tr class="memdesc:a550ebbfa0932f76e30a372710bff8f60"><td class="mdescLeft">&#160;</td><td class="mdescRight">Message Queue structure.  <a href="#a550ebbfa0932f76e30a372710bff8f60">More...</a><br /></td></tr>
+<tr class="separator:a550ebbfa0932f76e30a372710bff8f60"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a1b47d17e90b6a03e7bd1ec6a0d549b46"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a1b47d17e90b6a03e7bd1ec6a0d549b46">NVIC_SystemReset</a> (void)</td></tr>
+<tr class="separator:a1b47d17e90b6a03e7bd1ec6a0d549b46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abdb6ab5827d588b9c2e908beda4c3154"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#abdb6ab5827d588b9c2e908beda4c3154">pal_plat_osReboot</a> ()</td></tr>
+<tr class="separator:abdb6ab5827d588b9c2e908beda4c3154"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e7aaf20f2cad3b04061e1c3fd748c42"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a2e7aaf20f2cad3b04061e1c3fd748c42">pal_plat_RTOSInitialize</a> (void *opaqueContext)</td></tr>
+<tr class="separator:a2e7aaf20f2cad3b04061e1c3fd748c42"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a484abc75cf595862459d6ab21c7a0c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a8a484abc75cf595862459d6ab21c7a0c">pal_plat_RTOSDestroy</a> (void)</td></tr>
+<tr class="separator:a8a484abc75cf595862459d6ab21c7a0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a140b31a48ac23c909f1a94ad11b04aac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a140b31a48ac23c909f1a94ad11b04aac">pal_plat_osDelay</a> (uint32_t milliseconds)</td></tr>
+<tr class="separator:a140b31a48ac23c909f1a94ad11b04aac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae92f87b121a06e0062ee014025c0ba9e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#ae92f87b121a06e0062ee014025c0ba9e">pal_plat_osKernelSysTick</a> ()</td></tr>
+<tr class="separator:ae92f87b121a06e0062ee014025c0ba9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d18206974bdf17c48b97e2e16505f19"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a2d18206974bdf17c48b97e2e16505f19">pal_plat_osKernelSysTickMicroSec</a> (uint64_t microseconds)</td></tr>
+<tr class="separator:a2d18206974bdf17c48b97e2e16505f19"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a82eade9e7b100bd9dc9ab8312f98f827"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a82eade9e7b100bd9dc9ab8312f98f827">pal_plat_osKernelSysMilliSecTick</a> (uint64_t sysTicks)</td></tr>
+<tr class="separator:a82eade9e7b100bd9dc9ab8312f98f827"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:addc790764a23a3e16344bd830ebe01ef"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#addc790764a23a3e16344bd830ebe01ef">pal_plat_osKernelSysTickFrequency</a> ()</td></tr>
+<tr class="separator:addc790764a23a3e16344bd830ebe01ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c965e0fdfd80fc86c901cf2bde88c64"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a9c965e0fdfd80fc86c901cf2bde88c64">pal_plat_osThreadCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a> function, void *funcArgument, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a> priority, uint32_t stackSize, uint32_t *stackPtr, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a> *store, <a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *threadID)</td></tr>
+<tr class="separator:a9c965e0fdfd80fc86c901cf2bde88c64"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c42c35d3d7b375833a51b4670febe92"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a4c42c35d3d7b375833a51b4670febe92">pal_plat_osThreadGetId</a> ()</td></tr>
+<tr class="separator:a4c42c35d3d7b375833a51b4670febe92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3117f8911b3e83e27031f366aa652a4f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a3117f8911b3e83e27031f366aa652a4f">pal_plat_osThreadTerminate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *threadID)</td></tr>
+<tr class="separator:a3117f8911b3e83e27031f366aa652a4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aca6b1b2f34861cf8e3d2dcc076992270"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#aca6b1b2f34861cf8e3d2dcc076992270">pal_plat_osThreadGetLocalStore</a> ()</td></tr>
+<tr class="separator:aca6b1b2f34861cf8e3d2dcc076992270"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee15bcaba1ed33c264bc4c91c1dbb1cf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#aee15bcaba1ed33c264bc4c91c1dbb1cf">pal_plat_osTimerCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a> function, void *funcArgument, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a> timerType, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *timerID)</td></tr>
+<tr class="separator:aee15bcaba1ed33c264bc4c91c1dbb1cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a80f5ca578197088e4cf84042c9efc2d7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a80f5ca578197088e4cf84042c9efc2d7">pal_plat_osTimerStart</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> timerID, uint32_t millisec)</td></tr>
+<tr class="separator:a80f5ca578197088e4cf84042c9efc2d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f1fdb410c4d6ae382622ef4f1884808"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a2f1fdb410c4d6ae382622ef4f1884808">pal_plat_osTimerStop</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> timerID)</td></tr>
+<tr class="separator:a2f1fdb410c4d6ae382622ef4f1884808"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9723baa43780a1083f43d786fa53a73d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a9723baa43780a1083f43d786fa53a73d">pal_plat_osTimerDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *timerID)</td></tr>
+<tr class="separator:a9723baa43780a1083f43d786fa53a73d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2425f958ab7d58eff5c5b3183f40305"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#ae2425f958ab7d58eff5c5b3183f40305">pal_plat_osMutexCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *mutexID)</td></tr>
+<tr class="separator:ae2425f958ab7d58eff5c5b3183f40305"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aea4ad5224c43ff0fff2b77798d19748c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#aea4ad5224c43ff0fff2b77798d19748c">pal_plat_osMutexWait</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutexID, uint32_t millisec)</td></tr>
+<tr class="separator:aea4ad5224c43ff0fff2b77798d19748c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:add4dbca7b11365e7301db1425c9fdf4d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#add4dbca7b11365e7301db1425c9fdf4d">pal_plat_osMutexRelease</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutexID)</td></tr>
+<tr class="separator:add4dbca7b11365e7301db1425c9fdf4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a909f4ae03b0acef0b84609d9b76679b4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a909f4ae03b0acef0b84609d9b76679b4">pal_plat_osMutexDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *mutexID)</td></tr>
+<tr class="separator:a909f4ae03b0acef0b84609d9b76679b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e7b3c23b094270b4e013c4412f2d3b1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a6e7b3c23b094270b4e013c4412f2d3b1">pal_plat_osSemaphoreCreate</a> (uint32_t count, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *semaphoreID)</td></tr>
+<tr class="separator:a6e7b3c23b094270b4e013c4412f2d3b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac9231eef550eb7b62a89e7a34b62d014"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#ac9231eef550eb7b62a89e7a34b62d014">pal_plat_osSemaphoreWait</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphoreID, uint32_t millisec, int32_t *countersAvailable)</td></tr>
+<tr class="separator:ac9231eef550eb7b62a89e7a34b62d014"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a252f210ce8a502891821b5af24b09822"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a252f210ce8a502891821b5af24b09822">pal_plat_osSemaphoreRelease</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphoreID)</td></tr>
+<tr class="separator:a252f210ce8a502891821b5af24b09822"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab37f3153b73dc87ca609c4c2e1bf8d6a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#ab37f3153b73dc87ca609c4c2e1bf8d6a">pal_plat_osSemaphoreDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *semaphoreID)</td></tr>
+<tr class="separator:ab37f3153b73dc87ca609c4c2e1bf8d6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7a4fa20255fe38cf183f6c924419fe85"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a7a4fa20255fe38cf183f6c924419fe85">pal_plat_osPoolCreate</a> (uint32_t blockSize, uint32_t blockCount, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *memoryPoolID)</td></tr>
+<tr class="separator:a7a4fa20255fe38cf183f6c924419fe85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5938d16ea0c12594e8f8becd20acf3a7"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a5938d16ea0c12594e8f8becd20acf3a7">pal_plat_osPoolAlloc</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID)</td></tr>
+<tr class="separator:a5938d16ea0c12594e8f8becd20acf3a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8dff6b49f9798cdd4eed04f3dff30330"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a8dff6b49f9798cdd4eed04f3dff30330">pal_plat_osPoolCAlloc</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID)</td></tr>
+<tr class="separator:a8dff6b49f9798cdd4eed04f3dff30330"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a84e2f41a587335de053e0b7f8a4163c2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a84e2f41a587335de053e0b7f8a4163c2">pal_plat_osPoolFree</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID, void *block)</td></tr>
+<tr class="separator:a84e2f41a587335de053e0b7f8a4163c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33ca5b5e9d3a80594de4977924e6bc1b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a33ca5b5e9d3a80594de4977924e6bc1b">pal_plat_osPoolDestroy</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *memoryPoolID)</td></tr>
+<tr class="separator:a33ca5b5e9d3a80594de4977924e6bc1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad25c8f7cb22985b077e893be5bc27d48"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#ad25c8f7cb22985b077e893be5bc27d48">pal_plat_osMessageQueueCreate</a> (uint32_t messageQSize, <a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *messageQID)</td></tr>
+<tr class="separator:ad25c8f7cb22985b077e893be5bc27d48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa80549a557e50e0759991c6b11eb456a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#aa80549a557e50e0759991c6b11eb456a">pal_plat_osMessagePut</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> messageQID, uint32_t info, uint32_t timeout)</td></tr>
+<tr class="separator:aa80549a557e50e0759991c6b11eb456a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a67696b86a6116a82da7c26a433280e58"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a67696b86a6116a82da7c26a433280e58">pal_plat_osMessageGet</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> messageQID, uint32_t timeout, uint32_t *messageValue)</td></tr>
+<tr class="separator:a67696b86a6116a82da7c26a433280e58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e0e6dc9958a9efd9beb62493bc3f67a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a0e0e6dc9958a9efd9beb62493bc3f67a">pal_plat_osMessageQueueDestroy</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *messageQID)</td></tr>
+<tr class="separator:a0e0e6dc9958a9efd9beb62493bc3f67a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac62a5b36fc159e12670c44a12dc08beb"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#ac62a5b36fc159e12670c44a12dc08beb">pal_plat_osAtomicIncrement</a> (int32_t *valuePtr, int32_t increment)</td></tr>
+<tr class="separator:ac62a5b36fc159e12670c44a12dc08beb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="af12d673085039783ab1d2613eff7e4a4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MUTEX_DATA_SIZE&#160;&#160;&#160;4</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9b3b50428d7ad199287a291137041c43"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NUM_OF_THREAD_INSTANCES&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a31d6d9a16b9891d7eb84e2b974c2c92b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_RTOS_MEMORY_POOL_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">blockSize, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">blockCount&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td>&#160;&#160;&#160;(sizeof(uint32_t)*(3+((blockSize+3)/4)*(blockCount)))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>the size of the memory to allocate was taken from CMSIS header (cmsis_os.h) </p>
+
+</div>
+</div>
+<a class="anchor" id="aa1b17e5a20a5db09a3a3267f9a4191e0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_RTOS_MESSAGE_Q_SIZE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">messageQSize</td><td>)</td>
+          <td>&#160;&#160;&#160;(sizeof(uint32_t)*(4 + messageQSize))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>the size of the memory to allocate was taken from CMSIS header (cmsis_os.h) </p>
+
+</div>
+</div>
+<a class="anchor" id="aa25bb23dc9f40c91f9872c585e649723"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">cmsisCode</td><td>)</td>
+          <td>&#160;&#160;&#160;((int32_t)(cmsisCode + <a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a>))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a66dcd5bd7ca661597fecabb1795fa393"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_SEMAPHORE_DATA_SIZE&#160;&#160;&#160;2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a78b1f63823e34bc82e272358701cbe67"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_TICK_TO_MILLI_FACTOR&#160;&#160;&#160;1000</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aba1d833ce13b78f5648ec26cdd25f639"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_TIMER_DATA_SIZE&#160;&#160;&#160;6</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>This definitions should be under #ifdef for different CORTEX-X processors. The current vaules are for cortex-M these are the sizes of the internal data array in definitions arrays </p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="afa12596f9e3d06ce0b6fde07eb52d07a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct palMemPool <a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#afa12596f9e3d06ce0b6fde07eb52d07a">palMemoryPool_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Memoey Pool structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="a550ebbfa0932f76e30a372710bff8f60"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct palMessageQ <a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a550ebbfa0932f76e30a372710bff8f60">palMessageQ_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Message Queue structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="a366960ed96b6cf998870481300a739d4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct palMutex <a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a366960ed96b6cf998870481300a739d4">palMutex_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Mutex structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="aaab2b2c34911a85e67be94866be7e515"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct palSemaphore <a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#aaab2b2c34911a85e67be94866be7e515">palSemaphore_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Semaphore structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="a06ecfc14d166863199ebfc4372d61127"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct palThread  <a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a06ecfc14d166863199ebfc4372d61127">palThread_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Thread structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3b3cdd4235f3b1a26e63840b91c98e18"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct palThreadFuncWrapper <a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a3b3cdd4235f3b1a26e63840b91c98e18">palThreadFuncWrapper_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2976c77ab047a577ddac4d82bfd40f10"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct palTimer  <a class="el" href="../../d4/dc5/pal__plat__rtos_8c.html#a2976c77ab047a577ddac4d82bfd40f10">palTimer_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Timer structure. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a1b47d17e90b6a03e7bd1ec6a0d549b46"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void NVIC_SystemReset </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac62a5b36fc159e12670c44a12dc08beb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t pal_plat_osAtomicIncrement </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>valuePtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>increment</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Perform an atomic increment for a signed32 bit value.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">valuePtr</td><td>The address of the value to increment. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">increment</td><td>The number by which to increment.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The value of the valuePtr after the increment operation. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a140b31a48ac23c909f1a94ad11b04aac"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osDelay </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>milliseconds</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait for a specified period of time in milliseconds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">milliseconds</td><td>The number of milliseconds to wait before proceeding.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a82eade9e7b100bd9dc9ab8312f98f827"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_plat_osKernelSysMilliSecTick </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>sysTicks</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Convert the value from kernel system ticks to milliseconds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">sysTicks</td><td>The number of kernel system ticks to convert into millieseconds.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The converted value in system ticks. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ae92f87b121a06e0062ee014025c0ba9e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t pal_plat_osKernelSysTick </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the RTOS kernel system timer counter.</p>
+<dl class="section return"><dt>Returns</dt><dd>The RTOS kernel system timer counter.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>The required tick counter is the OS (platform) kernel system tick counter. </dd>
+<dd>
+This counter wraps around very often (for example, once every 42 sec for 100Mhz). </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="addc790764a23a3e16344bd830ebe01ef"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_plat_osKernelSysTickFrequency </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the system tick frequency. </p><dl class="section return"><dt>Returns</dt><dd>The system tick frequency. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2d18206974bdf17c48b97e2e16505f19"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_plat_osKernelSysTickMicroSec </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>microseconds</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Convert the value from microseconds to kernel sys ticks. This is the same as CMSIS macro osKernelSysTickMicroSec. </p>
+
+</div>
+</div>
+<a class="anchor" id="a67696b86a6116a82da7c26a433280e58"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMessageGet </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a>&#160;</td>
+          <td class="paramname"><em>messageQID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>timeout</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>messageValue</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get a message or wait for a message from a queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQID</td><td>The handle for the message queue. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>The timeout in milliseconds. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">messageValue</td><td>The data to send.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - Semaphore was not available but not due to timeout. PAL_ERR_RTOS_TIMEOUT - No message arrived during the timeout period. PAL_ERR_RTOS_RESOURCE - No message received and there was no timeout. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa80549a557e50e0759991c6b11eb456a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMessagePut </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a>&#160;</td>
+          <td class="paramname"><em>messageQID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>info</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>timeout</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Put a message to a queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQID</td><td>The handle for the message queue. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">info</td><td>The data to send. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>The timeout in milliseconds.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ad25c8f7cb22985b077e893be5bc27d48"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMessageQueueCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>messageQSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *&#160;</td>
+          <td class="paramname"><em>messageQID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a message queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQSize</td><td>The size of the message queue. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">messageQID</td><td>The ID of the created message queue, zero value indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the message queue was created successfully, a specific error in case of failure. PAL_ERR_NO_MEMORY: no memory resource available to create message queue object. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a0e0e6dc9958a9efd9beb62493bc3f67a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMessageQueueDestroy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *&#160;</td>
+          <td class="paramname"><em>messageQID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a message queue object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">messageQID</td><td>The handle for the message queue. In success, *messageQID = NULL.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ae2425f958ab7d58eff5c5b3183f40305"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMutexCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a mutex object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">mutexID</td><td>The created mutex ID handle, zero value indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the mutex was created successfully, a specific error in case of failure. PAL_ERR_NO_MEMORY: no memory resource available to create mutex object. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a909f4ae03b0acef0b84609d9b76679b4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMutexDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a mutex object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">mutexID</td><td>The ID of the mutex to delete. In success, *mutexID = NULL.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the mutex was deleted successfully, one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - Mutex already released. PAL_ERR_RTOS_PARAMETER - Mutex ID is invalid. PAL_ERR_RTOS_ISR - Cannot be called from interrupt service routines. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>After this call, mutex_id is no longer valid and cannot be used. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="add4dbca7b11365e7301db1425c9fdf4d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMutexRelease </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Release a mutex that was obtained by osMutexWait.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">mutexID</td><td>The handle for the mutex.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aea4ad5224c43ff0fff2b77798d19748c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMutexWait </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td>
+          <td class="paramname"><em>mutexID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait until a mutex becomes available.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">mutexID</td><td>The handle for the mutex. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>The timeout for the waiting operation if the timeout expires before the semaphore is released and an error is returned from the function.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - Mutex not available but no timeout set. PAL_ERR_RTOS_TIMEOUT - Mutex was not available until timeout expired. PAL_ERR_RTOS_PARAMETER - Mutex ID is invalid. PAL_ERR_RTOS_ISR - Cannot be called from interrupt service routines. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5938d16ea0c12594e8f8becd20acf3a7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_plat_osPoolAlloc </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Allocate a single memory block from a memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolID</td><td>The handle for the memory pool.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A pointer to a single allocated memory from the pool, NULL in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a8dff6b49f9798cdd4eed04f3dff30330"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_plat_osPoolCAlloc </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Allocate a single memory block from a memory pool and set memory block to zero.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolID</td><td>The handle for the memory pool.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A pointer to a single allocated memory from the pool, NULL in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a7a4fa20255fe38cf183f6c924419fe85"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osPoolCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>blockSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>blockCount</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">blockSize</td><td>The size of a single block in bytes. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">blockCount</td><td>The maximum number of blocks in the memory pool. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">memoryPoolID</td><td>The ID of the created memory pool, zero value indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the memory pool was created successfully, a specific error in case of failure. PAL_ERR_NO_MEMORY: no memory resource available to create memory pool object. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a33ca5b5e9d3a80594de4977924e6bc1b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osPoolDestroy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a memory pool object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">memoryPoolID</td><td>The handle for the memory pool. In success, *memoryPoolID = NULL.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a84e2f41a587335de053e0b7f8a4163c2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osPoolFree </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>block</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Return the memoryPoolID of the memory block back to a specific memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolID</td><td>The handle for the memory pool. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">block</td><td>The block to be freed.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abdb6ab5827d588b9c2e908beda4c3154"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pal_plat_osReboot </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Initiate a system reboot. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6e7b3c23b094270b4e013c4412f2d3b1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osSemaphoreCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>count</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *&#160;</td>
+          <td class="paramname"><em>semaphoreID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a semaphore object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">count</td><td>The number of available resources. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">semaphoreID</td><td>The ID of the created semaphore, zero value indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the semaphore was created successfully, a specific error in case of failure. PAL_ERR_NO_MEMORY: no memory resource available to create semaphore object. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab37f3153b73dc87ca609c4c2e1bf8d6a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osSemaphoreDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *&#160;</td>
+          <td class="paramname"><em>semaphoreID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a semaphore object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">semaphoreID</td><td>The ID of the semaphore to delete. In success, *semaphoreID = NULL.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the semaphore was deleted successfully, one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - Semaphore already released. PAL_ERR_RTOS_PARAMETER - Semaphore ID is invalid. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>After this call, the semaphore_id is no longer valid and cannot be used. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a252f210ce8a502891821b5af24b09822"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osSemaphoreRelease </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>&#160;</td>
+          <td class="paramname"><em>semaphoreID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Release a semaphore token.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">semaphoreID</td><td>The handle for the semaphore.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac9231eef550eb7b62a89e7a34b62d014"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osSemaphoreWait </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>&#160;</td>
+          <td class="paramname"><em>semaphoreID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>countersAvailable</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait until a semaphore token becomes available.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">semaphoreID</td><td>The handle for the semaphore. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>The timeout for the waiting operation if the timeout expires before the semaphore is released and an error is returned from the function. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">countersAvailable</td><td>The number of semaphores available, if semaphores are not available (timeout/error) zero is returned. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, one of the following error codes in case of failure: PAL_ERR_RTOS_TIMEOUT - Semaphore was not available until timeout expired. PAL_ERR_RTOS_PARAMETER - Semaphore ID is invalid. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9c965e0fdfd80fc86c901cf2bde88c64"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osThreadCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a>&#160;</td>
+          <td class="paramname"><em>function</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>funcArgument</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a>&#160;</td>
+          <td class="paramname"><em>priority</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>stackSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>stackPtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a> *&#160;</td>
+          <td class="paramname"><em>store</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *&#160;</td>
+          <td class="paramname"><em>threadID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and start a thread function.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">function</td><td>A function pointer to the thread callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">funcArgument</td><td>An argument for the thread function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">priority</td><td>The priority of the thread. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">stackSize</td><td>The stack size of the thread. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">stackPtr</td><td>A pointer to the thread's stack. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">store</td><td>A pointer to thread's local store, can be NULL. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">threadID</td><td>The created thread ID handle, zero indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The ID of the created thread, in case of error return zero. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Each thread MUST have a unique priority. </dd>
+<dd>
+When the priority of the created thread function is higher than the current running thread, the created thread function starts instantly and becomes the new running thread. </dd>
+<dd>
+the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4c42c35d3d7b375833a51b4670febe92"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> pal_plat_osThreadGetId </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the ID of the current thread. </p><dl class="section return"><dt>Returns</dt><dd>The ID of the current thread, in case of error return PAL_MAX_UINT32. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>For a thread with real time priority, the function always returns PAL_MAX_UINT32. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aca6b1b2f34861cf8e3d2dcc076992270"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_plat_osThreadGetLocalStore </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the storage of the current thread. </p><dl class="section return"><dt>Returns</dt><dd>The storage of the current thread. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a3117f8911b3e83e27031f366aa652a4f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osThreadTerminate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *&#160;</td>
+          <td class="paramname"><em>threadID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Terminate and free allocated data for the thread.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">threadID</td><td>The ID of the thread to stop and terminate.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aee15bcaba1ed33c264bc4c91c1dbb1cf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osTimerCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a>&#160;</td>
+          <td class="paramname"><em>function</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>funcArgument</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a>&#160;</td>
+          <td class="paramname"><em>timerType</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *&#160;</td>
+          <td class="paramname"><em>timerID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create a timer.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">function</td><td>A function pointer to the timer callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">funcArgument</td><td>An argument for the timer callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerType</td><td>The timer type to be created, periodic or oneShot. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">timerID</td><td>The ID of the created timer, zero value indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the timer was created successfully. A specific error in case of failure. PAL_ERR_NO_MEMORY: no memory resource available to create timer object.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the timer callback function runs according to the platform resources of stack-size and priority. </dd>
+<dd>
+the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9723baa43780a1083f43d786fa53a73d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osTimerDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *&#160;</td>
+          <td class="paramname"><em>timerID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete the timer object</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">timerID</td><td>The handle for the timer to delete. In success, *timerID = NULL.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the timer was deleted successfully, PAL_ERR_RTOS_PARAMETER when the timerID is incorrect. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a80f5ca578197088e4cf84042c9efc2d7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osTimerStart </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a>&#160;</td>
+          <td class="paramname"><em>timerID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Start or restart a timer.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerID</td><td>The handle for the timer to start. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>The time in milliseconds to set the timer to.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2f1fdb410c4d6ae382622ef4f1884808"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osTimerStop </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a>&#160;</td>
+          <td class="paramname"><em>timerID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Stop a timer.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerID</td><td>The handle for the timer to stop.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a8a484abc75cf595862459d6ab21c7a0c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pal_plat_RTOSDestroy </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>De-Initialize thread objects. </p>
+
+</div>
+</div>
+<a class="anchor" id="a2e7aaf20f2cad3b04061e1c3fd748c42"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_RTOSInitialize </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>opaqueContext</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Initialize all data structures (semaphores, mutexes, memory pools, message queues) at system initialization. In case of a failure in any of the initializations, the function returns with an error and stops the rest of the initializations. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">opaqueContext</td><td>The context passed to the initialization (not required for generic CMSIS, pass NULL in this case). </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, PAL_ERR_CREATION_FAILED in case of failure. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d5/d2a/pal__socket__test_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,479 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_socket_test.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_socket_test.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d9/d16/pal_8h_source.html">pal.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d17/pal__network_8h_source.html">pal_network.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d2c/pal__plat__network_8h_source.html">pal_plat_network.h</a>&quot;</code><br />
+<code>#include &quot;unity.h&quot;</code><br />
+<code>#include &quot;unity_fixture.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d0/d51/pal__test__utils_8h_source.html">pal_test_utils.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../df/d2a/pal__socket__test__utils_8h_source.html">pal_socket_test_utils.h</a>&quot;</code><br />
+<code>#include &quot;string.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:abc23815d68dafc619e2c2ba210d65bd0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#abc23815d68dafc619e2c2ba210d65bd0">PAL_NET_SUPPORT_LWIP</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:abc23815d68dafc619e2c2ba210d65bd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abbe7571a0fc631eb43561606f4d5bb0e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#abbe7571a0fc631eb43561606f4d5bb0e">PAL_NET_TEST_SERVER_NAME</a>&#160;&#160;&#160;&quot;e109180-lin.kfn.arm.com&quot;</td></tr>
+<tr class="separator:abbe7571a0fc631eb43561606f4d5bb0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0570e783c7412d25d0c33817da54c02f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#a0570e783c7412d25d0c33817da54c02f">PAL_NET_TEST_SERVER_IP</a>&#160;&#160;&#160;{10,45,48,190}</td></tr>
+<tr class="separator:a0570e783c7412d25d0c33817da54c02f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7175d943793d9a92ebe83d12f2a65063"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#a7175d943793d9a92ebe83d12f2a65063">PAL_NET_TEST_SERVER_IP_STRING</a>&#160;&#160;&#160;&quot;10.45.48.190&quot;</td></tr>
+<tr class="separator:a7175d943793d9a92ebe83d12f2a65063"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7c3cef32674c412f87617e87a194e0e3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#a7c3cef32674c412f87617e87a194e0e3">PAL_NET_TEST_SERVER_HTTP_PORT</a>&#160;&#160;&#160;8686</td></tr>
+<tr class="separator:a7c3cef32674c412f87617e87a194e0e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc63439a9af70c80b125accdc2afbb12"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#abc63439a9af70c80b125accdc2afbb12">PAL_NET_TEST_SERVER_UDP_PORT</a>&#160;&#160;&#160;8383</td></tr>
+<tr class="separator:abc63439a9af70c80b125accdc2afbb12"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab1873f5ba58eb802dd808f05a1101670"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#ab1873f5ba58eb802dd808f05a1101670">PAL_NET_TEST_INCOMING_PORT</a>&#160;&#160;&#160;8000</td></tr>
+<tr class="separator:ab1873f5ba58eb802dd808f05a1101670"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0010ea5741ae7db441ef09f96eef47be"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#a0010ea5741ae7db441ef09f96eef47be">PAL_TEST_BUFFER_SIZE</a>&#160;&#160;&#160;50</td></tr>
+<tr class="separator:a0010ea5741ae7db441ef09f96eef47be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ad324fc284dd938317109a9fc47dd1732"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#ad324fc284dd938317109a9fc47dd1732">TEST_GROUP</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>)</td></tr>
+<tr class="separator:ad324fc284dd938317109a9fc47dd1732"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad62b547b432124475c3f5a94d9befe6d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#ad62b547b432124475c3f5a94d9befe6d">socketCallback</a> ()</td></tr>
+<tr class="separator:ad62b547b432124475c3f5a94d9befe6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a26217052dc55731aa82231669a8cf0df"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#a26217052dc55731aa82231669a8cf0df">TEST_SETUP</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>)</td></tr>
+<tr class="separator:a26217052dc55731aa82231669a8cf0df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac307640c84843ab78607af150bcbe143"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#ac307640c84843ab78607af150bcbe143">TEST_TEAR_DOWN</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>)</td></tr>
+<tr class="separator:ac307640c84843ab78607af150bcbe143"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a89cecd4b07ef1acbb0b40c00189a0f36"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#a89cecd4b07ef1acbb0b40c00189a0f36">TEST</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>, socketUDPCreationOptionsTest)</td></tr>
+<tr class="separator:a89cecd4b07ef1acbb0b40c00189a0f36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a16068d3b8c2ae529cc46a5eb5b238f44"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#a16068d3b8c2ae529cc46a5eb5b238f44">TEST</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>, basicTCPclinetSendRecieve)</td></tr>
+<tr class="separator:a16068d3b8c2ae529cc46a5eb5b238f44"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a38479981768fb5d46c11768870af9d8e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#a38479981768fb5d46c11768870af9d8e">TEST</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>, basicUDPclinetSendRecieve)</td></tr>
+<tr class="separator:a38479981768fb5d46c11768870af9d8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad2dc56bae3cc44082b05728caf3a8948"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#ad2dc56bae3cc44082b05728caf3a8948">TEST</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>, basicSocketScenario3)</td></tr>
+<tr class="separator:ad2dc56bae3cc44082b05728caf3a8948"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab28ce473e377fbe30049cb41b31dfa4b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#ab28ce473e377fbe30049cb41b31dfa4b">TEST</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>, basicSocketScenario4)</td></tr>
+<tr class="separator:ab28ce473e377fbe30049cb41b31dfa4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5e8d34fc9aaaae9d9e2af143e1320e2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#af5e8d34fc9aaaae9d9e2af143e1320e2">TEST</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>, basicSocketScenario5)</td></tr>
+<tr class="separator:af5e8d34fc9aaaae9d9e2af143e1320e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abbfd14915bd054b23f91a485d4f8fb1e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#abbfd14915bd054b23f91a485d4f8fb1e">TEST</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>, tProvUDPTest)</td></tr>
+<tr class="separator:abbfd14915bd054b23f91a485d4f8fb1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a702871d3d9057fa4fc99031298fb425c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2a/pal__socket__test_8c.html#a702871d3d9057fa4fc99031298fb425c">g_networkInterface</a> = NULL</td></tr>
+<tr class="separator:a702871d3d9057fa4fc99031298fb425c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="abc23815d68dafc619e2c2ba210d65bd0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_SUPPORT_LWIP&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab1873f5ba58eb802dd808f05a1101670"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_TEST_INCOMING_PORT&#160;&#160;&#160;8000</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7c3cef32674c412f87617e87a194e0e3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_TEST_SERVER_HTTP_PORT&#160;&#160;&#160;8686</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0570e783c7412d25d0c33817da54c02f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_TEST_SERVER_IP&#160;&#160;&#160;{10,45,48,190}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7175d943793d9a92ebe83d12f2a65063"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_TEST_SERVER_IP_STRING&#160;&#160;&#160;&quot;10.45.48.190&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abbe7571a0fc631eb43561606f4d5bb0e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_TEST_SERVER_NAME&#160;&#160;&#160;&quot;e109180-lin.kfn.arm.com&quot;</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abc63439a9af70c80b125accdc2afbb12"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_TEST_SERVER_UDP_PORT&#160;&#160;&#160;8383</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0010ea5741ae7db441ef09f96eef47be"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_TEST_BUFFER_SIZE&#160;&#160;&#160;50</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ad62b547b432124475c3f5a94d9befe6d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void socketCallback </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a89cecd4b07ef1acbb0b40c00189a0f36"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">socketUDPCreationOptionsTest&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a16068d3b8c2ae529cc46a5eb5b238f44"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">basicTCPclinetSendRecieve&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a38479981768fb5d46c11768870af9d8e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">basicUDPclinetSendRecieve&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad2dc56bae3cc44082b05728caf3a8948"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">basicSocketScenario3&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab28ce473e377fbe30049cb41b31dfa4b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">basicSocketScenario4&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af5e8d34fc9aaaae9d9e2af143e1320e2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">basicSocketScenario5&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abbfd14915bd054b23f91a485d4f8fb1e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">tProvUDPTest&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad324fc284dd938317109a9fc47dd1732"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_GROUP </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a26217052dc55731aa82231669a8cf0df"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_SETUP </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac307640c84843ab78607af150bcbe143"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_TEAR_DOWN </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a702871d3d9057fa4fc99031298fb425c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* g_networkInterface = NULL</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d5/d59/pal__plat__rtos_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1153 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Platform-API/pal_plat_rtos.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="../../dir_21bbc5adf7d2637a4cb8a3cee979c96f.html">Platform-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_plat_rtos.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d4/d01/pal__rtos_8h_source.html">pal_rtos.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d2/d87/pal__configuration_8h_source.html">pal_configuration.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d6/dc2/pal__types_8h_source.html">pal_types.h</a>&quot;</code><br />
+</div>
+<p><a href="../../d5/d59/pal__plat__rtos_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a894db4d6fe636ef7a7ebf83d4334adbd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a894db4d6fe636ef7a7ebf83d4334adbd">pal_plat_osReboot</a> (void)</td></tr>
+<tr class="separator:a894db4d6fe636ef7a7ebf83d4334adbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e7aaf20f2cad3b04061e1c3fd748c42"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a2e7aaf20f2cad3b04061e1c3fd748c42">pal_plat_RTOSInitialize</a> (void *opaqueContext)</td></tr>
+<tr class="separator:a2e7aaf20f2cad3b04061e1c3fd748c42"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a484abc75cf595862459d6ab21c7a0c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a8a484abc75cf595862459d6ab21c7a0c">pal_plat_RTOSDestroy</a> (void)</td></tr>
+<tr class="separator:a8a484abc75cf595862459d6ab21c7a0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae92f87b121a06e0062ee014025c0ba9e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#ae92f87b121a06e0062ee014025c0ba9e">pal_plat_osKernelSysTick</a> ()</td></tr>
+<tr class="separator:ae92f87b121a06e0062ee014025c0ba9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad104e06e7b043305fdbfbc37e4ea2826"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#ad104e06e7b043305fdbfbc37e4ea2826">pal_plat_osKernelSysTick64</a> (void)</td></tr>
+<tr class="separator:ad104e06e7b043305fdbfbc37e4ea2826"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d18206974bdf17c48b97e2e16505f19"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a2d18206974bdf17c48b97e2e16505f19">pal_plat_osKernelSysTickMicroSec</a> (uint64_t microseconds)</td></tr>
+<tr class="separator:a2d18206974bdf17c48b97e2e16505f19"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a82eade9e7b100bd9dc9ab8312f98f827"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a82eade9e7b100bd9dc9ab8312f98f827">pal_plat_osKernelSysMilliSecTick</a> (uint64_t sysTicks)</td></tr>
+<tr class="separator:a82eade9e7b100bd9dc9ab8312f98f827"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aacd58e95c23ad1c8f39b8b12ed2d83dd"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#aacd58e95c23ad1c8f39b8b12ed2d83dd">pal_plat_osKernelSysTickFrequency</a> (void)</td></tr>
+<tr class="separator:aacd58e95c23ad1c8f39b8b12ed2d83dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c965e0fdfd80fc86c901cf2bde88c64"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a9c965e0fdfd80fc86c901cf2bde88c64">pal_plat_osThreadCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a> function, void *funcArgument, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a> priority, uint32_t stackSize, uint32_t *stackPtr, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a> *store, <a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *threadID)</td></tr>
+<tr class="separator:a9c965e0fdfd80fc86c901cf2bde88c64"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3117f8911b3e83e27031f366aa652a4f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a3117f8911b3e83e27031f366aa652a4f">pal_plat_osThreadTerminate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *threadID)</td></tr>
+<tr class="separator:a3117f8911b3e83e27031f366aa652a4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c42c35d3d7b375833a51b4670febe92"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a4c42c35d3d7b375833a51b4670febe92">pal_plat_osThreadGetId</a> ()</td></tr>
+<tr class="separator:a4c42c35d3d7b375833a51b4670febe92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aca6b1b2f34861cf8e3d2dcc076992270"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#aca6b1b2f34861cf8e3d2dcc076992270">pal_plat_osThreadGetLocalStore</a> ()</td></tr>
+<tr class="separator:aca6b1b2f34861cf8e3d2dcc076992270"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a140b31a48ac23c909f1a94ad11b04aac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a140b31a48ac23c909f1a94ad11b04aac">pal_plat_osDelay</a> (uint32_t milliseconds)</td></tr>
+<tr class="separator:a140b31a48ac23c909f1a94ad11b04aac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee15bcaba1ed33c264bc4c91c1dbb1cf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#aee15bcaba1ed33c264bc4c91c1dbb1cf">pal_plat_osTimerCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a> function, void *funcArgument, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a> timerType, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *timerID)</td></tr>
+<tr class="separator:aee15bcaba1ed33c264bc4c91c1dbb1cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a80f5ca578197088e4cf84042c9efc2d7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a80f5ca578197088e4cf84042c9efc2d7">pal_plat_osTimerStart</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> timerID, uint32_t millisec)</td></tr>
+<tr class="separator:a80f5ca578197088e4cf84042c9efc2d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f1fdb410c4d6ae382622ef4f1884808"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a2f1fdb410c4d6ae382622ef4f1884808">pal_plat_osTimerStop</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> timerID)</td></tr>
+<tr class="separator:a2f1fdb410c4d6ae382622ef4f1884808"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9723baa43780a1083f43d786fa53a73d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a9723baa43780a1083f43d786fa53a73d">pal_plat_osTimerDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *timerID)</td></tr>
+<tr class="separator:a9723baa43780a1083f43d786fa53a73d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2425f958ab7d58eff5c5b3183f40305"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#ae2425f958ab7d58eff5c5b3183f40305">pal_plat_osMutexCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *mutexID)</td></tr>
+<tr class="separator:ae2425f958ab7d58eff5c5b3183f40305"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aea4ad5224c43ff0fff2b77798d19748c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#aea4ad5224c43ff0fff2b77798d19748c">pal_plat_osMutexWait</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutexID, uint32_t millisec)</td></tr>
+<tr class="separator:aea4ad5224c43ff0fff2b77798d19748c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:add4dbca7b11365e7301db1425c9fdf4d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#add4dbca7b11365e7301db1425c9fdf4d">pal_plat_osMutexRelease</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutexID)</td></tr>
+<tr class="separator:add4dbca7b11365e7301db1425c9fdf4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a909f4ae03b0acef0b84609d9b76679b4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a909f4ae03b0acef0b84609d9b76679b4">pal_plat_osMutexDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *mutexID)</td></tr>
+<tr class="separator:a909f4ae03b0acef0b84609d9b76679b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e7b3c23b094270b4e013c4412f2d3b1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a6e7b3c23b094270b4e013c4412f2d3b1">pal_plat_osSemaphoreCreate</a> (uint32_t count, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *semaphoreID)</td></tr>
+<tr class="separator:a6e7b3c23b094270b4e013c4412f2d3b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac9231eef550eb7b62a89e7a34b62d014"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#ac9231eef550eb7b62a89e7a34b62d014">pal_plat_osSemaphoreWait</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphoreID, uint32_t millisec, int32_t *countersAvailable)</td></tr>
+<tr class="separator:ac9231eef550eb7b62a89e7a34b62d014"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a252f210ce8a502891821b5af24b09822"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a252f210ce8a502891821b5af24b09822">pal_plat_osSemaphoreRelease</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphoreID)</td></tr>
+<tr class="separator:a252f210ce8a502891821b5af24b09822"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab37f3153b73dc87ca609c4c2e1bf8d6a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#ab37f3153b73dc87ca609c4c2e1bf8d6a">pal_plat_osSemaphoreDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *semaphoreID)</td></tr>
+<tr class="separator:ab37f3153b73dc87ca609c4c2e1bf8d6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7a4fa20255fe38cf183f6c924419fe85"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a7a4fa20255fe38cf183f6c924419fe85">pal_plat_osPoolCreate</a> (uint32_t blockSize, uint32_t blockCount, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *memoryPoolID)</td></tr>
+<tr class="separator:a7a4fa20255fe38cf183f6c924419fe85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5938d16ea0c12594e8f8becd20acf3a7"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a5938d16ea0c12594e8f8becd20acf3a7">pal_plat_osPoolAlloc</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID)</td></tr>
+<tr class="separator:a5938d16ea0c12594e8f8becd20acf3a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8dff6b49f9798cdd4eed04f3dff30330"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a8dff6b49f9798cdd4eed04f3dff30330">pal_plat_osPoolCAlloc</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID)</td></tr>
+<tr class="separator:a8dff6b49f9798cdd4eed04f3dff30330"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a84e2f41a587335de053e0b7f8a4163c2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a84e2f41a587335de053e0b7f8a4163c2">pal_plat_osPoolFree</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID, void *block)</td></tr>
+<tr class="separator:a84e2f41a587335de053e0b7f8a4163c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33ca5b5e9d3a80594de4977924e6bc1b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a33ca5b5e9d3a80594de4977924e6bc1b">pal_plat_osPoolDestroy</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *memoryPoolID)</td></tr>
+<tr class="separator:a33ca5b5e9d3a80594de4977924e6bc1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad25c8f7cb22985b077e893be5bc27d48"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#ad25c8f7cb22985b077e893be5bc27d48">pal_plat_osMessageQueueCreate</a> (uint32_t messageQSize, <a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *messageQID)</td></tr>
+<tr class="separator:ad25c8f7cb22985b077e893be5bc27d48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa80549a557e50e0759991c6b11eb456a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#aa80549a557e50e0759991c6b11eb456a">pal_plat_osMessagePut</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> messageQID, uint32_t info, uint32_t timeout)</td></tr>
+<tr class="separator:aa80549a557e50e0759991c6b11eb456a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a67696b86a6116a82da7c26a433280e58"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a67696b86a6116a82da7c26a433280e58">pal_plat_osMessageGet</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> messageQID, uint32_t timeout, uint32_t *messageValue)</td></tr>
+<tr class="separator:a67696b86a6116a82da7c26a433280e58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e0e6dc9958a9efd9beb62493bc3f67a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#a0e0e6dc9958a9efd9beb62493bc3f67a">pal_plat_osMessageQueueDestroy</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *messageQID)</td></tr>
+<tr class="separator:a0e0e6dc9958a9efd9beb62493bc3f67a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac62a5b36fc159e12670c44a12dc08beb"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d59/pal__plat__rtos_8h.html#ac62a5b36fc159e12670c44a12dc08beb">pal_plat_osAtomicIncrement</a> (int32_t *valuePtr, int32_t increment)</td></tr>
+<tr class="separator:ac62a5b36fc159e12670c44a12dc08beb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac62a5b36fc159e12670c44a12dc08beb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t pal_plat_osAtomicIncrement </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>valuePtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>increment</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Perform an atomic increment for a signed32 bit value.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">valuePtr</td><td>The address of the value to increment. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">increment</td><td>The number by which to increment.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The value of the valuePtr after the increment operation. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a140b31a48ac23c909f1a94ad11b04aac"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osDelay </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>milliseconds</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait for a specified period of time in milliseconds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">milliseconds</td><td>The number of milliseconds to wait before proceeding.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a82eade9e7b100bd9dc9ab8312f98f827"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_plat_osKernelSysMilliSecTick </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>sysTicks</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Convert the value from kernel system ticks to milliseconds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">sysTicks</td><td>The number of kernel system ticks to convert into millieseconds.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The converted value in system ticks. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ae92f87b121a06e0062ee014025c0ba9e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t pal_plat_osKernelSysTick </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the RTOS kernel system timer counter.</p>
+<dl class="section return"><dt>Returns</dt><dd>The RTOS kernel system timer counter.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>The required tick counter is the OS (platform) kernel system tick counter. </dd>
+<dd>
+This counter wraps around very often (for example, once every 42 sec for 100Mhz). </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ad104e06e7b043305fdbfbc37e4ea2826"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_plat_osKernelSysTick64 </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the RTOS kernel system timer counter.</p>
+<dl class="section return"><dt>Returns</dt><dd>The RTOS kernel system timer counter.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>The required tick counter is the OS (platform) kernel system tick counter. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aacd58e95c23ad1c8f39b8b12ed2d83dd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_plat_osKernelSysTickFrequency </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the system tick frequency. </p><dl class="section return"><dt>Returns</dt><dd>The system tick frequency. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2d18206974bdf17c48b97e2e16505f19"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_plat_osKernelSysTickMicroSec </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>microseconds</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Convert the value from microseconds to kernel sys ticks. This is the same as CMSIS macro osKernelSysTickMicroSec. </p>
+
+</div>
+</div>
+<a class="anchor" id="a67696b86a6116a82da7c26a433280e58"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMessageGet </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a>&#160;</td>
+          <td class="paramname"><em>messageQID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>timeout</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>messageValue</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get a message or wait for a message from a queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQID</td><td>The handle for the message queue. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>The timeout in milliseconds. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">messageValue</td><td>The data to send.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - Semaphore was not available but not due to timeout. PAL_ERR_RTOS_TIMEOUT - No message arrived during the timeout period. PAL_ERR_RTOS_RESOURCE - No message received and there was no timeout. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa80549a557e50e0759991c6b11eb456a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMessagePut </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a>&#160;</td>
+          <td class="paramname"><em>messageQID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>info</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>timeout</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Put a message to a queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQID</td><td>The handle for the message queue. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">info</td><td>The data to send. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>The timeout in milliseconds.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ad25c8f7cb22985b077e893be5bc27d48"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMessageQueueCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>messageQSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *&#160;</td>
+          <td class="paramname"><em>messageQID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a message queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQSize</td><td>The size of the message queue. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">messageQID</td><td>The ID of the created message queue, zero value indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the message queue was created successfully, a specific error in case of failure. PAL_ERR_NO_MEMORY: no memory resource available to create message queue object. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a0e0e6dc9958a9efd9beb62493bc3f67a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMessageQueueDestroy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *&#160;</td>
+          <td class="paramname"><em>messageQID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a message queue object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">messageQID</td><td>The handle for the message queue. In success, *messageQID = NULL.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ae2425f958ab7d58eff5c5b3183f40305"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMutexCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a mutex object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">mutexID</td><td>The created mutex ID handle, zero value indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the mutex was created successfully, a specific error in case of failure. PAL_ERR_NO_MEMORY: no memory resource available to create mutex object. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a909f4ae03b0acef0b84609d9b76679b4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMutexDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a mutex object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">mutexID</td><td>The ID of the mutex to delete. In success, *mutexID = NULL.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the mutex was deleted successfully, one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - Mutex already released. PAL_ERR_RTOS_PARAMETER - Mutex ID is invalid. PAL_ERR_RTOS_ISR - Cannot be called from interrupt service routines. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>After this call, mutex_id is no longer valid and cannot be used. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="add4dbca7b11365e7301db1425c9fdf4d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMutexRelease </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Release a mutex that was obtained by osMutexWait.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">mutexID</td><td>The handle for the mutex.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aea4ad5224c43ff0fff2b77798d19748c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osMutexWait </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td>
+          <td class="paramname"><em>mutexID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait until a mutex becomes available.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">mutexID</td><td>The handle for the mutex. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>The timeout for the waiting operation if the timeout expires before the semaphore is released and an error is returned from the function.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - Mutex not available but no timeout set. PAL_ERR_RTOS_TIMEOUT - Mutex was not available until timeout expired. PAL_ERR_RTOS_PARAMETER - Mutex ID is invalid. PAL_ERR_RTOS_ISR - Cannot be called from interrupt service routines. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5938d16ea0c12594e8f8becd20acf3a7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_plat_osPoolAlloc </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Allocate a single memory block from a memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolID</td><td>The handle for the memory pool.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A pointer to a single allocated memory from the pool, NULL in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a8dff6b49f9798cdd4eed04f3dff30330"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_plat_osPoolCAlloc </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Allocate a single memory block from a memory pool and set memory block to zero.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolID</td><td>The handle for the memory pool.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>A pointer to a single allocated memory from the pool, NULL in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a7a4fa20255fe38cf183f6c924419fe85"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osPoolCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>blockSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>blockCount</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">blockSize</td><td>The size of a single block in bytes. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">blockCount</td><td>The maximum number of blocks in the memory pool. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">memoryPoolID</td><td>The ID of the created memory pool, zero value indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the memory pool was created successfully, a specific error in case of failure. PAL_ERR_NO_MEMORY: no memory resource available to create memory pool object. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a33ca5b5e9d3a80594de4977924e6bc1b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osPoolDestroy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a memory pool object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">memoryPoolID</td><td>The handle for the memory pool. In success, *memoryPoolID = NULL.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a84e2f41a587335de053e0b7f8a4163c2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osPoolFree </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>block</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Return the memoryPoolID of the memory block back to a specific memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolID</td><td>The handle for the memory pool. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">block</td><td>The block to be freed.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a894db4d6fe636ef7a7ebf83d4334adbd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pal_plat_osReboot </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Initiate a system reboot. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6e7b3c23b094270b4e013c4412f2d3b1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osSemaphoreCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>count</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *&#160;</td>
+          <td class="paramname"><em>semaphoreID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a semaphore object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">count</td><td>The number of available resources. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">semaphoreID</td><td>The ID of the created semaphore, zero value indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the semaphore was created successfully, a specific error in case of failure. PAL_ERR_NO_MEMORY: no memory resource available to create semaphore object. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab37f3153b73dc87ca609c4c2e1bf8d6a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osSemaphoreDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *&#160;</td>
+          <td class="paramname"><em>semaphoreID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a semaphore object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">semaphoreID</td><td>The ID of the semaphore to delete. In success, *semaphoreID = NULL.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the semaphore was deleted successfully, one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - Semaphore already released. PAL_ERR_RTOS_PARAMETER - Semaphore ID is invalid. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>After this call, the semaphore_id is no longer valid and cannot be used. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a252f210ce8a502891821b5af24b09822"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osSemaphoreRelease </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>&#160;</td>
+          <td class="paramname"><em>semaphoreID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Release a semaphore token.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">semaphoreID</td><td>The handle for the semaphore.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac9231eef550eb7b62a89e7a34b62d014"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osSemaphoreWait </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>&#160;</td>
+          <td class="paramname"><em>semaphoreID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>countersAvailable</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait until a semaphore token becomes available.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">semaphoreID</td><td>The handle for the semaphore. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>The timeout for the waiting operation if the timeout expires before the semaphore is released and an error is returned from the function. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">countersAvailable</td><td>The number of semaphores available, if semaphores are not available (timeout/error) zero is returned. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, one of the following error codes in case of failure: PAL_ERR_RTOS_TIMEOUT - Semaphore was not available until timeout expired. PAL_ERR_RTOS_PARAMETER - Semaphore ID is invalid. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9c965e0fdfd80fc86c901cf2bde88c64"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osThreadCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a>&#160;</td>
+          <td class="paramname"><em>function</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>funcArgument</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a>&#160;</td>
+          <td class="paramname"><em>priority</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>stackSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>stackPtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a> *&#160;</td>
+          <td class="paramname"><em>store</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *&#160;</td>
+          <td class="paramname"><em>threadID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and start a thread function.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">function</td><td>A function pointer to the thread callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">funcArgument</td><td>An argument for the thread function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">priority</td><td>The priority of the thread. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">stackSize</td><td>The stack size of the thread. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">stackPtr</td><td>A pointer to the thread's stack. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">store</td><td>A pointer to thread's local store, can be NULL. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">threadID</td><td>The created thread ID handle, zero indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The ID of the created thread, in case of error return zero. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Each thread MUST have a unique priority. </dd>
+<dd>
+When the priority of the created thread function is higher than the current running thread, the created thread function starts instantly and becomes the new running thread. </dd>
+<dd>
+the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4c42c35d3d7b375833a51b4670febe92"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> pal_plat_osThreadGetId </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the ID of the current thread. </p><dl class="section return"><dt>Returns</dt><dd>The ID of the current thread, in case of error return PAL_MAX_UINT32. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>For a thread with real time priority, the function always returns PAL_MAX_UINT32. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aca6b1b2f34861cf8e3d2dcc076992270"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_plat_osThreadGetLocalStore </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the storage of the current thread. </p><dl class="section return"><dt>Returns</dt><dd>The storage of the current thread. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a3117f8911b3e83e27031f366aa652a4f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osThreadTerminate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *&#160;</td>
+          <td class="paramname"><em>threadID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Terminate and free allocated data for the thread.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">threadID</td><td>The ID of the thread to stop and terminate.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aee15bcaba1ed33c264bc4c91c1dbb1cf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osTimerCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a>&#160;</td>
+          <td class="paramname"><em>function</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>funcArgument</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a>&#160;</td>
+          <td class="paramname"><em>timerType</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *&#160;</td>
+          <td class="paramname"><em>timerID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create a timer.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">function</td><td>A function pointer to the timer callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">funcArgument</td><td>An argument for the timer callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerType</td><td>The timer type to be created, periodic or oneShot. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">timerID</td><td>The ID of the created timer, zero value indicates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the timer was created successfully. A specific error in case of failure. PAL_ERR_NO_MEMORY: no memory resource available to create timer object.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the timer callback function runs according to the platform resources of stack-size and priority. </dd>
+<dd>
+the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9723baa43780a1083f43d786fa53a73d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osTimerDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *&#160;</td>
+          <td class="paramname"><em>timerID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete the timer object</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">timerID</td><td>The handle for the timer to delete. In success, *timerID = NULL.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when the timer was deleted successfully, PAL_ERR_RTOS_PARAMETER when the timerID is incorrect. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a80f5ca578197088e4cf84042c9efc2d7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osTimerStart </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a>&#160;</td>
+          <td class="paramname"><em>timerID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Start or restart a timer.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerID</td><td>The handle for the timer to start. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>The time in milliseconds to set the timer to.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2f1fdb410c4d6ae382622ef4f1884808"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_osTimerStop </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a>&#160;</td>
+          <td class="paramname"><em>timerID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Stop a timer.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerID</td><td>The handle for the timer to stop.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, a negative value indicating a specific error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a8a484abc75cf595862459d6ab21c7a0c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pal_plat_RTOSDestroy </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>De-Initialize thread objects. </p>
+
+</div>
+</div>
+<a class="anchor" id="a2e7aaf20f2cad3b04061e1c3fd748c42"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_RTOSInitialize </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>opaqueContext</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Initialize all data structures (semaphores, mutexes, memory pools, message queues) at system initialization. In case of a failure in any of the initializations, the function returns with an error and stops the rest of the initializations. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">opaqueContext</td><td>The context passed to the initialization (not required for generic CMSIS, pass NULL in this case). </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success, PAL_ERR_CREATION_FAILED in case of failure. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d5/d59/pal__plat__rtos_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Platform-API/pal_plat_rtos.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="../../dir_21bbc5adf7d2637a4cb8a3cee979c96f.html">Platform-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_plat_rtos.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../d5/d59/pal__plat__rtos_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef _PAL_PLAT_RTOS_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define _PAL_PLAT_RTOS_H</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d4/d01/pal__rtos_8h.html">pal_rtos.h</a>&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d2/d87/pal__configuration_8h.html">pal_configuration.h</a>&quot;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d6/dc2/pal__types_8h.html">pal_types.h</a>&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#if PAL_UNIQUE_THREAD_PRIORITY</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="keyword">extern</span> uint8_t g_palThreadPriorities[<a class="code" href="../../d2/d87/pal__configuration_8h.html#abb1ceb83ff6a709614d1394e7e39391d">PAL_MAX_NUMBER_OF_THREADS</a>];</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#define PRIORYT_INDEX_OFFSET 3</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#endif //PAL_UNIQUE_THREAD_PRIORITY</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a894db4d6fe636ef7a7ebf83d4334adbd">pal_plat_osReboot</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a2e7aaf20f2cad3b04061e1c3fd748c42">pal_plat_RTOSInitialize</a>(<span class="keywordtype">void</span>* opaqueContext);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a8a484abc75cf595862459d6ab21c7a0c">pal_plat_RTOSDestroy</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;uint32_t <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#ae92f87b121a06e0062ee014025c0ba9e">pal_plat_osKernelSysTick</a>();</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;uint64_t <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#ad104e06e7b043305fdbfbc37e4ea2826">pal_plat_osKernelSysTick64</a>(<span class="keywordtype">void</span>); <span class="comment">// optional API - not part of original CMSIS API.</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;uint64_t <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a2d18206974bdf17c48b97e2e16505f19">pal_plat_osKernelSysTickMicroSec</a>(uint64_t microseconds);</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;uint64_t <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a82eade9e7b100bd9dc9ab8312f98f827">pal_plat_osKernelSysMilliSecTick</a>(uint64_t sysTicks);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;uint64_t <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#aacd58e95c23ad1c8f39b8b12ed2d83dd">pal_plat_osKernelSysTickFrequency</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a9c965e0fdfd80fc86c901cf2bde88c64">pal_plat_osThreadCreate</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a> <span class="keyword">function</span>, <span class="keywordtype">void</span>* funcArgument, <a class="code" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a> priority, uint32_t stackSize, uint32_t* stackPtr, <a class="code" href="../../df/d48/structpal__thread_local_store.html">palThreadLocalStore_t</a>* store, <a class="code" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a>* threadID);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a3117f8911b3e83e27031f366aa652a4f">pal_plat_osThreadTerminate</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a>* threadID);</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<a class="code" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a4c42c35d3d7b375833a51b4670febe92">pal_plat_osThreadGetId</a>();</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="keywordtype">void</span>* <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#aca6b1b2f34861cf8e3d2dcc076992270">pal_plat_osThreadGetLocalStore</a>();</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a140b31a48ac23c909f1a94ad11b04aac">pal_plat_osDelay</a>(uint32_t milliseconds);</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#aee15bcaba1ed33c264bc4c91c1dbb1cf">pal_plat_osTimerCreate</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a> <span class="keyword">function</span>, <span class="keywordtype">void</span>* funcArgument, <a class="code" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a> timerType, <a class="code" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a>* timerID);</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a80f5ca578197088e4cf84042c9efc2d7">pal_plat_osTimerStart</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> timerID, uint32_t millisec);</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a2f1fdb410c4d6ae382622ef4f1884808">pal_plat_osTimerStop</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> timerID);</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a9723baa43780a1083f43d786fa53a73d">pal_plat_osTimerDelete</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a>* timerID);</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#ae2425f958ab7d58eff5c5b3183f40305">pal_plat_osMutexCreate</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>* mutexID);</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#aea4ad5224c43ff0fff2b77798d19748c">pal_plat_osMutexWait</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutexID, uint32_t millisec);</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#add4dbca7b11365e7301db1425c9fdf4d">pal_plat_osMutexRelease</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutexID);</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a909f4ae03b0acef0b84609d9b76679b4">pal_plat_osMutexDelete</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>* mutexID);</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a6e7b3c23b094270b4e013c4412f2d3b1">pal_plat_osSemaphoreCreate</a>(uint32_t count, <a class="code" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>* semaphoreID);</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#ac9231eef550eb7b62a89e7a34b62d014">pal_plat_osSemaphoreWait</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphoreID, uint32_t millisec, int32_t* countersAvailable);</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a252f210ce8a502891821b5af24b09822">pal_plat_osSemaphoreRelease</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphoreID);</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#ab37f3153b73dc87ca609c4c2e1bf8d6a">pal_plat_osSemaphoreDelete</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>* semaphoreID);</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a7a4fa20255fe38cf183f6c924419fe85">pal_plat_osPoolCreate</a>(uint32_t blockSize, uint32_t blockCount, <a class="code" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>* memoryPoolID);</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;<span class="keywordtype">void</span>* <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a5938d16ea0c12594e8f8becd20acf3a7">pal_plat_osPoolAlloc</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID);</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;<span class="keywordtype">void</span>* <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a8dff6b49f9798cdd4eed04f3dff30330">pal_plat_osPoolCAlloc</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID);</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a84e2f41a587335de053e0b7f8a4163c2">pal_plat_osPoolFree</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID, <span class="keywordtype">void</span>* block);</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a33ca5b5e9d3a80594de4977924e6bc1b">pal_plat_osPoolDestroy</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>* memoryPoolID);</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#ad25c8f7cb22985b077e893be5bc27d48">pal_plat_osMessageQueueCreate</a>(uint32_t messageQSize, <a class="code" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a>* messageQID);</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#aa80549a557e50e0759991c6b11eb456a">pal_plat_osMessagePut</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> messageQID, uint32_t info, uint32_t timeout);</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a67696b86a6116a82da7c26a433280e58">pal_plat_osMessageGet</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> messageQID, uint32_t timeout, uint32_t* messageValue);</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#a0e0e6dc9958a9efd9beb62493bc3f67a">pal_plat_osMessageQueueDestroy</a>(<a class="code" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a>* messageQID);</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;int32_t <a class="code" href="../../d5/d59/pal__plat__rtos_8h.html#ac62a5b36fc159e12670c44a12dc08beb">pal_plat_osAtomicIncrement</a>(int32_t* valuePtr, int32_t increment);</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;<span class="preprocessor">#ifdef DEBUG</span></div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;<span class="preprocessor">#include &quot;stdio.h&quot;</span></div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;<span class="preprocessor">#define pal_plat_printf(ARGS...) printf(ARGS)</span></div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;<span class="preprocessor">#define pal_plat_vprintf(FORMAT,LIST) vprintf(FORMAT,LIST)  </span></div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;}</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;<span class="preprocessor">#endif //_PAL_COMMON_H</span></div><div class="ttc" id="pal__plat__rtos_8h_html_a84e2f41a587335de053e0b7f8a4163c2"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a84e2f41a587335de053e0b7f8a4163c2">pal_plat_osPoolFree</a></div><div class="ttdeci">palStatus_t pal_plat_osPoolFree(palMemoryPoolID_t memoryPoolID, void *block)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:795</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_ab37f3153b73dc87ca609c4c2e1bf8d6a"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#ab37f3153b73dc87ca609c4c2e1bf8d6a">pal_plat_osSemaphoreDelete</a></div><div class="ttdeci">palStatus_t pal_plat_osSemaphoreDelete(palSemaphoreID_t *semaphoreID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:686</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a0a8206fc36c3dca549aed450f7777481"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a></div><div class="ttdeci">uintptr_t palSemaphoreID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:37</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a894db4d6fe636ef7a7ebf83d4334adbd"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a894db4d6fe636ef7a7ebf83d4334adbd">pal_plat_osReboot</a></div><div class="ttdeci">void pal_plat_osReboot(void)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:181</div></div>
+<div class="ttc" id="structpal__thread_local_store_html"><div class="ttname"><a href="../../df/d48/structpal__thread_local_store.html">pal_threadLocalStore</a></div><div class="ttdef"><b>Definition:</b> pal_rtos.h:67</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_ad104e06e7b043305fdbfbc37e4ea2826"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#ad104e06e7b043305fdbfbc37e4ea2826">pal_plat_osKernelSysTick64</a></div><div class="ttdeci">uint64_t pal_plat_osKernelSysTick64(void)</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a80f5ca578197088e4cf84042c9efc2d7"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a80f5ca578197088e4cf84042c9efc2d7">pal_plat_osTimerStart</a></div><div class="ttdeci">palStatus_t pal_plat_osTimerStart(palTimerID_t timerID, uint32_t millisec)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:411</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_aca6b1b2f34861cf8e3d2dcc076992270"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#aca6b1b2f34861cf8e3d2dcc076992270">pal_plat_osThreadGetLocalStore</a></div><div class="ttdeci">void * pal_plat_osThreadGetLocalStore()</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:357</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a2d18206974bdf17c48b97e2e16505f19"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a2d18206974bdf17c48b97e2e16505f19">pal_plat_osKernelSysTickMicroSec</a></div><div class="ttdeci">uint64_t pal_plat_osKernelSysTickMicroSec(uint64_t microseconds)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:240</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a6e7b3c23b094270b4e013c4412f2d3b1"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a6e7b3c23b094270b4e013c4412f2d3b1">pal_plat_osSemaphoreCreate</a></div><div class="ttdeci">palStatus_t pal_plat_osSemaphoreCreate(uint32_t count, palSemaphoreID_t *semaphoreID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:603</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_ac9231eef550eb7b62a89e7a34b62d014"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#ac9231eef550eb7b62a89e7a34b62d014">pal_plat_osSemaphoreWait</a></div><div class="ttdeci">palStatus_t pal_plat_osSemaphoreWait(palSemaphoreID_t semaphoreID, uint32_t millisec, int32_t *countersAvailable)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:638</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a9858103df451aaf98a8af08c2583b94a"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a></div><div class="ttdeci">enum palTimerType palTimerType_t</div><div class="ttdoc">Timers types supported in PAL. </div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_aee15bcaba1ed33c264bc4c91c1dbb1cf"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#aee15bcaba1ed33c264bc4c91c1dbb1cf">pal_plat_osTimerCreate</a></div><div class="ttdeci">palStatus_t pal_plat_osTimerCreate(palTimerFuncPtr function, void *funcArgument, palTimerType_t timerType, palTimerID_t *timerID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:374</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a8a484abc75cf595862459d6ab21c7a0c"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a8a484abc75cf595862459d6ab21c7a0c">pal_plat_RTOSDestroy</a></div><div class="ttdeci">void pal_plat_RTOSDestroy(void)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:206</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a8dff6b49f9798cdd4eed04f3dff30330"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a8dff6b49f9798cdd4eed04f3dff30330">pal_plat_osPoolCAlloc</a></div><div class="ttdeci">void * pal_plat_osPoolCAlloc(palMemoryPoolID_t memoryPoolID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:779</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_ac62a5b36fc159e12670c44a12dc08beb"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#ac62a5b36fc159e12670c44a12dc08beb">pal_plat_osAtomicIncrement</a></div><div class="ttdeci">int32_t pal_plat_osAtomicIncrement(int32_t *valuePtr, int32_t increment)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:965</div></div>
+<div class="ttc" id="pal__configuration_8h_html"><div class="ttname"><a href="../../d2/d87/pal__configuration_8h.html">pal_configuration.h</a></div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a0e0e6dc9958a9efd9beb62493bc3f67a"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a0e0e6dc9958a9efd9beb62493bc3f67a">pal_plat_osMessageQueueDestroy</a></div><div class="ttdeci">palStatus_t pal_plat_osMessageQueueDestroy(palMessageQID_t *messageQID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:947</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a21fd378211ce09c12c15c39ff579627b"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a></div><div class="ttdeci">void(* palTimerFuncPtr)(void const *funcArgument)</div><div class="ttdoc">PAL timer function prototype. </div><div class="ttdef"><b>Definition:</b> pal_rtos.h:48</div></div>
+<div class="ttc" id="pal__configuration_8h_html_abb1ceb83ff6a709614d1394e7e39391d"><div class="ttname"><a href="../../d2/d87/pal__configuration_8h.html#abb1ceb83ff6a709614d1394e7e39391d">PAL_MAX_NUMBER_OF_THREADS</a></div><div class="ttdeci">#define PAL_MAX_NUMBER_OF_THREADS</div><div class="ttdoc">number of valid priorities limits the number of threads- if priorities are added this value should be...</div><div class="ttdef"><b>Definition:</b> pal_configuration.h:34</div></div>
+<div class="ttc" id="pal__rtos_8h_html"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html">pal_rtos.h</a></div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_add4dbca7b11365e7301db1425c9fdf4d"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#add4dbca7b11365e7301db1425c9fdf4d">pal_plat_osMutexRelease</a></div><div class="ttdeci">palStatus_t pal_plat_osMutexRelease(palMutexID_t mutexID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:551</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_aa80549a557e50e0759991c6b11eb456a"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#aa80549a557e50e0759991c6b11eb456a">pal_plat_osMessagePut</a></div><div class="ttdeci">palStatus_t pal_plat_osMessagePut(palMessageQID_t messageQID, uint32_t info, uint32_t timeout)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:886</div></div>
+<div class="ttc" id="pal__rtos_8h_html_ac6b402eec0e5f2ab64c43abffd4d9901"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a></div><div class="ttdeci">uintptr_t palMutexID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:36</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a54696b00a498a3c4a1346030acd18853"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a></div><div class="ttdeci">void(* palThreadFuncPtr)(void const *funcArgument)</div><div class="ttdoc">PAL thread function prototype. </div><div class="ttdef"><b>Definition:</b> pal_rtos.h:51</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a2f1fdb410c4d6ae382622ef4f1884808"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a2f1fdb410c4d6ae382622ef4f1884808">pal_plat_osTimerStop</a></div><div class="ttdeci">palStatus_t pal_plat_osTimerStop(palTimerID_t timerID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:436</div></div>
+<div class="ttc" id="pal__rtos_8h_html_acb4162ac097039734d15916d29880910"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a></div><div class="ttdeci">uintptr_t palMessageQID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:39</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a140b31a48ac23c909f1a94ad11b04aac"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a140b31a48ac23c909f1a94ad11b04aac">pal_plat_osDelay</a></div><div class="ttdeci">palStatus_t pal_plat_osDelay(uint32_t milliseconds)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:218</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a909f4ae03b0acef0b84609d9b76679b4"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a909f4ae03b0acef0b84609d9b76679b4">pal_plat_osMutexDelete</a></div><div class="ttdeci">palStatus_t pal_plat_osMutexDelete(palMutexID_t *mutexID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:576</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a33ca5b5e9d3a80594de4977924e6bc1b"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a33ca5b5e9d3a80594de4977924e6bc1b">pal_plat_osPoolDestroy</a></div><div class="ttdeci">palStatus_t pal_plat_osPoolDestroy(palMemoryPoolID_t *memoryPoolID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:820</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_ae2425f958ab7d58eff5c5b3183f40305"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#ae2425f958ab7d58eff5c5b3183f40305">pal_plat_osMutexCreate</a></div><div class="ttdeci">palStatus_t pal_plat_osMutexCreate(palMutexID_t *mutexID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:489</div></div>
+<div class="ttc" id="pal__types_8h_html"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html">pal_types.h</a></div></div>
+<div class="ttc" id="pal__rtos_8h_html_a278568ee407204e02cbd783f612e55be"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a></div><div class="ttdeci">enum pal_osPriority palThreadPriority_t</div><div class="ttdoc">Available priorities in PAL implementation, each priority can appear only once. </div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_ad25c8f7cb22985b077e893be5bc27d48"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#ad25c8f7cb22985b077e893be5bc27d48">pal_plat_osMessageQueueCreate</a></div><div class="ttdeci">palStatus_t pal_plat_osMessageQueueCreate(uint32_t messageQSize, palMessageQID_t *messageQID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:837</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a4c42c35d3d7b375833a51b4670febe92"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a4c42c35d3d7b375833a51b4670febe92">pal_plat_osThreadGetId</a></div><div class="ttdeci">palThreadID_t pal_plat_osThreadGetId()</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:315</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a2e7aaf20f2cad3b04061e1c3fd748c42"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a2e7aaf20f2cad3b04061e1c3fd748c42">pal_plat_RTOSInitialize</a></div><div class="ttdeci">palStatus_t pal_plat_RTOSInitialize(void *opaqueContext)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:186</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_ae92f87b121a06e0062ee014025c0ba9e"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#ae92f87b121a06e0062ee014025c0ba9e">pal_plat_osKernelSysTick</a></div><div class="ttdeci">uint32_t pal_plat_osKernelSysTick()</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:233</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a73ab99198ebc6e6af72064739b05bdcb"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a></div><div class="ttdeci">uintptr_t palMemoryPoolID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:38</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a4b627efa48e79a6fbcafae87ae397985"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a></div><div class="ttdeci">uintptr_t palTimerID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:35</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a252f210ce8a502891821b5af24b09822"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a252f210ce8a502891821b5af24b09822">pal_plat_osSemaphoreRelease</a></div><div class="ttdeci">palStatus_t pal_plat_osSemaphoreRelease(palSemaphoreID_t semaphoreID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:661</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_aea4ad5224c43ff0fff2b77798d19748c"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#aea4ad5224c43ff0fff2b77798d19748c">pal_plat_osMutexWait</a></div><div class="ttdeci">palStatus_t pal_plat_osMutexWait(palMutexID_t mutexID, uint32_t millisec)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:525</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a9c965e0fdfd80fc86c901cf2bde88c64"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a9c965e0fdfd80fc86c901cf2bde88c64">pal_plat_osThreadCreate</a></div><div class="ttdeci">palStatus_t pal_plat_osThreadCreate(palThreadFuncPtr function, void *funcArgument, palThreadPriority_t priority, uint32_t stackSize, uint32_t *stackPtr, palThreadLocalStore_t *store, palThreadID_t *threadID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:258</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a5938d16ea0c12594e8f8becd20acf3a7"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a5938d16ea0c12594e8f8becd20acf3a7">pal_plat_osPoolAlloc</a></div><div class="ttdeci">void * pal_plat_osPoolAlloc(palMemoryPoolID_t memoryPoolID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:763</div></div>
+<div class="ttc" id="pal__rtos_8h_html_aa61aba50e0f2dba5c8571417c2bdd9a5"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a></div><div class="ttdeci">uintptr_t palThreadID_t</div><div class="ttdoc">Primitives IDs types declarations. </div><div class="ttdef"><b>Definition:</b> pal_rtos.h:34</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a67696b86a6116a82da7c26a433280e58"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a67696b86a6116a82da7c26a433280e58">pal_plat_osMessageGet</a></div><div class="ttdeci">palStatus_t pal_plat_osMessageGet(palMessageQID_t messageQID, uint32_t timeout, uint32_t *messageValue)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:911</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a82eade9e7b100bd9dc9ab8312f98f827"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a82eade9e7b100bd9dc9ab8312f98f827">pal_plat_osKernelSysMilliSecTick</a></div><div class="ttdeci">uint64_t pal_plat_osKernelSysMilliSecTick(uint64_t sysTicks)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:247</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_aacd58e95c23ad1c8f39b8b12ed2d83dd"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#aacd58e95c23ad1c8f39b8b12ed2d83dd">pal_plat_osKernelSysTickFrequency</a></div><div class="ttdeci">uint64_t pal_plat_osKernelSysTickFrequency(void)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:253</div></div>
+<div class="ttc" id="pal__types_8h_html_a160277354e86b9aea01d7689ec26d88d"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a></div><div class="ttdeci">int32_t palStatus_t</div><div class="ttdef"><b>Definition:</b> pal_types.h:31</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a3117f8911b3e83e27031f366aa652a4f"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a3117f8911b3e83e27031f366aa652a4f">pal_plat_osThreadTerminate</a></div><div class="ttdeci">palStatus_t pal_plat_osThreadTerminate(palThreadID_t *threadID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:322</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a9723baa43780a1083f43d786fa53a73d"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a9723baa43780a1083f43d786fa53a73d">pal_plat_osTimerDelete</a></div><div class="ttdeci">palStatus_t pal_plat_osTimerDelete(palTimerID_t *timerID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:461</div></div>
+<div class="ttc" id="pal__plat__rtos_8h_html_a7a4fa20255fe38cf183f6c924419fe85"><div class="ttname"><a href="../../d5/d59/pal__plat__rtos_8h.html#a7a4fa20255fe38cf183f6c924419fe85">pal_plat_osPoolCreate</a></div><div class="ttdeci">palStatus_t pal_plat_osPoolCreate(uint32_t blockSize, uint32_t blockCount, palMemoryPoolID_t *memoryPoolID)</div><div class="ttdef"><b>Definition:</b> pal_plat_rtos.c:713</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d5/de2/pal__all__test_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_all_test.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_all_test.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;unity.h&quot;</code><br />
+<code>#include &quot;unity_fixture.h&quot;</code><br />
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d6/d71/pal__socket__test__main___free_r_t_o_s_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,200 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_socket_test_main_FreeRTOS.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_socket_test_main_FreeRTOS.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;fsl_device_registers.h&quot;</code><br />
+<code>#include &quot;fsl_debug_console.h&quot;</code><br />
+<code>#include &quot;board.h&quot;</code><br />
+<code>#include &quot;pin_mux.h&quot;</code><br />
+<code>#include &quot;clock_config.h&quot;</code><br />
+<code>#include &quot;unity.c&quot;</code><br />
+<code>#include &quot;FreeRTOS.h&quot;</code><br />
+<code>#include &quot;task.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a37fa0e609ebaa8565ad388e41cc92a43"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/d71/pal__socket__test__main___free_r_t_o_s_8c.html#a37fa0e609ebaa8565ad388e41cc92a43">APP_DEBUG_UART_BAUDRATE</a>&#160;&#160;&#160;9600                 /* Debug console baud rate.           */</td></tr>
+<tr class="separator:a37fa0e609ebaa8565ad388e41cc92a43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b196c652283b89130c86ca7bd1559bc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/d71/pal__socket__test__main___free_r_t_o_s_8c.html#a3b196c652283b89130c86ca7bd1559bc">APP_DEBUG_UART_CLKSRC_NAME</a>&#160;&#160;&#160;kCLOCK_CoreSysClk /* System clock.       */</td></tr>
+<tr class="separator:a3b196c652283b89130c86ca7bd1559bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a58ec279183697abbd5d3efea3442d4e5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/d71/pal__socket__test__main___free_r_t_o_s_8c.html#a58ec279183697abbd5d3efea3442d4e5">UnityMain</a> (int argc, const char *argv[], void(*runAllTests)(void))</td></tr>
+<tr class="separator:a58ec279183697abbd5d3efea3442d4e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2393bacb0eb76d2dd1b0c200a8769cab"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/d71/pal__socket__test__main___free_r_t_o_s_8c.html#a2393bacb0eb76d2dd1b0c200a8769cab">TEST_pal_socket_GROUP_RUNNER</a> (void)</td></tr>
+<tr class="separator:a2393bacb0eb76d2dd1b0c200a8769cab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a840291bc02cba5474a4cb46a9b9566fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/d71/pal__socket__test__main___free_r_t_o_s_8c.html#a840291bc02cba5474a4cb46a9b9566fe">main</a> (void)</td></tr>
+<tr class="memdesc:a840291bc02cba5474a4cb46a9b9566fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Main function.  <a href="#a840291bc02cba5474a4cb46a9b9566fe">More...</a><br /></td></tr>
+<tr class="separator:a840291bc02cba5474a4cb46a9b9566fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad7d1365a74953be39a9a7e65702b69a3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/d71/pal__socket__test__main___free_r_t_o_s_8c.html#ad7d1365a74953be39a9a7e65702b69a3">unity_output_char</a> (int c)</td></tr>
+<tr class="separator:ad7d1365a74953be39a9a7e65702b69a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a37fa0e609ebaa8565ad388e41cc92a43"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APP_DEBUG_UART_BAUDRATE&#160;&#160;&#160;9600                 /* Debug console baud rate.           */</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3b196c652283b89130c86ca7bd1559bc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define APP_DEBUG_UART_CLKSRC_NAME&#160;&#160;&#160;kCLOCK_CoreSysClk /* System clock.       */</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a840291bc02cba5474a4cb46a9b9566fe"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Main function. </p>
+
+</div>
+</div>
+<a class="anchor" id="a2393bacb0eb76d2dd1b0c200a8769cab"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TEST_pal_socket_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad7d1365a74953be39a9a7e65702b69a3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void unity_output_char </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>c</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58ec279183697abbd5d3efea3442d4e5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UnityMain </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(void)&#160;</td>
+          <td class="paramname"><em>runAllTests</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d6/dc2/pal__types_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_types.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_types.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br />
+<code>#include &lt;stdbool.h&gt;</code><br />
+<code>#include &lt;stddef.h&gt;</code><br />
+</div>
+<p><a href="../../d6/dc2/pal__types_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/d19/struct__pal_buffer__t.html">_palBuffer_t</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d2/dab/struct__pal_const_buffer__t.html">_palConstBuffer_t</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a92e2ad3a6b8c71818b6a08720fa84ba5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a92e2ad3a6b8c71818b6a08720fa84ba5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ef7eab8cd0e570b6586628cc9d5ccab"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab">NULLPTR</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a3ef7eab8cd0e570b6586628cc9d5ccab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a160277354e86b9aea01d7689ec26d88d"><td class="memItemLeft" align="right" valign="top">typedef int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a></td></tr>
+<tr class="separator:a160277354e86b9aea01d7689ec26d88d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c90171089db400b392bf0d3b68de0e4"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="../../d8/d19/struct__pal_buffer__t.html">_palBuffer_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a></td></tr>
+<tr class="separator:a8c90171089db400b392bf0d3b68de0e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fc5fbdbd83764292a7b4252e44e3b81"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="../../d2/dab/struct__pal_const_buffer__t.html">_palConstBuffer_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a></td></tr>
+<tr class="separator:a1fc5fbdbd83764292a7b4252e44e3b81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a3ef7eab8cd0e570b6586628cc9d5ccab"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NULLPTR&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a92e2ad3a6b8c71818b6a08720fa84ba5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_SUCCESS&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="a8c90171089db400b392bf0d3b68de0e4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="../../d8/d19/struct__pal_buffer__t.html">_palBuffer_t</a>  <a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1fc5fbdbd83764292a7b4252e44e3b81"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="../../d2/dab/struct__pal_const_buffer__t.html">_palConstBuffer_t</a>  <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a160277354e86b9aea01d7689ec26d88d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef int32_t <a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d6/dc2/pal__types_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,72 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_types.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_types.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../d6/dc2/pal__types_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef _PAL_TYPES_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define _PAL_TYPES_H</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;stdbool.h&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">   28</a></span>&#160;<span class="preprocessor">#define PAL_SUCCESS 0</span></div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="../../d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab">   29</a></span>&#160;<span class="preprocessor">#define NULLPTR 0</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">   31</a></span>&#160;<span class="keyword">typedef</span> int32_t <a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="../../d8/d19/struct__pal_buffer__t.html">   34</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="../../d8/d19/struct__pal_buffer__t.html">_palBuffer_t</a></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;{</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="../../d8/d19/struct__pal_buffer__t.html#a27cc969a96cc37cb772a3fd76dd860cd">   36</a></span>&#160;    uint32_t  <a class="code" href="../../d8/d19/struct__pal_buffer__t.html#a27cc969a96cc37cb772a3fd76dd860cd">maxBufferLength</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="../../d8/d19/struct__pal_buffer__t.html#a7f87cfadd565637bee1de625d19f3d3a">   37</a></span>&#160;    uint32_t  <a class="code" href="../../d8/d19/struct__pal_buffer__t.html#a7f87cfadd565637bee1de625d19f3d3a">bufferLength</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="../../d8/d19/struct__pal_buffer__t.html#a80fff022df87cf0d4817ae19eb8257bb">   38</a></span>&#160;    uint8_t *<a class="code" href="../../d8/d19/struct__pal_buffer__t.html#a80fff022df87cf0d4817ae19eb8257bb">buffer</a>;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;} <a class="code" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a>;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="../../d2/dab/struct__pal_const_buffer__t.html">   41</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="../../d2/dab/struct__pal_const_buffer__t.html">_palConstBuffer_t</a></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="../../d2/dab/struct__pal_const_buffer__t.html#ad411a35599e0f8500f29e5bd2cb66cc7">   43</a></span>&#160;    <span class="keyword">const</span> uint32_t  <a class="code" href="../../d2/dab/struct__pal_const_buffer__t.html#ad411a35599e0f8500f29e5bd2cb66cc7">maxBufferLength</a>;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="../../d2/dab/struct__pal_const_buffer__t.html#a8d4966dc771ad87628b4bd01ae4ea801">   44</a></span>&#160;    <span class="keyword">const</span> uint32_t  <a class="code" href="../../d2/dab/struct__pal_const_buffer__t.html#a8d4966dc771ad87628b4bd01ae4ea801">bufferLength</a>;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="../../d2/dab/struct__pal_const_buffer__t.html#a3660dfb9336b8d57a3c2223de14646d3">   45</a></span>&#160;    <span class="keyword">const</span> uint8_t *<a class="code" href="../../d2/dab/struct__pal_const_buffer__t.html#a3660dfb9336b8d57a3c2223de14646d3">buffer</a>;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;} <a class="code" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a>;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;}</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#endif //_PAL_TYPES_H</span></div><div class="ttc" id="struct__pal_const_buffer__t_html_a8d4966dc771ad87628b4bd01ae4ea801"><div class="ttname"><a href="../../d2/dab/struct__pal_const_buffer__t.html#a8d4966dc771ad87628b4bd01ae4ea801">_palConstBuffer_t::bufferLength</a></div><div class="ttdeci">const uint32_t bufferLength</div><div class="ttdef"><b>Definition:</b> pal_types.h:44</div></div>
+<div class="ttc" id="struct__pal_buffer__t_html_a7f87cfadd565637bee1de625d19f3d3a"><div class="ttname"><a href="../../d8/d19/struct__pal_buffer__t.html#a7f87cfadd565637bee1de625d19f3d3a">_palBuffer_t::bufferLength</a></div><div class="ttdeci">uint32_t bufferLength</div><div class="ttdef"><b>Definition:</b> pal_types.h:37</div></div>
+<div class="ttc" id="struct__pal_buffer__t_html"><div class="ttname"><a href="../../d8/d19/struct__pal_buffer__t.html">_palBuffer_t</a></div><div class="ttdef"><b>Definition:</b> pal_types.h:34</div></div>
+<div class="ttc" id="pal__types_8h_html_a8c90171089db400b392bf0d3b68de0e4"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a></div><div class="ttdeci">struct _palBuffer_t palBuffer_t</div></div>
+<div class="ttc" id="pal__types_8h_html_a1fc5fbdbd83764292a7b4252e44e3b81"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a></div><div class="ttdeci">struct _palConstBuffer_t palConstBuffer_t</div></div>
+<div class="ttc" id="struct__pal_const_buffer__t_html_a3660dfb9336b8d57a3c2223de14646d3"><div class="ttname"><a href="../../d2/dab/struct__pal_const_buffer__t.html#a3660dfb9336b8d57a3c2223de14646d3">_palConstBuffer_t::buffer</a></div><div class="ttdeci">const uint8_t * buffer</div><div class="ttdef"><b>Definition:</b> pal_types.h:45</div></div>
+<div class="ttc" id="struct__pal_buffer__t_html_a27cc969a96cc37cb772a3fd76dd860cd"><div class="ttname"><a href="../../d8/d19/struct__pal_buffer__t.html#a27cc969a96cc37cb772a3fd76dd860cd">_palBuffer_t::maxBufferLength</a></div><div class="ttdeci">uint32_t maxBufferLength</div><div class="ttdef"><b>Definition:</b> pal_types.h:36</div></div>
+<div class="ttc" id="struct__pal_const_buffer__t_html"><div class="ttname"><a href="../../d2/dab/struct__pal_const_buffer__t.html">_palConstBuffer_t</a></div><div class="ttdef"><b>Definition:</b> pal_types.h:41</div></div>
+<div class="ttc" id="struct__pal_buffer__t_html_a80fff022df87cf0d4817ae19eb8257bb"><div class="ttname"><a href="../../d8/d19/struct__pal_buffer__t.html#a80fff022df87cf0d4817ae19eb8257bb">_palBuffer_t::buffer</a></div><div class="ttdeci">uint8_t * buffer</div><div class="ttdef"><b>Definition:</b> pal_types.h:38</div></div>
+<div class="ttc" id="struct__pal_const_buffer__t_html_ad411a35599e0f8500f29e5bd2cb66cc7"><div class="ttname"><a href="../../d2/dab/struct__pal_const_buffer__t.html#ad411a35599e0f8500f29e5bd2cb66cc7">_palConstBuffer_t::maxBufferLength</a></div><div class="ttdeci">const uint32_t maxBufferLength</div><div class="ttdef"><b>Definition:</b> pal_types.h:43</div></div>
+<div class="ttc" id="pal__types_8h_html_a160277354e86b9aea01d7689ec26d88d"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a></div><div class="ttdeci">int32_t palStatus_t</div><div class="ttdef"><b>Definition:</b> pal_types.h:31</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d7/d66/pal__init_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/pal_init.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_init.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d9/d16/pal_8h_source.html">pal.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d5/d59/pal__plat__rtos_8h_source.html">pal_plat_rtos.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d2c/pal__plat__network_8h_source.html">pal_plat_network.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../db/dcf/pal__macros_8h_source.html">pal_macros.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a28095bec6e2c1c74ad3b08414f44b9d6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d7/d66/pal__init_8c.html#a28095bec6e2c1c74ad3b08414f44b9d6">pal_init</a> ()</td></tr>
+<tr class="separator:a28095bec6e2c1c74ad3b08414f44b9d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a312dfda15122dbd2abff67b580c811ad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d7/d66/pal__init_8c.html#a312dfda15122dbd2abff67b580c811ad">pal_destroy</a> ()</td></tr>
+<tr class="separator:a312dfda15122dbd2abff67b580c811ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a312dfda15122dbd2abff67b580c811ad"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pal_destroy </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>PAL destruction This function will call each module's destroy function (if exist) to free resources. </p>
+
+</div>
+</div>
+<a class="anchor" id="a28095bec6e2c1c74ad3b08414f44b9d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_init </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>PAL initialization This function will call each module's initialization function (if exist) to allocate required resources and initiate them. </p><dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d8/d19/struct__pal_buffer__t.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: _palBuffer_t Struct Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="../../functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">_palBuffer_t Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="../../d6/dc2/pal__types_8h_source.html">pal_types.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a27cc969a96cc37cb772a3fd76dd860cd"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/d19/struct__pal_buffer__t.html#a27cc969a96cc37cb772a3fd76dd860cd">maxBufferLength</a></td></tr>
+<tr class="separator:a27cc969a96cc37cb772a3fd76dd860cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f87cfadd565637bee1de625d19f3d3a"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/d19/struct__pal_buffer__t.html#a7f87cfadd565637bee1de625d19f3d3a">bufferLength</a></td></tr>
+<tr class="separator:a7f87cfadd565637bee1de625d19f3d3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a80fff022df87cf0d4817ae19eb8257bb"><td class="memItemLeft" align="right" valign="top">uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/d19/struct__pal_buffer__t.html#a80fff022df87cf0d4817ae19eb8257bb">buffer</a></td></tr>
+<tr class="separator:a80fff022df87cf0d4817ae19eb8257bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a80fff022df87cf0d4817ae19eb8257bb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t* _palBuffer_t::buffer</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7f87cfadd565637bee1de625d19f3d3a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t _palBuffer_t::bufferLength</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a27cc969a96cc37cb772a3fd76dd860cd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t _palBuffer_t::maxBufferLength</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/<a class="el" href="../../d6/dc2/pal__types_8h_source.html">pal_types.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d8/d5f/pal__socket__test__utils_8cpp.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Common/pal_socket_test_utils.cpp File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_f8e9a069a0807d5f7341f9bc5892e16f.html">Common</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_socket_test_utils.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d9/d16/pal_8h_source.html">pal.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d17/pal__network_8h_source.html">pal_network.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../df/d2a/pal__socket__test__utils_8h_source.html">pal_socket_test_utils.h</a>&quot;</code><br />
+<code>#include &quot;NetworkInterface.h&quot;</code><br />
+<code>#include &quot;EthernetInterface.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ac641d6ab2d8d2f23e89e7c36694d85dd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/d5f/pal__socket__test__utils_8cpp.html#ac641d6ab2d8d2f23e89e7c36694d85dd">TEST_PRINTF</a>&#160;&#160;&#160;printf</td></tr>
+<tr class="separator:ac641d6ab2d8d2f23e89e7c36694d85dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5e4a39a385159acfd150a2e6098351cf"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/d5f/pal__socket__test__utils_8cpp.html#a5e4a39a385159acfd150a2e6098351cf">palTestGetNetWorkInterfaceContext</a> ()</td></tr>
+<tr class="separator:a5e4a39a385159acfd150a2e6098351cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ac641d6ab2d8d2f23e89e7c36694d85dd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define TEST_PRINTF&#160;&#160;&#160;printf</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5e4a39a385159acfd150a2e6098351cf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* palTestGetNetWorkInterfaceContext </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d8/ddd/pal__update__test_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,628 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_update_test.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_update_test.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;pal_update.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d16/pal_8h_source.html">pal.h</a>&quot;</code><br />
+<code>#include &quot;unity.h&quot;</code><br />
+<code>#include &quot;unity_fixture.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d0/d51/pal__test__utils_8h_source.html">pal_test_utils.h</a>&quot;</code><br />
+<code>#include &quot;string.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a35721ed2d9f78cd139ea6f6c35432a4a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a35721ed2d9f78cd139ea6f6c35432a4a">KILOBYTE</a>&#160;&#160;&#160;1024</td></tr>
+<tr class="separator:a35721ed2d9f78cd139ea6f6c35432a4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a547526e0a5665bed054e5e1b140293f9"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="../../d8/ddd/pal__update__test_8c.html#abf05e786fbc30213ff2ab66f6369d713">_updateTestState</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a547526e0a5665bed054e5e1b140293f9">updateTestState</a></td></tr>
+<tr class="separator:a547526e0a5665bed054e5e1b140293f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:abf05e786fbc30213ff2ab66f6369d713"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#abf05e786fbc30213ff2ab66f6369d713">_updateTestState</a> { <a class="el" href="../../d8/ddd/pal__update__test_8c.html#abf05e786fbc30213ff2ab66f6369d713a4350eb18d5ff16dd8a84b3249056ae2e">test_init</a> = 1, 
+<a class="el" href="../../d8/ddd/pal__update__test_8c.html#abf05e786fbc30213ff2ab66f6369d713ad983e5411d9ec47c285a8dd393f02a6e">test_write</a>, 
+<a class="el" href="../../d8/ddd/pal__update__test_8c.html#abf05e786fbc30213ff2ab66f6369d713a0ead5736ab3d192c275b996803eba149">test_commit</a>, 
+<a class="el" href="../../d8/ddd/pal__update__test_8c.html#abf05e786fbc30213ff2ab66f6369d713a1b3c73ee83014627ad0da186a2c1a2fb">test_read</a>
+ }</td></tr>
+<tr class="separator:abf05e786fbc30213ff2ab66f6369d713"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a19cca449868c9c3f0d8991c341ea839c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a19cca449868c9c3f0d8991c341ea839c">TEST_GROUP</a> (pal_update)</td></tr>
+<tr class="separator:a19cca449868c9c3f0d8991c341ea839c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ae4fbf6e981e26dcb6749930b21b08d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a9ae4fbf6e981e26dcb6749930b21b08d">TEST_SETUP</a> (pal_update)</td></tr>
+<tr class="separator:a9ae4fbf6e981e26dcb6749930b21b08d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4fdba49feaaa03412cc15e81319f4f4f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a4fdba49feaaa03412cc15e81319f4f4f">printBuffer</a> (uint8_t *buffer, size_t bufSize)</td></tr>
+<tr class="separator:a4fdba49feaaa03412cc15e81319f4f4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9156028c0096109280c0c52cb0f2e812"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a9156028c0096109280c0c52cb0f2e812">TEST_TEAR_DOWN</a> (pal_update)</td></tr>
+<tr class="separator:a9156028c0096109280c0c52cb0f2e812"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a800bf9c86bfc062602a83dc67185e30b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a800bf9c86bfc062602a83dc67185e30b">TEST</a> (pal_update, pal_update_start)</td></tr>
+<tr class="separator:a800bf9c86bfc062602a83dc67185e30b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff301a468282a4d9147b1434a06381f9"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#aff301a468282a4d9147b1434a06381f9">TEST</a> (pal_update, pal_update_init)</td></tr>
+<tr class="separator:aff301a468282a4d9147b1434a06381f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc0da3328c3a58d974675b6bd56edd1e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#acc0da3328c3a58d974675b6bd56edd1e">pal_update_xK</a> (int sizeInK)</td></tr>
+<tr class="separator:acc0da3328c3a58d974675b6bd56edd1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afecfa17c6110a0895f52431cd532092f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#afecfa17c6110a0895f52431cd532092f">TEST</a> (pal_update, pal_update_1k)</td></tr>
+<tr class="separator:afecfa17c6110a0895f52431cd532092f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa48cff0f3f13d922ded90664c75791fa"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#aa48cff0f3f13d922ded90664c75791fa">TEST</a> (pal_update, pal_update_2k)</td></tr>
+<tr class="separator:aa48cff0f3f13d922ded90664c75791fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a882b0ade875866f896cb88174512bb30"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a882b0ade875866f896cb88174512bb30">TEST</a> (pal_update, pal_update_4k)</td></tr>
+<tr class="separator:a882b0ade875866f896cb88174512bb30"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac3e0ff918f632867c5fe44c3b270facf"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#ac3e0ff918f632867c5fe44c3b270facf">TEST</a> (pal_update, pal_update_8k)</td></tr>
+<tr class="separator:ac3e0ff918f632867c5fe44c3b270facf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0da24bdd2a325e3dbd2413f41775406"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#ac0da24bdd2a325e3dbd2413f41775406">TEST</a> (pal_update, pal_update_16k)</td></tr>
+<tr class="separator:ac0da24bdd2a325e3dbd2413f41775406"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3dd80d217f7b7a8bdba04d47c5e21741"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a3dd80d217f7b7a8bdba04d47c5e21741">TEST</a> (pal_update, pal_update_4k_write_1k_4_times)</td></tr>
+<tr class="separator:a3dd80d217f7b7a8bdba04d47c5e21741"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf68771c3ac1f79337f71f1e808b2153"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#acf68771c3ac1f79337f71f1e808b2153">TEST</a> (pal_update, pal_update_stressTest)</td></tr>
+<tr class="separator:acf68771c3ac1f79337f71f1e808b2153"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d26b75e42d95d624a3bdae2efee96a5"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a5d26b75e42d95d624a3bdae2efee96a5">TEST</a> (pal_update, pal_update_Read)</td></tr>
+<tr class="separator:a5d26b75e42d95d624a3bdae2efee96a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd4f695bbb4568387dbc95a2f7173811"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#acd4f695bbb4568387dbc95a2f7173811">TEST</a> (pal_update, pal_update_getActiveHash)</td></tr>
+<tr class="separator:acd4f695bbb4568387dbc95a2f7173811"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:af6a911649425f88a1716a01216ea7e09"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#af6a911649425f88a1716a01216ea7e09">g_writeBuffer</a> = {0}</td></tr>
+<tr class="separator:af6a911649425f88a1716a01216ea7e09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a88c0b91a86e5aa487b1db6e9e21a3fd5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a88c0b91a86e5aa487b1db6e9e21a3fd5">g_readBuffer</a> = {0}</td></tr>
+<tr class="separator:a88c0b91a86e5aa487b1db6e9e21a3fd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae66263351db36073be343d46a85317dd"><td class="memItemLeft" align="right" valign="top">palImageHeaderDeails_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#ae66263351db36073be343d46a85317dd">g_imageHeader</a> = {0}</td></tr>
+<tr class="separator:ae66263351db36073be343d46a85317dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab2289c97851e687884bbdc27abbe066f"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#ab2289c97851e687884bbdc27abbe066f">g_isTestDone</a></td></tr>
+<tr class="separator:ab2289c97851e687884bbdc27abbe066f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8aa629fedb643fb85f3624300008091c"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/ddd/pal__update__test_8c.html#a8aa629fedb643fb85f3624300008091c">numberofBlocks</a> = 0</td></tr>
+<tr class="separator:a8aa629fedb643fb85f3624300008091c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a35721ed2d9f78cd139ea6f6c35432a4a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define KILOBYTE&#160;&#160;&#160;1024</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="a547526e0a5665bed054e5e1b140293f9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="../../d8/ddd/pal__update__test_8c.html#abf05e786fbc30213ff2ab66f6369d713">_updateTestState</a> <a class="el" href="../../d8/ddd/pal__update__test_8c.html#a547526e0a5665bed054e5e1b140293f9">updateTestState</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="abf05e786fbc30213ff2ab66f6369d713"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d8/ddd/pal__update__test_8c.html#abf05e786fbc30213ff2ab66f6369d713">_updateTestState</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="abf05e786fbc30213ff2ab66f6369d713a4350eb18d5ff16dd8a84b3249056ae2e"></a>test_init&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="abf05e786fbc30213ff2ab66f6369d713ad983e5411d9ec47c285a8dd393f02a6e"></a>test_write&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="abf05e786fbc30213ff2ab66f6369d713a0ead5736ab3d192c275b996803eba149"></a>test_commit&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="abf05e786fbc30213ff2ab66f6369d713a1b3c73ee83014627ad0da186a2c1a2fb"></a>test_read&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="acc0da3328c3a58d974675b6bd56edd1e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pal_update_xK </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>sizeInK</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4fdba49feaaa03412cc15e81319f4f4f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void printBuffer </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>bufSize</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a800bf9c86bfc062602a83dc67185e30b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_update_start&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aff301a468282a4d9147b1434a06381f9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_update_init&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afecfa17c6110a0895f52431cd532092f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_update_1k&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa48cff0f3f13d922ded90664c75791fa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_update_2k&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a882b0ade875866f896cb88174512bb30"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_update_4k&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac3e0ff918f632867c5fe44c3b270facf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_update_8k&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac0da24bdd2a325e3dbd2413f41775406"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_update_16k&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3dd80d217f7b7a8bdba04d47c5e21741"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_update_4k_write_1k_4_times&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acf68771c3ac1f79337f71f1e808b2153"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_update_stressTest&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5d26b75e42d95d624a3bdae2efee96a5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_update_Read&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acd4f695bbb4568387dbc95a2f7173811"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_update_getActiveHash&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19cca449868c9c3f0d8991c341ea839c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_GROUP </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9ae4fbf6e981e26dcb6749930b21b08d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_SETUP </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9156028c0096109280c0c52cb0f2e812"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_TEAR_DOWN </td>
+          <td>(</td>
+          <td class="paramtype">pal_update&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ae66263351db36073be343d46a85317dd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">palImageHeaderDeails_t g_imageHeader = {0}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab2289c97851e687884bbdc27abbe066f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t g_isTestDone</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a88c0b91a86e5aa487b1db6e9e21a3fd5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> g_readBuffer = {0}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af6a911649425f88a1716a01216ea7e09"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> g_writeBuffer = {0}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8aa629fedb643fb85f3624300008091c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t numberofBlocks = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d9/d16/pal_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,111 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../db/dcf/pal__macros_8h_source.html">pal_macros.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d2/d87/pal__configuration_8h_source.html">pal_configuration.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../da/dfe/pal__errors_8h_source.html">pal_errors.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d6/dc2/pal__types_8h_source.html">pal_types.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d4/d01/pal__rtos_8h_source.html">pal_rtos.h</a>&quot;</code><br />
+</div>
+<p><a href="../../d9/d16/pal_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a28095bec6e2c1c74ad3b08414f44b9d6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d16/pal_8h.html#a28095bec6e2c1c74ad3b08414f44b9d6">pal_init</a> ()</td></tr>
+<tr class="separator:a28095bec6e2c1c74ad3b08414f44b9d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a312dfda15122dbd2abff67b580c811ad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d16/pal_8h.html#a312dfda15122dbd2abff67b580c811ad">pal_destroy</a> ()</td></tr>
+<tr class="separator:a312dfda15122dbd2abff67b580c811ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a312dfda15122dbd2abff67b580c811ad"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pal_destroy </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>PAL destruction This function will call each module's destroy function (if exist) to free resources. </p>
+
+</div>
+</div>
+<a class="anchor" id="a28095bec6e2c1c74ad3b08414f44b9d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_init </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>PAL initialization This function will call each module's initialization function (if exist) to allocate required resources and initiate them. </p><dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d9/d16/pal_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../d9/d16/pal_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef _PAL_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define _PAL_H</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment">//includes for common headers in PAL</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../db/dcf/pal__macros_8h.html">pal_macros.h</a>&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d2/d87/pal__configuration_8h.html">pal_configuration.h</a>&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../da/dfe/pal__errors_8h.html">pal_errors.h</a>&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d6/dc2/pal__types_8h.html">pal_types.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">//includes for modules headers.</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d4/d01/pal__rtos_8h.html">pal_rtos.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">//#include &quot;pal_socket.h&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">//declarations for global init and destroy of PAL</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d16/pal_8h.html#a28095bec6e2c1c74ad3b08414f44b9d6">pal_init</a>();</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d16/pal_8h.html#a312dfda15122dbd2abff67b580c811ad">pal_destroy</a>();</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;}</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#endif //_PAL_H</span></div><div class="ttc" id="pal__configuration_8h_html"><div class="ttname"><a href="../../d2/d87/pal__configuration_8h.html">pal_configuration.h</a></div></div>
+<div class="ttc" id="pal__rtos_8h_html"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html">pal_rtos.h</a></div></div>
+<div class="ttc" id="pal__types_8h_html"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html">pal_types.h</a></div></div>
+<div class="ttc" id="pal__errors_8h_html"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html">pal_errors.h</a></div></div>
+<div class="ttc" id="pal__macros_8h_html"><div class="ttname"><a href="../../db/dcf/pal__macros_8h.html">pal_macros.h</a></div></div>
+<div class="ttc" id="pal_8h_html_a312dfda15122dbd2abff67b580c811ad"><div class="ttname"><a href="../../d9/d16/pal_8h.html#a312dfda15122dbd2abff67b580c811ad">pal_destroy</a></div><div class="ttdeci">void pal_destroy()</div><div class="ttdef"><b>Definition:</b> pal_init.c:64</div></div>
+<div class="ttc" id="pal_8h_html_a28095bec6e2c1c74ad3b08414f44b9d6"><div class="ttname"><a href="../../d9/d16/pal_8h.html#a28095bec6e2c1c74ad3b08414f44b9d6">pal_init</a></div><div class="ttdeci">palStatus_t pal_init()</div><div class="ttdef"><b>Definition:</b> pal_init.c:27</div></div>
+<div class="ttc" id="pal__types_8h_html_a160277354e86b9aea01d7689ec26d88d"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a></div><div class="ttdeci">int32_t palStatus_t</div><div class="ttdef"><b>Definition:</b> pal_types.h:31</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d9/d16/structpal_net_interface_info.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: palNetInterfaceInfo Struct Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="../../functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">palNetInterfaceInfo Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="../../d9/d17/pal__network_8h_source.html">pal_network.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ad028021cafddc5355dfccfac1345f4f6"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d16/structpal_net_interface_info.html#ad028021cafddc5355dfccfac1345f4f6">interfaceName</a> [16]</td></tr>
+<tr class="separator:ad028021cafddc5355dfccfac1345f4f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:affc930af87e8696f63b30b911cf8b03d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d16/structpal_net_interface_info.html#affc930af87e8696f63b30b911cf8b03d">address</a></td></tr>
+<tr class="separator:affc930af87e8696f63b30b911cf8b03d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b816dd947f25d303e32fca36d04080e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d16/structpal_net_interface_info.html#a9b816dd947f25d303e32fca36d04080e">addressSize</a></td></tr>
+<tr class="separator:a9b816dd947f25d303e32fca36d04080e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>address data structure with enough room to support IPV4 and IPV6 </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="affc930af87e8696f63b30b911cf8b03d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> palNetInterfaceInfo::address</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9b816dd947f25d303e32fca36d04080e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t palNetInterfaceInfo::addressSize</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad028021cafddc5355dfccfac1345f4f6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char palNetInterfaceInfo::interfaceName[16]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/<a class="el" href="../../d9/d17/pal__network_8h_source.html">pal_network.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d9/d17/pal__network_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1195 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_network.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_network.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d9/d16/pal_8h_source.html">pal.h</a>&quot;</code><br />
+</div>
+<p><a href="../../d9/d17/pal__network_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d42/structpal_socket_address.html">palSocketAddress</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d16/structpal_net_interface_info.html">palNetInterfaceInfo</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/dfc/structpal__time_val.html">pal_timeVal</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ac831e2e5064065e10c741da1003ff039"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ac831e2e5064065e10c741da1003ff039">PAL_NET_MAX_ADDR_SIZE</a>&#160;&#160;&#160;32</td></tr>
+<tr class="separator:ac831e2e5064065e10c741da1003ff039"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aefc09884590381a71433c34b3f2e2aa5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#aefc09884590381a71433c34b3f2e2aa5">PAL_NET_DEFAULT_INTERFACE</a>&#160;&#160;&#160;0xFFFFFFFF</td></tr>
+<tr class="separator:aefc09884590381a71433c34b3f2e2aa5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad7a3e182cb430da7c139858b0bfbb27f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ad7a3e182cb430da7c139858b0bfbb27f">PAL_IPV4_ADDRESS_SIZE</a>&#160;&#160;&#160;4</td></tr>
+<tr class="separator:ad7a3e182cb430da7c139858b0bfbb27f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9903ebae215b70520c8dcc9f0aa03e24"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a9903ebae215b70520c8dcc9f0aa03e24">PAL_IPV6_ADDRESS_SIZE</a>&#160;&#160;&#160;16</td></tr>
+<tr class="separator:a9903ebae215b70520c8dcc9f0aa03e24"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5607f2af4b642ef0548bd47c891c6d31"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>&#160;&#160;&#160;8</td></tr>
+<tr class="separator:a5607f2af4b642ef0548bd47c891c6d31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae14933b48cd31821913f2bfb15e18b2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#aae14933b48cd31821913f2bfb15e18b2">PAL_NET_SOCKET_SELECT_RX_BIT</a>&#160;&#160;&#160;(1)</td></tr>
+<tr class="separator:aae14933b48cd31821913f2bfb15e18b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8ddc879cf2eace65036137660b8b53d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ad8ddc879cf2eace65036137660b8b53d">PAL_NET_SOCKET_SELECT_TX_BIT</a>&#160;&#160;&#160;(2)</td></tr>
+<tr class="separator:ad8ddc879cf2eace65036137660b8b53d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa66d7131cc6c44ac6c5ab6a9dda3f69a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#aa66d7131cc6c44ac6c5ab6a9dda3f69a">PAL_NET_SOCKET_SELECT_ERR_BIT</a>&#160;&#160;&#160;(4)</td></tr>
+<tr class="separator:aa66d7131cc6c44ac6c5ab6a9dda3f69a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8894a96773018ba6058811087b4b2ac8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a8894a96773018ba6058811087b4b2ac8">PAL_NET_SELECT_IS_RX</a>(socketStatus,  index)  &#160;&#160;&#160;((socketStatus[index] | <a class="el" href="../../d9/d17/pal__network_8h.html#aae14933b48cd31821913f2bfb15e18b2">PAL_NET_SOCKET_SELECT_RX_BIT</a>) != 0) /*! check if RX bit is set in select result for a given socket index*/</td></tr>
+<tr class="separator:a8894a96773018ba6058811087b4b2ac8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31ca79ac9ae5c2ddd890263a989fc4d8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a31ca79ac9ae5c2ddd890263a989fc4d8">PAL_NET_SELECT_IS_TX</a>(socketStatus,  index)  &#160;&#160;&#160;((socketStatus[index] | <a class="el" href="../../d9/d17/pal__network_8h.html#ad8ddc879cf2eace65036137660b8b53d">PAL_NET_SOCKET_SELECT_TX_BIT</a>) != 0) /*! check if TX bit is set in select result for a given socket index*/</td></tr>
+<tr class="separator:a31ca79ac9ae5c2ddd890263a989fc4d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2b7451d38e150079fbef20b57ee3fe9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ac2b7451d38e150079fbef20b57ee3fe9">PAL_NET_SELECT_IS_ERR</a>(socketStatus,  index)&#160;&#160;&#160;((socketStatus[index] | <a class="el" href="../../d9/d17/pal__network_8h.html#aa66d7131cc6c44ac6c5ab6a9dda3f69a">PAL_NET_SOCKET_SELECT_ERR_BIT</a>) != 0) /*! check if ERR bit is set in select result for a given socket index*/</td></tr>
+<tr class="separator:ac2b7451d38e150079fbef20b57ee3fe9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ac844634680241bad287771f1ab8b0901"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a></td></tr>
+<tr class="separator:ac844634680241bad287771f1ab8b0901"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0bd9e160ca4973db4d846a4369ea996"><td class="memItemLeft" align="right" valign="top">typedef void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a></td></tr>
+<tr class="separator:ac0bd9e160ca4973db4d846a4369ea996"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e444742ff895f63c34f727b4fcfba10"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="../../db/d42/structpal_socket_address.html">palSocketAddress</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a></td></tr>
+<tr class="separator:a9e444742ff895f63c34f727b4fcfba10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab74987f80f6b9b025ed9f067a2c654da"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="../../d9/d16/structpal_net_interface_info.html">palNetInterfaceInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a></td></tr>
+<tr class="separator:ab74987f80f6b9b025ed9f067a2c654da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03e2ae5a01f21cf32933bf4bdca5e5b1"><td class="memItemLeft" align="right" valign="top">typedef uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">palIpV4Addr_t</a>[<a class="el" href="../../d9/d17/pal__network_8h.html#ad7a3e182cb430da7c139858b0bfbb27f">PAL_IPV4_ADDRESS_SIZE</a>]</td></tr>
+<tr class="separator:a03e2ae5a01f21cf32933bf4bdca5e5b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad47edc267b97d7b32e30b45ad4674192"><td class="memItemLeft" align="right" valign="top">typedef uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">palIpV6Addr_t</a>[<a class="el" href="../../d9/d17/pal__network_8h.html#a9903ebae215b70520c8dcc9f0aa03e24">PAL_IPV6_ADDRESS_SIZE</a>]</td></tr>
+<tr class="separator:ad47edc267b97d7b32e30b45ad4674192"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab8ff1c2207a2f7c219088008fbc99ff4"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="../../de/dfc/structpal__time_val.html">pal_timeVal</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a></td></tr>
+<tr class="separator:ab8ff1c2207a2f7c219088008fbc99ff4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:a01b7e0ab9c2845885f6a7e012002dba7"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a> { <a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7af6e1af9f402ae053ad1ac009b61957c3">PAL_AF_UNSPEC</a> = 0, 
+<a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a9420d0656d763eeeb6c97243e0514f4f">PAL_AF_INET</a> = 2, 
+<a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a7375b598bd48e43e8869594d96b2c0d7">PAL_AF_INET6</a> = 10
+ }</td></tr>
+<tr class="separator:a01b7e0ab9c2845885f6a7e012002dba7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5d2c3c0d3b2f0e08afcd0d53ff4c418"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a> { <a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418a14e907287d0ede1306aa35f5687e0941">PAL_SOCK_DGRAM</a> = 2
+ }</td></tr>
+<tr class="separator:ab5d2c3c0d3b2f0e08afcd0d53ff4c418"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2694f5de0fb810ddd7ff249ea1478f51"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a> { <a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a352587a3fea85695be1ce478aa3da001">PAL_SO_REUSEADDR</a> = 0x0004, 
+<a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51aa744f783051825333c23177008d140de">PAL_SO_SNDTIMEO</a> = 0x1005, 
+<a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a9e1ad5d4670e06bb2a8b110c0ba3e5ca">PAL_SO_RCVTIMEO</a> = 0x1006
+ }</td></tr>
+<tr class="separator:a2694f5de0fb810ddd7ff249ea1478f51"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a081cc2fd09644c41068673487b39f6b8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a081cc2fd09644c41068673487b39f6b8">pal_registerNetworkInterface</a> (void *networkInterfaceContext, uint32_t *interfaceIndex)</td></tr>
+<tr class="separator:a081cc2fd09644c41068673487b39f6b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abbeb1395896eb79ab564568b9ab8a628"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#abbeb1395896eb79ab564568b9ab8a628">pal_setSockAddrPort</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, uint16_t port)</td></tr>
+<tr class="separator:abbeb1395896eb79ab564568b9ab8a628"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed02a6f53b88e1d5e81607b1221a3efa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#aed02a6f53b88e1d5e81607b1221a3efa">pal_setSockAddrIPV4Addr</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, <a class="el" href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">palIpV4Addr_t</a> ipV4Addr)</td></tr>
+<tr class="separator:aed02a6f53b88e1d5e81607b1221a3efa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0cc13f7ef9ceb4a75884a8bebf0d831c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a0cc13f7ef9ceb4a75884a8bebf0d831c">pal_setSockAddrIPV6Addr</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, <a class="el" href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">palIpV6Addr_t</a> ipV6Addr)</td></tr>
+<tr class="separator:a0cc13f7ef9ceb4a75884a8bebf0d831c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade5cf610808db5462666465b648e7724"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ade5cf610808db5462666465b648e7724">pal_getSockAddrIPV4Addr</a> (const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, <a class="el" href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">palIpV4Addr_t</a> ipV4Addr)</td></tr>
+<tr class="separator:ade5cf610808db5462666465b648e7724"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a153bc6165f64bbf3e6bcc79b0d39138f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a153bc6165f64bbf3e6bcc79b0d39138f">pal_getSockAddrIPV6Addr</a> (const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, <a class="el" href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">palIpV6Addr_t</a> ipV6Addr)</td></tr>
+<tr class="separator:a153bc6165f64bbf3e6bcc79b0d39138f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4658c7e8224b536d4fd71fed2602b12e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a4658c7e8224b536d4fd71fed2602b12e">pal_getSockAddrPort</a> (const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *address, uint16_t *port)</td></tr>
+<tr class="separator:a4658c7e8224b536d4fd71fed2602b12e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa852fb6e271fb91efd65e2a1ead93b9a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a> domain, <a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a> type, bool nonBlockingSocket, uint32_t interfaceNum, <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *socket)</td></tr>
+<tr class="separator:aa852fb6e271fb91efd65e2a1ead93b9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d9d4e04e43995123efe134c767cd6e1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a2d9d4e04e43995123efe134c767cd6e1">pal_getSocketOptions</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a> optionName, void *optionValue, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *optionLength)</td></tr>
+<tr class="separator:a2d9d4e04e43995123efe134c767cd6e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e1bbe81a35a1cb54c351912bb97736f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a2e1bbe81a35a1cb54c351912bb97736f">pal_setSocketOptions</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, int optionName, const void *optionValue, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> optionLength)</td></tr>
+<tr class="separator:a2e1bbe81a35a1cb54c351912bb97736f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac1ff0fb22cbd84e6c7920c095ddbde63"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#ac1ff0fb22cbd84e6c7920c095ddbde63">pal_bind</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *myAddress, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> addressLength)</td></tr>
+<tr class="separator:ac1ff0fb22cbd84e6c7920c095ddbde63"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b5e705be1e7c3c16080f2b05b87ff7d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a6b5e705be1e7c3c16080f2b05b87ff7d">pal_receiveFrom</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, void *buffer, size_t length, <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *from, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *fromLength, size_t *bytesReceived)</td></tr>
+<tr class="separator:a6b5e705be1e7c3c16080f2b05b87ff7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acce808f708e653b6bed317072888ca23"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#acce808f708e653b6bed317072888ca23">pal_sendTo</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, const void *buffer, size_t length, const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *to, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> toLength, size_t *bytesSent)</td></tr>
+<tr class="separator:acce808f708e653b6bed317072888ca23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18197e0f047f17d2617461594f5ed644"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a18197e0f047f17d2617461594f5ed644">pal_close</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *socket)</td></tr>
+<tr class="separator:a18197e0f047f17d2617461594f5ed644"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65df7c68bcf7a21db5d1a7a3830fd19c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a65df7c68bcf7a21db5d1a7a3830fd19c">pal_getNumberOfNetInterfaces</a> (uint32_t *numInterfaces)</td></tr>
+<tr class="separator:a65df7c68bcf7a21db5d1a7a3830fd19c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5258efd8b21d9c881df29b29686674d8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a5258efd8b21d9c881df29b29686674d8">pal_getNetInterfaceInfo</a> (uint32_t interfaceNum, <a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a> *interfaceInfo)</td></tr>
+<tr class="separator:a5258efd8b21d9c881df29b29686674d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5cab4ea55a3d28cfd8d4dca8376a111c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d17/pal__network_8h.html#a5cab4ea55a3d28cfd8d4dca8376a111c">pal_socketMiniSelect</a> (const <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socketsToCheck[<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>], uint32_t numberOfSockets, <a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a> *timeout, uint8_t palSocketStatus[<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>], uint32_t *numberOfSocketsSet)</td></tr>
+<tr class="separator:a5cab4ea55a3d28cfd8d4dca8376a111c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="ad7a3e182cb430da7c139858b0bfbb27f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_IPV4_ADDRESS_SIZE&#160;&#160;&#160;4</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9903ebae215b70520c8dcc9f0aa03e24"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_IPV6_ADDRESS_SIZE&#160;&#160;&#160;16</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aefc09884590381a71433c34b3f2e2aa5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_DEFAULT_INTERFACE&#160;&#160;&#160;0xFFFFFFFF</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>socket options supported by PAL </p>
+
+</div>
+</div>
+<a class="anchor" id="ac831e2e5064065e10c741da1003ff039"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_MAX_ADDR_SIZE&#160;&#160;&#160;32</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>PAL socket handle type </p>
+
+</div>
+</div>
+<a class="anchor" id="ac2b7451d38e150079fbef20b57ee3fe9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_SELECT_IS_ERR</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">socketStatus, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">index&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td>&#160;&#160;&#160;((socketStatus[index] | <a class="el" href="../../d9/d17/pal__network_8h.html#aa66d7131cc6c44ac6c5ab6a9dda3f69a">PAL_NET_SOCKET_SELECT_ERR_BIT</a>) != 0) /*! check if ERR bit is set in select result for a given socket index*/</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8894a96773018ba6058811087b4b2ac8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_SELECT_IS_RX</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">socketStatus, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">index&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td>&#160;&#160;&#160;((socketStatus[index] | <a class="el" href="../../d9/d17/pal__network_8h.html#aae14933b48cd31821913f2bfb15e18b2">PAL_NET_SOCKET_SELECT_RX_BIT</a>) != 0) /*! check if RX bit is set in select result for a given socket index*/</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a31ca79ac9ae5c2ddd890263a989fc4d8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_SELECT_IS_TX</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">socketStatus, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">index&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td>&#160;&#160;&#160;((socketStatus[index] | <a class="el" href="../../d9/d17/pal__network_8h.html#ad8ddc879cf2eace65036137660b8b53d">PAL_NET_SOCKET_SELECT_TX_BIT</a>) != 0) /*! check if TX bit is set in select result for a given socket index*/</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa66d7131cc6c44ac6c5ab6a9dda3f69a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_SOCKET_SELECT_ERR_BIT&#160;&#160;&#160;(4)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5607f2af4b642ef0548bd47c891c6d31"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_SOCKET_SELECT_MAX_SOCKETS&#160;&#160;&#160;8</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aae14933b48cd31821913f2bfb15e18b2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_SOCKET_SELECT_RX_BIT&#160;&#160;&#160;(1)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad8ddc879cf2eace65036137660b8b53d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NET_SOCKET_SELECT_TX_BIT&#160;&#160;&#160;(2)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="ab8ff1c2207a2f7c219088008fbc99ff4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="../../de/dfc/structpal__time_val.html">pal_timeVal</a>  <a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a03e2ae5a01f21cf32933bf4bdca5e5b1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uint8_t palIpV4Addr_t[<a class="el" href="../../d9/d17/pal__network_8h.html#ad7a3e182cb430da7c139858b0bfbb27f">PAL_IPV4_ADDRESS_SIZE</a>]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad47edc267b97d7b32e30b45ad4674192"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uint8_t palIpV6Addr_t[<a class="el" href="../../d9/d17/pal__network_8h.html#a9903ebae215b70520c8dcc9f0aa03e24">PAL_IPV6_ADDRESS_SIZE</a>]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab74987f80f6b9b025ed9f067a2c654da"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="../../d9/d16/structpal_net_interface_info.html">palNetInterfaceInfo</a>  <a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>address data structure with enough room to support IPV4 and IPV6 </p>
+
+</div>
+</div>
+<a class="anchor" id="ac0bd9e160ca4973db4d846a4369ea996"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef void* <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>length of data </p>
+
+</div>
+</div>
+<a class="anchor" id="a9e444742ff895f63c34f727b4fcfba10"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="../../db/d42/structpal_socket_address.html">palSocketAddress</a>  <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac844634680241bad287771f1ab8b0901"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uint32_t <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>PAL network socket API pal network sockets configurations options: set PAL_NET_TCP_AND_TLS_SUPPORT to true TCP is supported by the platform and is required set PAL_NET_ASYNCHRONOUS_SOCKET_API to true if asynchronous socket API supported by the platform and is required : CURRENTLY MANDATORY set PAL_NET_DNS_SUPPORT to true if you DNS url lookup API is supported. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="a01b7e0ab9c2845885f6a7e012002dba7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a01b7e0ab9c2845885f6a7e012002dba7af6e1af9f402ae053ad1ac009b61957c3"></a>PAL_AF_UNSPEC&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a01b7e0ab9c2845885f6a7e012002dba7a9420d0656d763eeeb6c97243e0514f4f"></a>PAL_AF_INET&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a01b7e0ab9c2845885f6a7e012002dba7a7375b598bd48e43e8869594d96b2c0d7"></a>PAL_AF_INET6&#160;</td><td class="fielddoc">
+<p>Internet IP Protocol </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a2694f5de0fb810ddd7ff249ea1478f51"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>socket types supported by PAL </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a2694f5de0fb810ddd7ff249ea1478f51a352587a3fea85695be1ce478aa3da001"></a>PAL_SO_REUSEADDR&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a2694f5de0fb810ddd7ff249ea1478f51aa744f783051825333c23177008d140de"></a>PAL_SO_SNDTIMEO&#160;</td><td class="fielddoc">
+<p>allow local address reuse </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a2694f5de0fb810ddd7ff249ea1478f51a9e1ad5d4670e06bb2a8b110c0ba3e5ca"></a>PAL_SO_RCVTIMEO&#160;</td><td class="fielddoc">
+<p>send timeout </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="ab5d2c3c0d3b2f0e08afcd0d53ff4c418"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>network domains supported by PAL </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="ab5d2c3c0d3b2f0e08afcd0d53ff4c418a14e907287d0ede1306aa35f5687e0941"></a>PAL_SOCK_DGRAM&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac1ff0fb22cbd84e6c7920c095ddbde63"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_bind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>myAddress</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>addressLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>bind a given socket to a local address </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>the socket to bind </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">myAddress</td><td>the address to which to bind </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">addressLength</td><td>the length of the address passed in myAddress </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a18197e0f047f17d2617461594f5ed644"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_close </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *&#160;</td>
+          <td class="paramname"><em>socket</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>close a network socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">socket</td><td>release and zero socket pointed to by given pointer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>recieves palSocket_t* and not palSocket_t so that it can zero the socket to avoid re-use. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5258efd8b21d9c881df29b29686674d8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getNetInterfaceInfo </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>interfaceNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a> *&#160;</td>
+          <td class="paramname"><em>interfaceInfo</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get information regarding the socket at the index/interface number given (this number is returned when registering the socket) </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">interfaceNum</td><td>the number of the interface to get information for. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">interfaceInfo</td><td>will be set to the information for the given interface number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a65df7c68bcf7a21db5d1a7a3830fd19c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getNumberOfNetInterfaces </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>numInterfaces</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get the number of current network interfaces </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">numInterfaces</td><td>will hold the number of interfaces after a successful call </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ade5cf610808db5462666465b648e7724"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getSockAddrIPV4Addr </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">palIpV4Addr_t</a>&#160;</td>
+          <td class="paramname"><em>ipV4Addr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get an ipV4 address from a palSocketAddress_t </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">ipV4Addr</td><td>the address that is set in the address </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a153bc6165f64bbf3e6bcc79b0d39138f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getSockAddrIPV6Addr </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">palIpV6Addr_t</a>&#160;</td>
+          <td class="paramname"><em>ipV6Addr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get an ipV6 address from a palSocketAddress_t </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">ipV6Addr</td><td>the address that is set in the address </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4658c7e8224b536d4fd71fed2602b12e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getSockAddrPort </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint16_t *&#160;</td>
+          <td class="paramname"><em>port</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get a port from a palSocketAddress_t </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">port</td><td>the port that is set in the address </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2d9d4e04e43995123efe134c767cd6e1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getSocketOptions </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a>&#160;</td>
+          <td class="paramname"><em>optionName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>optionValue</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *&#160;</td>
+          <td class="paramname"><em>optionLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get options for a given network socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>the socket for which to get options </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionName</td><td>for which we are setting the option (see enum PAL_NET_SOCKET_OPTION for supported types) </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">optionValue</td><td>the buffer holding the option value returned by the function </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">optionLength</td><td>the size of the buffer provided for optionValue when calling the function after the call it will contain the length of data actually written to the optionValue buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6b5e705be1e7c3c16080f2b05b87ff7d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_receiveFrom </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>from</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *&#160;</td>
+          <td class="paramname"><em>fromLength</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>bytesReceived</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>receive a payload from the given socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>the socket to receive from [we expect sockets passed to this function to be of type PAL_SOCK_DGRAM ( the implementation may support other types as well) ] </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">buffer</td><td>the buffer for the payload data </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>of the buffer for the payload data </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">from</td><td>the address which sent the payload </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">fromLength</td><td>the length of the 'from' address, after completion will contain the amount of data actually written to the from address </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">bytesReceived</td><td>after the call will contain the actual amount of payload data received to the buffer </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a081cc2fd09644c41068673487b39f6b8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_registerNetworkInterface </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>networkInterfaceContext</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>interfaceIndex</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Register a network interface for use with PAL sockets - must be called before other socket functions - most APIs will not work before a single interface is added. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">networkInterfaceContext</td><td>of the network interface to be added (OS specific , e.g. in MbedOS this is the NetworkInterface object pointer for the network adapter [note: we assume connect has already been called on this]) - if not available use NULL . </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">InterfaceIndex</td><td>will contain the index assigned to the interface in case it has been assigned successfully. this index can be used when creating a socket to bind the socket to the interface. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="acce808f708e653b6bed317072888ca23"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_sendTo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>to</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>toLength</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>bytesSent</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>send a payload to the given address using the given socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>the socket to use for sending the payload [we expect sockets passed to this function to be of type PAL_SOCK_DGRAM ( the implementation may support other types as well) ] </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">buffer</td><td>the buffer for the payload data </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>of the buffer for the payload data </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">to</td><td>the address to which to payload should be sent </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">toLength</td><td>the length of the 'to' address </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">bytesSent</td><td>after the call will contain the actual amount of payload data sent </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aed02a6f53b88e1d5e81607b1221a3efa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_setSockAddrIPV4Addr </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">palIpV4Addr_t</a>&#160;</td>
+          <td class="paramname"><em>ipV4Addr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>set an ipV4 address to a palSocketAddress_t and also set the addressType to ipv4 </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">ipV4Addr</td><td>the address value to set </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a0cc13f7ef9ceb4a75884a8bebf0d831c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_setSockAddrIPV6Addr </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">palIpV6Addr_t</a>&#160;</td>
+          <td class="paramname"><em>ipV6Addr</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>set an ipV6 address to a palSocketAddress_t and also set the addressType to ipv6 </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">ipV6Addr</td><td>the address value to set </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abbeb1395896eb79ab564568b9ab8a628"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_setSockAddrPort </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>port</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>set a port to a palSocketAddress_t setting it can be done either directly or via the palSetSockAddrIPV4Addr or palSetSockAddrIPV6Addr functions </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">address</td><td>the address to set </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">port</td><td>the port number to set </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>for the socket to be set correctly the addressType field of the address must be set correctly. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2e1bbe81a35a1cb54c351912bb97736f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_setSocketOptions </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>optionName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>optionValue</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>optionLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>set options for a given network socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>the socket for which to get options </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionName</td><td>for which we are setting the option (see enum PAL_NET_SOCKET_OPTION for supported types) </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionValue</td><td>the buffer holding the option value to set for the given option </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionLength</td><td>the size of the buffer provided for optionValue </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa852fb6e271fb91efd65e2a1ead93b9a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_socket </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a>&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>nonBlockingSocket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>interfaceNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *&#160;</td>
+          <td class="paramname"><em>socket</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>get a network socket </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">domain</td><td>the domain for the created socket (see palSocketDomain_t for supported types) </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>the type for the created socket (see palSocketType_t for supported types) </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">nonBlockingSocket</td><td>if true the socket created is created as non-blocking (i.e. with O_NONBLOCK set) </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">interfaceNum</td><td>the number of the network interface used for this socket (info in interfaces supported via pal_getNumberOfNetInterfaces and pal_getNetInterfaceInfo ), choose PAL_NET_DEFAULT_INTERFACE for default interface. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">socket</td><td>socket is returned through this output parameter </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5cab4ea55a3d28cfd8d4dca8376a111c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_socketMiniSelect </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socketsToCheck</em>[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>numberOfSockets</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a> *&#160;</td>
+          <td class="paramname"><em>timeout</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>palSocketStatus</em>[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>numberOfSocketsSet</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>check if one or more (up to PAL_NET_SOCKET_SELECT_MAX_SOCKETS) sockets given has data available for reading/writing/error, the function will block until data is available for one of the given sockets or the timeout expires. To use the function: set the sockets you want to check in the socketsToCheck array and set a timeout, when it returns the socketStatus output will indicate the status of each socket passed in. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socketsToCheck</td><td>on input: the array of up to 8 sockets handles to check. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">numberOfSockets</td><td>the number of sockets set in the input socketsToCheck array. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>the amount of time till timeout if no socket activity is detected </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">socketStatus</td><td>will provide information on each socket in the input array indicating which event was set (none, rx, tx, err) check for desired event using macros. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">numberOfSocketsSet</td><td>is the total number of sockets set in all three data sets (tx, rx, err)after the function completes </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the entry in index x in the socketStatus array corresponds to the socket at index x in the sockets to check array. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d9/d17/pal__network_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_network.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_network.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../d9/d17/pal__network_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef _PAL_SOCKET_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define _PAL_SOCKET_H</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d9/d16/pal_8h.html">pal.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">   32</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>; </div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">   33</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span>* <a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>; </div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#ac831e2e5064065e10c741da1003ff039">   35</a></span>&#160;<span class="preprocessor">#define  PAL_NET_MAX_ADDR_SIZE 32 // check if we can make this more efficient</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="../../db/d42/structpal_socket_address.html">   37</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress</a> {</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="../../db/d42/structpal_socket_address.html#a8bdecffc9afacbdf84fc78d26090c221">   38</a></span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>    <a class="code" href="../../db/d42/structpal_socket_address.html#a8bdecffc9afacbdf84fc78d26090c221">addressType</a>;    </div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="../../db/d42/structpal_socket_address.html#a0a5471b518ef60cfa0f28c47a323ec4c">   39</a></span>&#160;    <span class="keywordtype">char</span>              <a class="code" href="../../db/d42/structpal_socket_address.html#a0a5471b518ef60cfa0f28c47a323ec4c">addressData</a>[<a class="code" href="../../d9/d17/pal__network_8h.html#ac831e2e5064065e10c741da1003ff039">PAL_NET_MAX_ADDR_SIZE</a>];  </div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;} <a class="code" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a>; </div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="../../d9/d16/structpal_net_interface_info.html">   42</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="../../d9/d16/structpal_net_interface_info.html">palNetInterfaceInfo</a>{</div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="../../d9/d16/structpal_net_interface_info.html#ad028021cafddc5355dfccfac1345f4f6">   43</a></span>&#160;    <span class="keywordtype">char</span> interfaceName[16]; <span class="comment">//15 + ‘\0’</span></div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="../../d9/d16/structpal_net_interface_info.html#affc930af87e8696f63b30b911cf8b03d">   44</a></span>&#160;    <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a> <a class="code" href="../../d9/d16/structpal_net_interface_info.html#affc930af87e8696f63b30b911cf8b03d">address</a>;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="../../d9/d16/structpal_net_interface_info.html#a9b816dd947f25d303e32fca36d04080e">   45</a></span>&#160;    uint32_t <a class="code" href="../../d9/d16/structpal_net_interface_info.html#a9b816dd947f25d303e32fca36d04080e">addressSize</a>;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;} <a class="code" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a>;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">   48</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7af6e1af9f402ae053ad1ac009b61957c3">   49</a></span>&#160;    <a class="code" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7af6e1af9f402ae053ad1ac009b61957c3">PAL_AF_UNSPEC</a> = 0,</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a9420d0656d763eeeb6c97243e0514f4f">   50</a></span>&#160;    <a class="code" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a9420d0656d763eeeb6c97243e0514f4f">PAL_AF_INET</a> = 2,    </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a7375b598bd48e43e8869594d96b2c0d7">   51</a></span>&#160;    <a class="code" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a7375b598bd48e43e8869594d96b2c0d7">PAL_AF_INET6</a> = 10, </div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;} <a class="code" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">   54</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">#if PAL_NET_TCP_AND_TLS_SUPPORT</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    PAL_SOCK_STREAM = 1,    </div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    PAL_SOCK_STREAM_SERVER = 99,    </div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#endif //PAL_NET_TCP_AND_TLS_SUPPORT</span></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418a14e907287d0ede1306aa35f5687e0941">   59</a></span>&#160;    <a class="code" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418a14e907287d0ede1306aa35f5687e0941">PAL_SOCK_DGRAM</a> = 2  </div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;} <a class="code" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">   63</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a352587a3fea85695be1ce478aa3da001">   64</a></span>&#160;    <a class="code" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a352587a3fea85695be1ce478aa3da001">PAL_SO_REUSEADDR</a> = 0x0004,  </div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#if PAL_NET_TCP_AND_TLS_SUPPORT // socket options below supported only if TCP is supported.</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    PAL_SO_KEEPALIVE = 0x0008, </div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="preprocessor">#endif //PAL_NET_TCP_AND_TLS_SUPPORT</span></div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51aa744f783051825333c23177008d140de">   68</a></span>&#160;    <a class="code" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51aa744f783051825333c23177008d140de">PAL_SO_SNDTIMEO</a> = 0x1005,  </div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a9e1ad5d4670e06bb2a8b110c0ba3e5ca">   69</a></span>&#160;    <a class="code" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a9e1ad5d4670e06bb2a8b110c0ba3e5ca">PAL_SO_RCVTIMEO</a> = 0x1006,  </div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;} <a class="code" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#aefc09884590381a71433c34b3f2e2aa5">   72</a></span>&#160;<span class="preprocessor">#define PAL_NET_DEFAULT_INTERFACE 0xFFFFFFFF</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#ad7a3e182cb430da7c139858b0bfbb27f">   74</a></span>&#160;<span class="preprocessor">#define PAL_IPV4_ADDRESS_SIZE 4</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a9903ebae215b70520c8dcc9f0aa03e24">   75</a></span>&#160;<span class="preprocessor">#define PAL_IPV6_ADDRESS_SIZE 16</span></div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">   77</a></span>&#160;<span class="keyword">typedef</span> uint8_t <a class="code" href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">palIpV4Addr_t</a>[<a class="code" href="../../d9/d17/pal__network_8h.html#ad7a3e182cb430da7c139858b0bfbb27f">PAL_IPV4_ADDRESS_SIZE</a>];</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">   78</a></span>&#160;<span class="keyword">typedef</span> uint8_t <a class="code" href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">palIpV6Addr_t</a>[<a class="code" href="../../d9/d17/pal__network_8h.html#a9903ebae215b70520c8dcc9f0aa03e24">PAL_IPV6_ADDRESS_SIZE</a>];</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="../../de/dfc/structpal__time_val.html">   80</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="../../de/dfc/structpal__time_val.html">pal_timeVal</a>{</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="../../de/dfc/structpal__time_val.html#a8c0bfa9026d4b23b598f0652aa975fcf">   81</a></span>&#160;    int32_t    <a class="code" href="../../de/dfc/structpal__time_val.html#a8c0bfa9026d4b23b598f0652aa975fcf">pal_tv_sec</a>;      </div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="../../de/dfc/structpal__time_val.html#acf8b8c0480064a16325f94f155db4e1c">   82</a></span>&#160;    int32_t    <a class="code" href="../../de/dfc/structpal__time_val.html#acf8b8c0480064a16325f94f155db4e1c">pal_tv_usec</a>;     </div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;} <a class="code" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a>;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#a081cc2fd09644c41068673487b39f6b8">pal_registerNetworkInterface</a>(<span class="keywordtype">void</span>* networkInterfaceContext, uint32_t* interfaceIndex);</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#abbeb1395896eb79ab564568b9ab8a628">pal_setSockAddrPort</a>(<a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, uint16_t port);</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#aed02a6f53b88e1d5e81607b1221a3efa">pal_setSockAddrIPV4Addr</a>(<a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, palIpV4Addr_t ipV4Addr);</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#a0cc13f7ef9ceb4a75884a8bebf0d831c">pal_setSockAddrIPV6Addr</a>(<a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, palIpV6Addr_t ipV6Addr);</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#ade5cf610808db5462666465b648e7724">pal_getSockAddrIPV4Addr</a>(<span class="keyword">const</span> <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, palIpV4Addr_t ipV4Addr);</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#a153bc6165f64bbf3e6bcc79b0d39138f">pal_getSockAddrIPV6Addr</a>(<span class="keyword">const</span> <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, palIpV6Addr_t ipV6Addr);</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#a4658c7e8224b536d4fd71fed2602b12e">pal_getSockAddrPort</a>(<span class="keyword">const</span> <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, uint16_t* port);</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>(<a class="code" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a> domain, <a class="code" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a> type, <span class="keywordtype">bool</span> nonBlockingSocket, uint32_t interfaceNum, palSocket_t* socket);</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#a2d9d4e04e43995123efe134c767cd6e1">pal_getSocketOptions</a>(palSocket_t socket, <a class="code" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a> optionName, <span class="keywordtype">void</span>* optionValue, palSocketLength_t* optionLength);</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#a2e1bbe81a35a1cb54c351912bb97736f">pal_setSocketOptions</a>(palSocket_t socket, <span class="keywordtype">int</span> optionName, <span class="keyword">const</span> <span class="keywordtype">void</span>* optionValue, palSocketLength_t optionLength);</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#ac1ff0fb22cbd84e6c7920c095ddbde63">pal_bind</a>(palSocket_t socket, <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* myAddress, palSocketLength_t addressLength);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#a6b5e705be1e7c3c16080f2b05b87ff7d">pal_receiveFrom</a>(palSocket_t socket, <span class="keywordtype">void</span>* buffer, <span class="keywordtype">size_t</span> length, <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* from, palSocketLength_t* fromLength, <span class="keywordtype">size_t</span>* bytesReceived);</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#acce808f708e653b6bed317072888ca23">pal_sendTo</a>(palSocket_t socket, <span class="keyword">const</span> <span class="keywordtype">void</span>* buffer, <span class="keywordtype">size_t</span> length, <span class="keyword">const</span> <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* to, palSocketLength_t toLength, <span class="keywordtype">size_t</span>* bytesSent);</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#a18197e0f047f17d2617461594f5ed644">pal_close</a>(palSocket_t* socket);</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#a65df7c68bcf7a21db5d1a7a3830fd19c">pal_getNumberOfNetInterfaces</a>(uint32_t* numInterfaces);</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d17/pal__network_8h.html#a5258efd8b21d9c881df29b29686674d8">pal_getNetInterfaceInfo</a>(uint32_t interfaceNum, <a class="code" href="../../d9/d16/structpal_net_interface_info.html">palNetInterfaceInfo_t</a>* interfaceInfo);</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">  216</a></span>&#160;<span class="preprocessor">#define PAL_NET_SOCKET_SELECT_MAX_SOCKETS 8</span></div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#aae14933b48cd31821913f2bfb15e18b2">  217</a></span>&#160;<span class="preprocessor">#define PAL_NET_SOCKET_SELECT_RX_BIT (1)</span></div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#ad8ddc879cf2eace65036137660b8b53d">  218</a></span>&#160;<span class="preprocessor">#define PAL_NET_SOCKET_SELECT_TX_BIT (2)</span></div><div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#aa66d7131cc6c44ac6c5ab6a9dda3f69a">  219</a></span>&#160;<span class="preprocessor">#define PAL_NET_SOCKET_SELECT_ERR_BIT (4)</span></div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a8894a96773018ba6058811087b4b2ac8">  221</a></span>&#160;<span class="preprocessor">#define PAL_NET_SELECT_IS_RX(socketStatus, index)   ((socketStatus[index] | PAL_NET_SOCKET_SELECT_RX_BIT) != 0) </span></div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#a31ca79ac9ae5c2ddd890263a989fc4d8">  222</a></span>&#160;<span class="preprocessor">#define PAL_NET_SELECT_IS_TX(socketStatus, index)   ((socketStatus[index] | PAL_NET_SOCKET_SELECT_TX_BIT) != 0) </span></div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="../../d9/d17/pal__network_8h.html#ac2b7451d38e150079fbef20b57ee3fe9">  223</a></span>&#160;<span class="preprocessor">#define PAL_NET_SELECT_IS_ERR(socketStatus, index)  ((socketStatus[index] | PAL_NET_SOCKET_SELECT_ERR_BIT) != 0) </span></div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;<span class="preprocessor">palStatus_t pal_socketMiniSelect(const palSocket_t socketsToCheck[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t numberOfSockets, pal_timeVal_t* timeout,</span></div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;                                uint8_t palSocketStatus[<a class="code" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>], uint32_t* numberOfSocketsSet);</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;<span class="preprocessor">#if PAL_NET_TCP_AND_TLS_SUPPORT // functionality below supported only in case TCP is supported.</span></div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_listen(palSocket_t socket, <span class="keywordtype">int</span> backlog);</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_accept(palSocket_t socket, <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, palSocketLength_t* addressLen, palSocket_t* acceptedSocket);</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_connect(palSocket_t socket, <span class="keyword">const</span> <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, palSocketLength_t addressLen);</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_recv(palSocket_t socket, <span class="keywordtype">void</span>* buf, <span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span>* recievedDataSize);</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_send(palSocket_t socket, <span class="keyword">const</span> <span class="keywordtype">void</span>* buf, <span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span>* sentDataSize);</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;<span class="preprocessor">#endif //PAL_NET_TCP_AND_TLS_SUPPORT</span></div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;<span class="preprocessor">#if PAL_NET_ASYNCHRONOUS_SOCKET_API</span></div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;<span class="keyword">typedef</span> void(*palAsyncSocketCallback_t)();</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_asynchronousSocket(<a class="code" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a> domain, <a class="code" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a> type, <span class="keywordtype">bool</span> nonBlockingSocket, uint32_t interfaceNum, palAsyncSocketCallback_t callback, palSocket_t* socket);</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="preprocessor">#if PAL_NET_DNS_SUPPORT</span></div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_getAddressInfo(<span class="keyword">const</span> <span class="keywordtype">char</span>* url, <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, palSocketLength_t* addressLength);</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;}</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;<span class="preprocessor">#endif //_PAL_SOCKET_H</span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;</div><div class="ttc" id="pal__network_8h_html_a4658c7e8224b536d4fd71fed2602b12e"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a4658c7e8224b536d4fd71fed2602b12e">pal_getSockAddrPort</a></div><div class="ttdeci">palStatus_t pal_getSockAddrPort(const palSocketAddress_t *address, uint16_t *port)</div><div class="ttdef"><b>Definition:</b> pal_network.c:153</div></div>
+<div class="ttc" id="pal_8h_html"><div class="ttname"><a href="../../d9/d16/pal_8h.html">pal.h</a></div></div>
+<div class="ttc" id="pal__network_8h_html_acce808f708e653b6bed317072888ca23"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#acce808f708e653b6bed317072888ca23">pal_sendTo</a></div><div class="ttdeci">palStatus_t pal_sendTo(palSocket_t socket, const void *buffer, size_t length, const palSocketAddress_t *to, palSocketLength_t toLength, size_t *bytesSent)</div><div class="ttdef"><b>Definition:</b> pal_network.c:240</div></div>
+<div class="ttc" id="structpal__time_val_html_acf8b8c0480064a16325f94f155db4e1c"><div class="ttname"><a href="../../de/dfc/structpal__time_val.html#acf8b8c0480064a16325f94f155db4e1c">pal_timeVal::pal_tv_usec</a></div><div class="ttdeci">int32_t pal_tv_usec</div><div class="ttdef"><b>Definition:</b> pal_network.h:82</div></div>
+<div class="ttc" id="pal__network_8h_html_a18197e0f047f17d2617461594f5ed644"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a18197e0f047f17d2617461594f5ed644">pal_close</a></div><div class="ttdeci">palStatus_t pal_close(palSocket_t *socket)</div><div class="ttdef"><b>Definition:</b> pal_network.c:252</div></div>
+<div class="ttc" id="pal__network_8h_html_a153bc6165f64bbf3e6bcc79b0d39138f"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a153bc6165f64bbf3e6bcc79b0d39138f">pal_getSockAddrIPV6Addr</a></div><div class="ttdeci">palStatus_t pal_getSockAddrIPV6Addr(const palSocketAddress_t *address, palIpV6Addr_t ipV6Addr)</div><div class="ttdef"><b>Definition:</b> pal_network.c:133</div></div>
+<div class="ttc" id="pal__network_8h_html_a01b7e0ab9c2845885f6a7e012002dba7af6e1af9f402ae053ad1ac009b61957c3"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7af6e1af9f402ae053ad1ac009b61957c3">PAL_AF_UNSPEC</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:49</div></div>
+<div class="ttc" id="pal__network_8h_html_a081cc2fd09644c41068673487b39f6b8"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a081cc2fd09644c41068673487b39f6b8">pal_registerNetworkInterface</a></div><div class="ttdeci">palStatus_t pal_registerNetworkInterface(void *networkInterfaceContext, uint32_t *interfaceIndex)</div><div class="ttdef"><b>Definition:</b> pal_network.c:43</div></div>
+<div class="ttc" id="pal__network_8h_html_ab74987f80f6b9b025ed9f067a2c654da"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a></div><div class="ttdeci">struct palNetInterfaceInfo palNetInterfaceInfo_t</div></div>
+<div class="ttc" id="pal__network_8h_html_ac844634680241bad287771f1ab8b0901"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a></div><div class="ttdeci">uint32_t palSocketLength_t</div><div class="ttdef"><b>Definition:</b> pal_network.h:32</div></div>
+<div class="ttc" id="pal__network_8h_html_a5258efd8b21d9c881df29b29686674d8"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a5258efd8b21d9c881df29b29686674d8">pal_getNetInterfaceInfo</a></div><div class="ttdeci">palStatus_t pal_getNetInterfaceInfo(uint32_t interfaceNum, palNetInterfaceInfo_t *interfaceInfo)</div><div class="ttdef"><b>Definition:</b> pal_network.c:276</div></div>
+<div class="ttc" id="pal__network_8h_html_a03e2ae5a01f21cf32933bf4bdca5e5b1"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">palIpV4Addr_t</a></div><div class="ttdeci">uint8_t palIpV4Addr_t[PAL_IPV4_ADDRESS_SIZE]</div><div class="ttdef"><b>Definition:</b> pal_network.h:77</div></div>
+<div class="ttc" id="pal__network_8h_html_ab5d2c3c0d3b2f0e08afcd0d53ff4c418a14e907287d0ede1306aa35f5687e0941"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418a14e907287d0ede1306aa35f5687e0941">PAL_SOCK_DGRAM</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:59</div></div>
+<div class="ttc" id="structpal_net_interface_info_html_affc930af87e8696f63b30b911cf8b03d"><div class="ttname"><a href="../../d9/d16/structpal_net_interface_info.html#affc930af87e8696f63b30b911cf8b03d">palNetInterfaceInfo::address</a></div><div class="ttdeci">palSocketAddress_t address</div><div class="ttdef"><b>Definition:</b> pal_network.h:44</div></div>
+<div class="ttc" id="pal__network_8h_html_ac0bd9e160ca4973db4d846a4369ea996"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a></div><div class="ttdeci">void * palSocket_t</div><div class="ttdef"><b>Definition:</b> pal_network.h:33</div></div>
+<div class="ttc" id="pal__network_8h_html_a2e1bbe81a35a1cb54c351912bb97736f"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a2e1bbe81a35a1cb54c351912bb97736f">pal_setSocketOptions</a></div><div class="ttdeci">palStatus_t pal_setSocketOptions(palSocket_t socket, int optionName, const void *optionValue, palSocketLength_t optionLength)</div><div class="ttdef"><b>Definition:</b> pal_network.c:204</div></div>
+<div class="ttc" id="pal__network_8h_html_a2d9d4e04e43995123efe134c767cd6e1"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a2d9d4e04e43995123efe134c767cd6e1">pal_getSocketOptions</a></div><div class="ttdeci">palStatus_t pal_getSocketOptions(palSocket_t socket, palSocketOptionName_t optionName, void *optionValue, palSocketLength_t *optionLength)</div><div class="ttdef"><b>Definition:</b> pal_network.c:192</div></div>
+<div class="ttc" id="pal__network_8h_html_a0cc13f7ef9ceb4a75884a8bebf0d831c"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a0cc13f7ef9ceb4a75884a8bebf0d831c">pal_setSockAddrIPV6Addr</a></div><div class="ttdeci">palStatus_t pal_setSockAddrIPV6Addr(palSocketAddress_t *address, palIpV6Addr_t ipV6Addr)</div><div class="ttdef"><b>Definition:</b> pal_network.c:91</div></div>
+<div class="ttc" id="pal__network_8h_html_a01b7e0ab9c2845885f6a7e012002dba7a7375b598bd48e43e8869594d96b2c0d7"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a7375b598bd48e43e8869594d96b2c0d7">PAL_AF_INET6</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:51</div></div>
+<div class="ttc" id="structpal_socket_address_html_a8bdecffc9afacbdf84fc78d26090c221"><div class="ttname"><a href="../../db/d42/structpal_socket_address.html#a8bdecffc9afacbdf84fc78d26090c221">palSocketAddress::addressType</a></div><div class="ttdeci">unsigned short addressType</div><div class="ttdef"><b>Definition:</b> pal_network.h:38</div></div>
+<div class="ttc" id="structpal__time_val_html_a8c0bfa9026d4b23b598f0652aa975fcf"><div class="ttname"><a href="../../de/dfc/structpal__time_val.html#a8c0bfa9026d4b23b598f0652aa975fcf">pal_timeVal::pal_tv_sec</a></div><div class="ttdeci">int32_t pal_tv_sec</div><div class="ttdef"><b>Definition:</b> pal_network.h:81</div></div>
+<div class="ttc" id="pal__network_8h_html_ab5d2c3c0d3b2f0e08afcd0d53ff4c418"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a></div><div class="ttdeci">palSocketType_t</div><div class="ttdef"><b>Definition:</b> pal_network.h:54</div></div>
+<div class="ttc" id="structpal_net_interface_info_html"><div class="ttname"><a href="../../d9/d16/structpal_net_interface_info.html">palNetInterfaceInfo</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:42</div></div>
+<div class="ttc" id="pal__network_8h_html_abbeb1395896eb79ab564568b9ab8a628"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#abbeb1395896eb79ab564568b9ab8a628">pal_setSockAddrPort</a></div><div class="ttdeci">palStatus_t pal_setSockAddrPort(palSocketAddress_t *address, uint16_t port)</div><div class="ttdef"><b>Definition:</b> pal_network.c:51</div></div>
+<div class="ttc" id="pal__network_8h_html_a2694f5de0fb810ddd7ff249ea1478f51a9e1ad5d4670e06bb2a8b110c0ba3e5ca"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a9e1ad5d4670e06bb2a8b110c0ba3e5ca">PAL_SO_RCVTIMEO</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:69</div></div>
+<div class="ttc" id="pal__network_8h_html_a2694f5de0fb810ddd7ff249ea1478f51"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a></div><div class="ttdeci">palSocketOptionName_t</div><div class="ttdef"><b>Definition:</b> pal_network.h:63</div></div>
+<div class="ttc" id="pal__network_8h_html_a9e444742ff895f63c34f727b4fcfba10"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a></div><div class="ttdeci">struct palSocketAddress palSocketAddress_t</div></div>
+<div class="ttc" id="pal__network_8h_html_a2694f5de0fb810ddd7ff249ea1478f51a352587a3fea85695be1ce478aa3da001"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a352587a3fea85695be1ce478aa3da001">PAL_SO_REUSEADDR</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:64</div></div>
+<div class="ttc" id="structpal_net_interface_info_html_a9b816dd947f25d303e32fca36d04080e"><div class="ttname"><a href="../../d9/d16/structpal_net_interface_info.html#a9b816dd947f25d303e32fca36d04080e">palNetInterfaceInfo::addressSize</a></div><div class="ttdeci">uint32_t addressSize</div><div class="ttdef"><b>Definition:</b> pal_network.h:45</div></div>
+<div class="ttc" id="pal__network_8h_html_ac1ff0fb22cbd84e6c7920c095ddbde63"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ac1ff0fb22cbd84e6c7920c095ddbde63">pal_bind</a></div><div class="ttdeci">palStatus_t pal_bind(palSocket_t socket, palSocketAddress_t *myAddress, palSocketLength_t addressLength)</div><div class="ttdef"><b>Definition:</b> pal_network.c:216</div></div>
+<div class="ttc" id="pal__network_8h_html_ad47edc267b97d7b32e30b45ad4674192"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">palIpV6Addr_t</a></div><div class="ttdeci">uint8_t palIpV6Addr_t[PAL_IPV6_ADDRESS_SIZE]</div><div class="ttdef"><b>Definition:</b> pal_network.h:78</div></div>
+<div class="ttc" id="pal__network_8h_html_ade5cf610808db5462666465b648e7724"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ade5cf610808db5462666465b648e7724">pal_getSockAddrIPV4Addr</a></div><div class="ttdeci">palStatus_t pal_getSockAddrIPV4Addr(const palSocketAddress_t *address, palIpV4Addr_t ipV4Addr)</div><div class="ttdef"><b>Definition:</b> pal_network.c:109</div></div>
+<div class="ttc" id="pal__network_8h_html_ad7a3e182cb430da7c139858b0bfbb27f"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ad7a3e182cb430da7c139858b0bfbb27f">PAL_IPV4_ADDRESS_SIZE</a></div><div class="ttdeci">#define PAL_IPV4_ADDRESS_SIZE</div><div class="ttdef"><b>Definition:</b> pal_network.h:74</div></div>
+<div class="ttc" id="pal__network_8h_html_a9903ebae215b70520c8dcc9f0aa03e24"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a9903ebae215b70520c8dcc9f0aa03e24">PAL_IPV6_ADDRESS_SIZE</a></div><div class="ttdeci">#define PAL_IPV6_ADDRESS_SIZE</div><div class="ttdef"><b>Definition:</b> pal_network.h:75</div></div>
+<div class="ttc" id="pal__network_8h_html_aed02a6f53b88e1d5e81607b1221a3efa"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#aed02a6f53b88e1d5e81607b1221a3efa">pal_setSockAddrIPV4Addr</a></div><div class="ttdeci">palStatus_t pal_setSockAddrIPV4Addr(palSocketAddress_t *address, palIpV4Addr_t ipV4Addr)</div><div class="ttdef"><b>Definition:</b> pal_network.c:78</div></div>
+<div class="ttc" id="pal__network_8h_html_a5607f2af4b642ef0548bd47c891c6d31"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a></div><div class="ttdeci">#define PAL_NET_SOCKET_SELECT_MAX_SOCKETS</div><div class="ttdef"><b>Definition:</b> pal_network.h:216</div></div>
+<div class="ttc" id="pal__network_8h_html_a65df7c68bcf7a21db5d1a7a3830fd19c"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a65df7c68bcf7a21db5d1a7a3830fd19c">pal_getNumberOfNetInterfaces</a></div><div class="ttdeci">palStatus_t pal_getNumberOfNetInterfaces(uint32_t *numInterfaces)</div><div class="ttdef"><b>Definition:</b> pal_network.c:264</div></div>
+<div class="ttc" id="pal__network_8h_html_ac831e2e5064065e10c741da1003ff039"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ac831e2e5064065e10c741da1003ff039">PAL_NET_MAX_ADDR_SIZE</a></div><div class="ttdeci">#define PAL_NET_MAX_ADDR_SIZE</div><div class="ttdef"><b>Definition:</b> pal_network.h:35</div></div>
+<div class="ttc" id="pal__network_8h_html_a2694f5de0fb810ddd7ff249ea1478f51aa744f783051825333c23177008d140de"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51aa744f783051825333c23177008d140de">PAL_SO_SNDTIMEO</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:68</div></div>
+<div class="ttc" id="structpal_socket_address_html_a0a5471b518ef60cfa0f28c47a323ec4c"><div class="ttname"><a href="../../db/d42/structpal_socket_address.html#a0a5471b518ef60cfa0f28c47a323ec4c">palSocketAddress::addressData</a></div><div class="ttdeci">char addressData[PAL_NET_MAX_ADDR_SIZE]</div><div class="ttdef"><b>Definition:</b> pal_network.h:39</div></div>
+<div class="ttc" id="pal__network_8h_html_ab8ff1c2207a2f7c219088008fbc99ff4"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a></div><div class="ttdeci">struct pal_timeVal pal_timeVal_t</div></div>
+<div class="ttc" id="pal__types_8h_html_a160277354e86b9aea01d7689ec26d88d"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a></div><div class="ttdeci">int32_t palStatus_t</div><div class="ttdef"><b>Definition:</b> pal_types.h:31</div></div>
+<div class="ttc" id="structpal__time_val_html"><div class="ttname"><a href="../../de/dfc/structpal__time_val.html">pal_timeVal</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:80</div></div>
+<div class="ttc" id="pal__network_8h_html_aa852fb6e271fb91efd65e2a1ead93b9a"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a></div><div class="ttdeci">palStatus_t pal_socket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palSocket_t *socket)</div><div class="ttdef"><b>Definition:</b> pal_network.c:180</div></div>
+<div class="ttc" id="pal__network_8h_html_a01b7e0ab9c2845885f6a7e012002dba7a9420d0656d763eeeb6c97243e0514f4f"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a9420d0656d763eeeb6c97243e0514f4f">PAL_AF_INET</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:50</div></div>
+<div class="ttc" id="pal__network_8h_html_a6b5e705be1e7c3c16080f2b05b87ff7d"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a6b5e705be1e7c3c16080f2b05b87ff7d">pal_receiveFrom</a></div><div class="ttdeci">palStatus_t pal_receiveFrom(palSocket_t socket, void *buffer, size_t length, palSocketAddress_t *from, palSocketLength_t *fromLength, size_t *bytesReceived)</div><div class="ttdef"><b>Definition:</b> pal_network.c:228</div></div>
+<div class="ttc" id="pal__network_8h_html_a01b7e0ab9c2845885f6a7e012002dba7"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a></div><div class="ttdeci">palSocketDomain_t</div><div class="ttdef"><b>Definition:</b> pal_network.h:48</div></div>
+<div class="ttc" id="structpal_socket_address_html"><div class="ttname"><a href="../../db/d42/structpal_socket_address.html">palSocketAddress</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:37</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d9/d28/pal__rtos__test__utils_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,494 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Common/pal_rtos_test_utils.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_f8e9a069a0807d5f7341f9bc5892e16f.html">Common</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_rtos_test_utils.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d6/dc2/pal__types_8h_source.html">pal_types.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d4/d01/pal__rtos_8h_source.html">pal_rtos.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d0/d51/pal__test__utils_8h_source.html">pal_test_utils.h</a>&quot;</code><br />
+</div>
+<p><a href="../../d9/d28/pal__rtos__test__utils_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d30/structthreads_argument.html">threadsArgument</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d2c/structtimer_argument.html">timerArgument</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a90b7a8cb7bc3fdbd98014a3e15ee6e9a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a90b7a8cb7bc3fdbd98014a3e15ee6e9a">THREAD_STACK_SIZE</a>&#160;&#160;&#160;1024*sizeof(uint32_t)</td></tr>
+<tr class="separator:a90b7a8cb7bc3fdbd98014a3e15ee6e9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3c2c737bcf6b45c3bf394dfe8349c4d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#ae3c2c737bcf6b45c3bf394dfe8349c4d">MEMORY_POOL1_BLOCK_SIZE</a>&#160;&#160;&#160;32</td></tr>
+<tr class="separator:ae3c2c737bcf6b45c3bf394dfe8349c4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c0ce22bdba74fe398c6adefbc7fbbdf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a3c0ce22bdba74fe398c6adefbc7fbbdf">MEMORY_POOL1_BLOCK_COUNT</a>&#160;&#160;&#160;5</td></tr>
+<tr class="separator:a3c0ce22bdba74fe398c6adefbc7fbbdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c85d7e7f47d26444477603d8e2fd5d5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a3c85d7e7f47d26444477603d8e2fd5d5">MEMORY_POOL2_BLOCK_SIZE</a>&#160;&#160;&#160;12</td></tr>
+<tr class="separator:a3c85d7e7f47d26444477603d8e2fd5d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a593d40fc26d9d1664c57988a846a888e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a593d40fc26d9d1664c57988a846a888e">MEMORY_POOL2_BLOCK_COUNT</a>&#160;&#160;&#160;4</td></tr>
+<tr class="separator:a593d40fc26d9d1664c57988a846a888e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a33d89580fea8198de226a62220e20bd0"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="../../d3/d30/structthreads_argument.html">threadsArgument</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">threadsArgument_t</a></td></tr>
+<tr class="separator:a33d89580fea8198de226a62220e20bd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c22b8a190b07232b36b748fbf706e76"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="../../dc/d2c/structtimer_argument.html">timerArgument</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">timerArgument_t</a></td></tr>
+<tr class="separator:a8c22b8a190b07232b36b748fbf706e76"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a0a153da028aee8f220377b516ff065c8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a0a153da028aee8f220377b516ff065c8">palThreadFunc1</a> (void const *argument)</td></tr>
+<tr class="separator:a0a153da028aee8f220377b516ff065c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29dc69cbcc48b55d48a5fd668da7fe15"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a29dc69cbcc48b55d48a5fd668da7fe15">palThreadFunc2</a> (void const *argument)</td></tr>
+<tr class="separator:a29dc69cbcc48b55d48a5fd668da7fe15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf68b041960be3c58f516986504fcd0f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#acf68b041960be3c58f516986504fcd0f">palThreadFunc3</a> (void const *argument)</td></tr>
+<tr class="separator:acf68b041960be3c58f516986504fcd0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a844c7469189866b502ef85df5063e79c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a844c7469189866b502ef85df5063e79c">palThreadFunc4</a> (void const *argument)</td></tr>
+<tr class="separator:a844c7469189866b502ef85df5063e79c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5be7a07498de9cc847215e6aa8f77914"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a5be7a07498de9cc847215e6aa8f77914">palThreadFunc5</a> (void const *argument)</td></tr>
+<tr class="separator:a5be7a07498de9cc847215e6aa8f77914"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a52dc025f6020b0d456bbbcacc3aa4e3e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a52dc025f6020b0d456bbbcacc3aa4e3e">palThreadFunc6</a> (void const *argument)</td></tr>
+<tr class="separator:a52dc025f6020b0d456bbbcacc3aa4e3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abac822ed4b356b85117101aa0d8701d6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#abac822ed4b356b85117101aa0d8701d6">palTimerFunc1</a> (void const *argument)</td></tr>
+<tr class="separator:abac822ed4b356b85117101aa0d8701d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8581bcb8f9f435a87c3dd651d65e32c8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8581bcb8f9f435a87c3dd651d65e32c8">palTimerFunc2</a> (void const *argument)</td></tr>
+<tr class="separator:a8581bcb8f9f435a87c3dd651d65e32c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7c8c7a38fca8b62acc6094ba1f072ec7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a7c8c7a38fca8b62acc6094ba1f072ec7">palThreadFuncCustom1</a> (void const *argument)</td></tr>
+<tr class="separator:a7c8c7a38fca8b62acc6094ba1f072ec7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a663a9130dc598399ec3bd9ab9e6680fa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a663a9130dc598399ec3bd9ab9e6680fa">palThreadFuncCustom2</a> (void const *argument)</td></tr>
+<tr class="separator:a663a9130dc598399ec3bd9ab9e6680fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a300d95346a90a5f17aa6140647243b64"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a300d95346a90a5f17aa6140647243b64">palThreadFuncCustom3</a> (void const *argument)</td></tr>
+<tr class="separator:a300d95346a90a5f17aa6140647243b64"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa5b1f9c927c18d821a46d99dfe533cb0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#aa5b1f9c927c18d821a46d99dfe533cb0">palThreadFuncCustom4</a> (void const *argument)</td></tr>
+<tr class="separator:aa5b1f9c927c18d821a46d99dfe533cb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a8f9b1f133f82ce955405d453f0c506d6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">threadsArgument_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8f9b1f133f82ce955405d453f0c506d6">g_threadsArg</a></td></tr>
+<tr class="separator:a8f9b1f133f82ce955405d453f0c506d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9beaf51023e475986b8b182c80ccc023"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a9beaf51023e475986b8b182c80ccc023">g_threadStorage</a> [20]</td></tr>
+<tr class="separator:a9beaf51023e475986b8b182c80ccc023"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a09db2f0cd5dd2d0929b34afad51ba1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">timerArgument_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a1a09db2f0cd5dd2d0929b34afad51ba1">g_timerArgs</a></td></tr>
+<tr class="separator:a1a09db2f0cd5dd2d0929b34afad51ba1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb164ebbfd2189f434f5e550e2d93bb4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#adb164ebbfd2189f434f5e550e2d93bb4">mutex1</a></td></tr>
+<tr class="separator:adb164ebbfd2189f434f5e550e2d93bb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8706c6b975e957968f23af2812bbc0cb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8706c6b975e957968f23af2812bbc0cb">mutex2</a></td></tr>
+<tr class="separator:a8706c6b975e957968f23af2812bbc0cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f8d675e43058c8f8b853b52366abf38"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a2f8d675e43058c8f8b853b52366abf38">semaphore1</a></td></tr>
+<tr class="separator:a2f8d675e43058c8f8b853b52366abf38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a3c0ce22bdba74fe398c6adefbc7fbbdf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MEMORY_POOL1_BLOCK_COUNT&#160;&#160;&#160;5</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae3c2c737bcf6b45c3bf394dfe8349c4d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MEMORY_POOL1_BLOCK_SIZE&#160;&#160;&#160;32</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a593d40fc26d9d1664c57988a846a888e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MEMORY_POOL2_BLOCK_COUNT&#160;&#160;&#160;4</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3c85d7e7f47d26444477603d8e2fd5d5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MEMORY_POOL2_BLOCK_SIZE&#160;&#160;&#160;12</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a90b7a8cb7bc3fdbd98014a3e15ee6e9a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define THREAD_STACK_SIZE&#160;&#160;&#160;1024*sizeof(uint32_t)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="a33d89580fea8198de226a62220e20bd0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="../../d3/d30/structthreads_argument.html">threadsArgument</a> <a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">threadsArgument_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8c22b8a190b07232b36b748fbf706e76"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="../../dc/d2c/structtimer_argument.html">timerArgument</a> <a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">timerArgument_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a0a153da028aee8f220377b516ff065c8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc1 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a29dc69cbcc48b55d48a5fd668da7fe15"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc2 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acf68b041960be3c58f516986504fcd0f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc3 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a844c7469189866b502ef85df5063e79c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc4 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5be7a07498de9cc847215e6aa8f77914"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc5 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a52dc025f6020b0d456bbbcacc3aa4e3e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFunc6 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7c8c7a38fca8b62acc6094ba1f072ec7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFuncCustom1 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a663a9130dc598399ec3bd9ab9e6680fa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFuncCustom2 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a300d95346a90a5f17aa6140647243b64"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFuncCustom3 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa5b1f9c927c18d821a46d99dfe533cb0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palThreadFuncCustom4 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abac822ed4b356b85117101aa0d8701d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palTimerFunc1 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8581bcb8f9f435a87c3dd651d65e32c8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palTimerFunc2 </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a8f9b1f133f82ce955405d453f0c506d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">threadsArgument_t</a> g_threadsArg</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9beaf51023e475986b8b182c80ccc023"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t g_threadStorage[20]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1a09db2f0cd5dd2d0929b34afad51ba1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">timerArgument_t</a> g_timerArgs</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adb164ebbfd2189f434f5e550e2d93bb4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutex1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8706c6b975e957968f23af2812bbc0cb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutex2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2f8d675e43058c8f8b853b52366abf38"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphore1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d9/d28/pal__rtos__test__utils_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Common/pal_rtos_test_utils.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_f8e9a069a0807d5f7341f9bc5892e16f.html">Common</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_rtos_test_utils.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../d9/d28/pal__rtos__test__utils_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef _PAL_RTOS_TEST_UTILS_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define _PAL_RTOS_TEST_UTILS_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d6/dc2/pal__types_8h.html">pal_types.h</a>&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d4/d01/pal__rtos_8h.html">pal_rtos.h</a>&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d0/d51/pal__test__utils_8h.html">pal_test_utils.h</a>&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="../../d9/d28/pal__rtos__test__utils_8h.html#a90b7a8cb7bc3fdbd98014a3e15ee6e9a">   24</a></span>&#160;<span class="preprocessor">#define THREAD_STACK_SIZE 1024*sizeof(uint32_t)</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="../../d3/d30/structthreads_argument.html">   26</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="../../d3/d30/structthreads_argument.html">threadsArgument</a>{</div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="../../d3/d30/structthreads_argument.html#a9532cb931dee4c326444e7c366019639">   27</a></span>&#160;    uint32_t <a class="code" href="../../d3/d30/structthreads_argument.html#a9532cb931dee4c326444e7c366019639">arg1</a>;</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="../../d3/d30/structthreads_argument.html#acecc240150225e2786524a2e4b3adf78">   28</a></span>&#160;    uint32_t <a class="code" href="../../d3/d30/structthreads_argument.html#acecc240150225e2786524a2e4b3adf78">arg2</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="../../d3/d30/structthreads_argument.html#abcba9882b15e3845a7794220a5c9e4f4">   29</a></span>&#160;    uint32_t <a class="code" href="../../d3/d30/structthreads_argument.html#abcba9882b15e3845a7794220a5c9e4f4">arg3</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="../../d3/d30/structthreads_argument.html#a6fad7cea38d81eb88f9ff01d4baec32a">   30</a></span>&#160;    uint32_t <a class="code" href="../../d3/d30/structthreads_argument.html#a6fad7cea38d81eb88f9ff01d4baec32a">arg4</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="../../d3/d30/structthreads_argument.html#a2720a7d49d96277778f83a2488859fe9">   31</a></span>&#160;    uint32_t <a class="code" href="../../d3/d30/structthreads_argument.html#a2720a7d49d96277778f83a2488859fe9">arg5</a>;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="../../d3/d30/structthreads_argument.html#a460c4a55dba6130f386f648138184074">   32</a></span>&#160;    uint32_t <a class="code" href="../../d3/d30/structthreads_argument.html#a460c4a55dba6130f386f648138184074">arg6</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="../../d3/d30/structthreads_argument.html#a200c590896768ffb09f8d90c774f6b74">   33</a></span>&#160;    uint32_t <a class="code" href="../../d3/d30/structthreads_argument.html#a200c590896768ffb09f8d90c774f6b74">arg7</a>;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;}<a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">threadsArgument_t</a>;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">extern</span> <a class="code" href="../../d3/d30/structthreads_argument.html">threadsArgument_t</a> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8f9b1f133f82ce955405d453f0c506d6">g_threadsArg</a>;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="keyword">extern</span> uint32_t <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a9beaf51023e475986b8b182c80ccc023">g_threadStorage</a>[20];</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a0a153da028aee8f220377b516ff065c8">palThreadFunc1</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a29dc69cbcc48b55d48a5fd668da7fe15">palThreadFunc2</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#acf68b041960be3c58f516986504fcd0f">palThreadFunc3</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a844c7469189866b502ef85df5063e79c">palThreadFunc4</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a5be7a07498de9cc847215e6aa8f77914">palThreadFunc5</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a52dc025f6020b0d456bbbcacc3aa4e3e">palThreadFunc6</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="../../dc/d2c/structtimer_argument.html">   49</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="../../dc/d2c/structtimer_argument.html">timerArgument</a>{</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="../../dc/d2c/structtimer_argument.html#a18bf51a6db87346257b34c24fefbd1b1">   50</a></span>&#160;    uint32_t <a class="code" href="../../dc/d2c/structtimer_argument.html#a18bf51a6db87346257b34c24fefbd1b1">ticksBeforeTimer</a>;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="../../dc/d2c/structtimer_argument.html#afe9607363a4b6ae7b835ef129743ec08">   51</a></span>&#160;    uint32_t <a class="code" href="../../dc/d2c/structtimer_argument.html#afe9607363a4b6ae7b835ef129743ec08">ticksInFunc1</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="../../dc/d2c/structtimer_argument.html#af9f23b828a589dfac13cad4cb6e7da34">   52</a></span>&#160;    uint32_t <a class="code" href="../../dc/d2c/structtimer_argument.html#af9f23b828a589dfac13cad4cb6e7da34">ticksInFunc2</a>;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;}<a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">timerArgument_t</a>;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="keyword">extern</span> <a class="code" href="../../dc/d2c/structtimer_argument.html">timerArgument_t</a> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a1a09db2f0cd5dd2d0929b34afad51ba1">g_timerArgs</a>;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#abac822ed4b356b85117101aa0d8701d6">palTimerFunc1</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8581bcb8f9f435a87c3dd651d65e32c8">palTimerFunc2</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a7c8c7a38fca8b62acc6094ba1f072ec7">palThreadFuncCustom1</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a663a9130dc598399ec3bd9ab9e6680fa">palThreadFuncCustom2</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a300d95346a90a5f17aa6140647243b64">palThreadFuncCustom3</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#aa5b1f9c927c18d821a46d99dfe533cb0">palThreadFuncCustom4</a>(<span class="keywordtype">void</span> <span class="keyword">const</span> *argument);</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="../../d9/d28/pal__rtos__test__utils_8h.html#ae3c2c737bcf6b45c3bf394dfe8349c4d">   67</a></span>&#160;<span class="preprocessor">#define MEMORY_POOL1_BLOCK_SIZE 32</span></div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="../../d9/d28/pal__rtos__test__utils_8h.html#a3c0ce22bdba74fe398c6adefbc7fbbdf">   68</a></span>&#160;<span class="preprocessor">#define MEMORY_POOL1_BLOCK_COUNT 5</span></div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="../../d9/d28/pal__rtos__test__utils_8h.html#a3c85d7e7f47d26444477603d8e2fd5d5">   69</a></span>&#160;<span class="preprocessor">#define MEMORY_POOL2_BLOCK_SIZE 12</span></div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="../../d9/d28/pal__rtos__test__utils_8h.html#a593d40fc26d9d1664c57988a846a888e">   70</a></span>&#160;<span class="preprocessor">#define MEMORY_POOL2_BLOCK_COUNT 4</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keyword">extern</span> <a class="code" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#adb164ebbfd2189f434f5e550e2d93bb4">mutex1</a>;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="keyword">extern</span> <a class="code" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8706c6b975e957968f23af2812bbc0cb">mutex2</a>;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="keyword">extern</span> <a class="code" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> <a class="code" href="../../d9/d28/pal__rtos__test__utils_8h.html#a2f8d675e43058c8f8b853b52366abf38">semaphore1</a>;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="preprocessor">#endif //_PAL_RTOS_TEST_UTILS_H</span></div><div class="ttc" id="structthreads_argument_html_a9532cb931dee4c326444e7c366019639"><div class="ttname"><a href="../../d3/d30/structthreads_argument.html#a9532cb931dee4c326444e7c366019639">threadsArgument::arg1</a></div><div class="ttdeci">uint32_t arg1</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:27</div></div>
+<div class="ttc" id="pal__rtos_8h_html_a0a8206fc36c3dca549aed450f7777481"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a></div><div class="ttdeci">uintptr_t palSemaphoreID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:37</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a8581bcb8f9f435a87c3dd651d65e32c8"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a8581bcb8f9f435a87c3dd651d65e32c8">palTimerFunc2</a></div><div class="ttdeci">void palTimerFunc2(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:207</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a8c22b8a190b07232b36b748fbf706e76"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">timerArgument_t</a></div><div class="ttdeci">struct timerArgument timerArgument_t</div></div>
+<div class="ttc" id="structthreads_argument_html_a2720a7d49d96277778f83a2488859fe9"><div class="ttname"><a href="../../d3/d30/structthreads_argument.html#a2720a7d49d96277778f83a2488859fe9">threadsArgument::arg5</a></div><div class="ttdeci">uint32_t arg5</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:31</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a33d89580fea8198de226a62220e20bd0"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">threadsArgument_t</a></div><div class="ttdeci">struct threadsArgument threadsArgument_t</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_adb164ebbfd2189f434f5e550e2d93bb4"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#adb164ebbfd2189f434f5e550e2d93bb4">mutex1</a></div><div class="ttdeci">palMutexID_t mutex1</div><div class="ttdef"><b>Definition:</b> pal_rtos_test.c:33</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a300d95346a90a5f17aa6140647243b64"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a300d95346a90a5f17aa6140647243b64">palThreadFuncCustom3</a></div><div class="ttdeci">void palThreadFuncCustom3(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:224</div></div>
+<div class="ttc" id="structthreads_argument_html_abcba9882b15e3845a7794220a5c9e4f4"><div class="ttname"><a href="../../d3/d30/structthreads_argument.html#abcba9882b15e3845a7794220a5c9e4f4">threadsArgument::arg3</a></div><div class="ttdeci">uint32_t arg3</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:29</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a663a9130dc598399ec3bd9ab9e6680fa"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a663a9130dc598399ec3bd9ab9e6680fa">palThreadFuncCustom2</a></div><div class="ttdeci">void palThreadFuncCustom2(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:219</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a8f9b1f133f82ce955405d453f0c506d6"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a8f9b1f133f82ce955405d453f0c506d6">g_threadsArg</a></div><div class="ttdeci">threadsArgument_t g_threadsArg</div><div class="ttdef"><b>Definition:</b> pal_rtos_test.c:31</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a9beaf51023e475986b8b182c80ccc023"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a9beaf51023e475986b8b182c80ccc023">g_threadStorage</a></div><div class="ttdeci">uint32_t g_threadStorage[20]</div><div class="ttdef"><b>Definition:</b> pal_rtos_test.c:30</div></div>
+<div class="ttc" id="pal__test__utils_8h_html"><div class="ttname"><a href="../../d0/d51/pal__test__utils_8h.html">pal_test_utils.h</a></div></div>
+<div class="ttc" id="structthreads_argument_html"><div class="ttname"><a href="../../d3/d30/structthreads_argument.html">threadsArgument</a></div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:26</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a8706c6b975e957968f23af2812bbc0cb"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a8706c6b975e957968f23af2812bbc0cb">mutex2</a></div><div class="ttdeci">palMutexID_t mutex2</div><div class="ttdef"><b>Definition:</b> pal_rtos_test.c:34</div></div>
+<div class="ttc" id="pal__rtos_8h_html"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html">pal_rtos.h</a></div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a7c8c7a38fca8b62acc6094ba1f072ec7"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a7c8c7a38fca8b62acc6094ba1f072ec7">palThreadFuncCustom1</a></div><div class="ttdeci">void palThreadFuncCustom1(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:214</div></div>
+<div class="ttc" id="structthreads_argument_html_acecc240150225e2786524a2e4b3adf78"><div class="ttname"><a href="../../d3/d30/structthreads_argument.html#acecc240150225e2786524a2e4b3adf78">threadsArgument::arg2</a></div><div class="ttdeci">uint32_t arg2</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:28</div></div>
+<div class="ttc" id="pal__rtos_8h_html_ac6b402eec0e5f2ab64c43abffd4d9901"><div class="ttname"><a href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a></div><div class="ttdeci">uintptr_t palMutexID_t</div><div class="ttdef"><b>Definition:</b> pal_rtos.h:36</div></div>
+<div class="ttc" id="structtimer_argument_html_af9f23b828a589dfac13cad4cb6e7da34"><div class="ttname"><a href="../../dc/d2c/structtimer_argument.html#af9f23b828a589dfac13cad4cb6e7da34">timerArgument::ticksInFunc2</a></div><div class="ttdeci">uint32_t ticksInFunc2</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:52</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a29dc69cbcc48b55d48a5fd668da7fe15"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a29dc69cbcc48b55d48a5fd668da7fe15">palThreadFunc2</a></div><div class="ttdeci">void palThreadFunc2(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:60</div></div>
+<div class="ttc" id="structtimer_argument_html"><div class="ttname"><a href="../../dc/d2c/structtimer_argument.html">timerArgument</a></div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:49</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a844c7469189866b502ef85df5063e79c"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a844c7469189866b502ef85df5063e79c">palThreadFunc4</a></div><div class="ttdeci">void palThreadFunc4(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:123</div></div>
+<div class="ttc" id="structtimer_argument_html_afe9607363a4b6ae7b835ef129743ec08"><div class="ttname"><a href="../../dc/d2c/structtimer_argument.html#afe9607363a4b6ae7b835ef129743ec08">timerArgument::ticksInFunc1</a></div><div class="ttdeci">uint32_t ticksInFunc1</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:51</div></div>
+<div class="ttc" id="pal__types_8h_html"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html">pal_types.h</a></div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a1a09db2f0cd5dd2d0929b34afad51ba1"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a1a09db2f0cd5dd2d0929b34afad51ba1">g_timerArgs</a></div><div class="ttdeci">timerArgument_t g_timerArgs</div><div class="ttdef"><b>Definition:</b> pal_rtos_test.c:32</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a2f8d675e43058c8f8b853b52366abf38"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a2f8d675e43058c8f8b853b52366abf38">semaphore1</a></div><div class="ttdeci">palSemaphoreID_t semaphore1</div><div class="ttdef"><b>Definition:</b> pal_rtos_test.c:35</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a5be7a07498de9cc847215e6aa8f77914"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a5be7a07498de9cc847215e6aa8f77914">palThreadFunc5</a></div><div class="ttdeci">void palThreadFunc5(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:152</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_aa5b1f9c927c18d821a46d99dfe533cb0"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#aa5b1f9c927c18d821a46d99dfe533cb0">palThreadFuncCustom4</a></div><div class="ttdeci">void palThreadFuncCustom4(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:229</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a0a153da028aee8f220377b516ff065c8"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a0a153da028aee8f220377b516ff065c8">palThreadFunc1</a></div><div class="ttdeci">void palThreadFunc1(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:26</div></div>
+<div class="ttc" id="structtimer_argument_html_a18bf51a6db87346257b34c24fefbd1b1"><div class="ttname"><a href="../../dc/d2c/structtimer_argument.html#a18bf51a6db87346257b34c24fefbd1b1">timerArgument::ticksBeforeTimer</a></div><div class="ttdeci">uint32_t ticksBeforeTimer</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:50</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_a52dc025f6020b0d456bbbcacc3aa4e3e"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#a52dc025f6020b0d456bbbcacc3aa4e3e">palThreadFunc6</a></div><div class="ttdeci">void palThreadFunc6(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:175</div></div>
+<div class="ttc" id="structthreads_argument_html_a200c590896768ffb09f8d90c774f6b74"><div class="ttname"><a href="../../d3/d30/structthreads_argument.html#a200c590896768ffb09f8d90c774f6b74">threadsArgument::arg7</a></div><div class="ttdeci">uint32_t arg7</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:33</div></div>
+<div class="ttc" id="structthreads_argument_html_a460c4a55dba6130f386f648138184074"><div class="ttname"><a href="../../d3/d30/structthreads_argument.html#a460c4a55dba6130f386f648138184074">threadsArgument::arg6</a></div><div class="ttdeci">uint32_t arg6</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:32</div></div>
+<div class="ttc" id="structthreads_argument_html_a6fad7cea38d81eb88f9ff01d4baec32a"><div class="ttname"><a href="../../d3/d30/structthreads_argument.html#a6fad7cea38d81eb88f9ff01d4baec32a">threadsArgument::arg4</a></div><div class="ttdeci">uint32_t arg4</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.h:30</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_acf68b041960be3c58f516986504fcd0f"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#acf68b041960be3c58f516986504fcd0f">palThreadFunc3</a></div><div class="ttdeci">void palThreadFunc3(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:85</div></div>
+<div class="ttc" id="pal__rtos__test__utils_8h_html_abac822ed4b356b85117101aa0d8701d6"><div class="ttname"><a href="../../d9/d28/pal__rtos__test__utils_8h.html#abac822ed4b356b85117101aa0d8701d6">palTimerFunc1</a></div><div class="ttdeci">void palTimerFunc1(void const *argument)</div><div class="ttdef"><b>Definition:</b> pal_rtos_test_utils.c:200</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d9/d2c/pal__plat__network_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,630 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Platform-API/pal_plat_network.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="../../dir_21bbc5adf7d2637a4cb8a3cee979c96f.html">Platform-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_plat_network.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d9/d16/pal_8h_source.html">pal.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d17/pal__network_8h_source.html">pal_network.h</a>&quot;</code><br />
+</div>
+<p><a href="../../d9/d2c/pal__plat__network_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab92cca0e4facf3d62e03c0d0ca0523da"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#ab92cca0e4facf3d62e03c0d0ca0523da">pal_plat_socketsInit</a> (void *context)</td></tr>
+<tr class="separator:ab92cca0e4facf3d62e03c0d0ca0523da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9f6e13112366978741749649356a886c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#a9f6e13112366978741749649356a886c">pal_plat_RegisterNetworkInterface</a> (void *networkInterfaceContext, uint32_t *interfaceIndex)</td></tr>
+<tr class="separator:a9f6e13112366978741749649356a886c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a2b36db2bb5d71ade0fe8cb00d3cecd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd">pal_plat_socketsTerminate</a> (void *context)</td></tr>
+<tr class="separator:a6a2b36db2bb5d71ade0fe8cb00d3cecd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58a25ae30bb6225cc8b5344053fd705c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#a58a25ae30bb6225cc8b5344053fd705c">pal_plat_socket</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a> domain, <a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a> type, bool nonBlockingSocket, uint32_t interfaceNum, <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *socket)</td></tr>
+<tr class="separator:a58a25ae30bb6225cc8b5344053fd705c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76c4e2adf95702c4db8f3792ae373bf9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#a76c4e2adf95702c4db8f3792ae373bf9">pal_plat_getSocketOptions</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a> optionName, void *optionValue, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *optionLength)</td></tr>
+<tr class="separator:a76c4e2adf95702c4db8f3792ae373bf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08ea05dacec7f7d9dc892dab0318542d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#a08ea05dacec7f7d9dc892dab0318542d">pal_plat_setSocketOptions</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, int optionName, const void *optionValue, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> optionLength)</td></tr>
+<tr class="separator:a08ea05dacec7f7d9dc892dab0318542d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a53a267fd8ed0b7a5cf988224e95bd47c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#a53a267fd8ed0b7a5cf988224e95bd47c">pal_plat_bind</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *myAddress, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> addressLength)</td></tr>
+<tr class="separator:a53a267fd8ed0b7a5cf988224e95bd47c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa869b5eddbf4eb6aebbbb587ece84aac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#aa869b5eddbf4eb6aebbbb587ece84aac">pal_plat_receiveFrom</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, void *buffer, size_t length, <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *from, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *fromLength, size_t *bytesReceived)</td></tr>
+<tr class="separator:aa869b5eddbf4eb6aebbbb587ece84aac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17365747ed8d29df153a336da3942187"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#a17365747ed8d29df153a336da3942187">pal_plat_sendTo</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, const void *buffer, size_t length, const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *to, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> toLength, size_t *bytesSent)</td></tr>
+<tr class="separator:a17365747ed8d29df153a336da3942187"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a071355a0ca4d4eece45f0ed85a9ab1da"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#a071355a0ca4d4eece45f0ed85a9ab1da">pal_plat_close</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *socket)</td></tr>
+<tr class="separator:a071355a0ca4d4eece45f0ed85a9ab1da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af36bf075867e5ed0be7479312469361f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#af36bf075867e5ed0be7479312469361f">pal_plat_getNumberOfNetInterfaces</a> (uint32_t *numInterfaces)</td></tr>
+<tr class="separator:af36bf075867e5ed0be7479312469361f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6dc3b4c06e96b29068995809b98a935e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#a6dc3b4c06e96b29068995809b98a935e">pal_plat_getNetInterfaceInfo</a> (uint32_t interfaceNum, <a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a> *interfaceInfo)</td></tr>
+<tr class="separator:a6dc3b4c06e96b29068995809b98a935e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa0c26dfeee80444e58eacab238206d09"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/d2c/pal__plat__network_8h.html#aa0c26dfeee80444e58eacab238206d09">pal_plat_socketMiniSelect</a> (const <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socketsToCheck[<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>], uint32_t numberOfSockets, <a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a> *timeout, uint8_t palSocketStatus[<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>], uint32_t *numberOfSocketsSet)</td></tr>
+<tr class="separator:aa0c26dfeee80444e58eacab238206d09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a53a267fd8ed0b7a5cf988224e95bd47c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_bind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>myAddress</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>addressLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Bind a given socket to a local address. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket to bind. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">myAddress</td><td>The address to bind to. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">addressLength</td><td>The length of the address passed in myAddress. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a071355a0ca4d4eece45f0ed85a9ab1da"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_close </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *&#160;</td>
+          <td class="paramname"><em>socket</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Close a network socket. NOTE: recieves palSocket_t* and not palSocket_t so that it can zero the socket to avoid re-use. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">socket</td><td>Release and zero socket pointed to by given pointer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6dc3b4c06e96b29068995809b98a935e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_getNetInterfaceInfo </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>interfaceNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a> *&#160;</td>
+          <td class="paramname"><em>interfaceInfo</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get information regarding the socket at the index/interface number given (this number is returned when registering the socket). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">interfaceNum</td><td>The number of the interface to get information for. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">interfaceInfo</td><td>The information for the given interface number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="af36bf075867e5ed0be7479312469361f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_getNumberOfNetInterfaces </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>numInterfaces</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the number of current network interfaces (interfaces that have been registered through). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">numInterfaces</td><td>The number of interfaces after a successful call. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status as in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a76c4e2adf95702c4db8f3792ae373bf9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_getSocketOptions </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a>&#160;</td>
+          <td class="paramname"><em>optionName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>optionValue</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *&#160;</td>
+          <td class="paramname"><em>optionLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get options for a given network socket. Only a few options are supported (see palSocketOptionName_t for supported options). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket for which to get options. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionName</td><td>The name for which to set the option (see enum PAL_NET_SOCKET_OPTION for supported types). </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">optionValue</td><td>The buffer holding the option value returned by the function. </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">optionLength</td><td>The size of the buffer provided for optionValue when calling the function. After the call, it contains the length of data actually written to the optionValue buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa869b5eddbf4eb6aebbbb587ece84aac"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_receiveFrom </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>from</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *&#160;</td>
+          <td class="paramname"><em>fromLength</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>bytesReceived</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Receive a payload from the given socket. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket to receive from [sockets passed to this function should be of type PAL_SOCK_DGRAM (the implementation may support other types as well)]. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">buffer</td><td>The buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>The length of the buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">from</td><td>The address that sent the payload [optional - if not required pass NULL]. </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">fromLength</td><td>The length of the 'from' address. When completed, this contains the amount of data actually written to the from address [optional - if not required pass NULL]. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">bytesReceived</td><td>The actual amount of payload data received to the buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9f6e13112366978741749649356a886c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_RegisterNetworkInterface </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>networkInterfaceContext</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>interfaceIndex</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Register a network interface for use with PAL sockets - must be called before other socket functions - most APIs will not work before a single interface is added. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">networkInterfaceContext</td><td>The context of the network interface to be added (OS specific. In mbed OS, this is the NetworkInterface object pointer for the network adapter [note: we assume connect has already been called on this]). - if not available use NULL (may not be required on some OSs). </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">interfaceIndex</td><td>Contains the index assigned to the interface in case it has been assigned successfully. This index can be used when creating a socket to bind the socket to the interface. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a17365747ed8d29df153a336da3942187"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_sendTo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>to</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>toLength</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>bytesSent</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Send a payload to the given address using the given socket. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket to use for sending the payload [sockets passed to this function should be of type PAL_SOCK_DGRAM (the implementation may support other types as well)]. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">buffer</td><td>The buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>The length of the buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">to</td><td>The address to which the payload should be sent. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">toLength</td><td>The length of the 'to' address. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">bytesSent</td><td>The actual amount of payload data sent. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a08ea05dacec7f7d9dc892dab0318542d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_setSocketOptions </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>optionName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>optionValue</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>optionLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set options for a given network socket. Only a few options are supported (see palSocketOptionName_t for supported options). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket for which to get options. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionName</td><td>The name for which to set the option (see enum PAL_NET_SOCKET_OPTION for supported types). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionValue</td><td>The buffer holding the option value to set for the given option. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionLength</td><td>The size of the buffer provided for optionValue. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a58a25ae30bb6225cc8b5344053fd705c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_socket </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a>&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>nonBlockingSocket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>interfaceNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *&#160;</td>
+          <td class="paramname"><em>socket</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get a network socket. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">domain</td><td>The domain of the created socket (see palSocketDomain_t for supported types). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>The type of the created socket (see palSocketType_t for supported types). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">nonBlockingSocket</td><td>If true, the socket is non-blocking (with O_NONBLOCK set). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">interfaceNum</td><td>The number of the network interface used for this socket (info in interfaces supported via pal_getNumberOfNetInterfaces and pal_getNetInterfaceInfo ), choose PAL_NET_DEFAULT_INTERFACE for default interface. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">socket</td><td>The socket is returned through this output parameter. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa0c26dfeee80444e58eacab238206d09"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_socketMiniSelect </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socketsToCheck</em>[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>numberOfSockets</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a> *&#160;</td>
+          <td class="paramname"><em>timeout</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>palSocketStatus</em>[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>numberOfSocketsSet</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Check if one or more (up to PAL_NET_SOCKET_SELECT_MAX_SOCKETS) sockets has data available for reading/writing/error. The function blocks until data is available for one of the given sockets or the timeout expires. To use the function, set the sockets you want to check in the socketsToCheck array and set a timeout. When it returns the socketStatus output inidcates the status of each socket passed in. Note: The entry in index x in the socketStatus array corresponds to the socket at index x in the sockets to check array. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socketsToCheck</td><td>The array of up to 8 socket handles to check. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">numberOfSockets</td><td>The number of sockets set in the input socketsToCheck array. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>The time until timeout if no socket activity is detected. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">palSocketStatus</td><td>Information on each socket in the input array indicating which event was set (none, rx, tx, err). Check for a desired event using macros. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">numberOfSocketsSet</td><td>The total number of sockets set in all three data sets (tx, rx, err) after a completed function. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab92cca0e4facf3d62e03c0d0ca0523da"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_socketsInit </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>context</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>PAL network socket API PAL network sockets configurations options: define PAL_NET_TCP_AND_TLS_SUPPORT if TCP is supported by the platform and is required. define PAL_NET_ASYNCHRONOUS_SOCKET_API if asynchronous socket API is supported by the platform. Currently MANDATORY. define PAL_NET_DNS_SUPPORT if DNS name resolution is supported. </p><pre class="fragment">Initialize sockets - must be called before other socket functions (is called from PAL init).
+</pre> <dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">context</td><td>Optional context - if not available/applicable use NULL. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6a2b36db2bb5d71ade0fe8cb00d3cecd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_socketsTerminate </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>context</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Initialize terminate - can be called when sockets are no longer needed to free socket resources allocated by init. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">context</td><td>Optional context - if not available use NULL. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of palStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d9/d2c/pal__plat__network_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Platform-API/pal_plat_network.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="../../dir_21bbc5adf7d2637a4cb8a3cee979c96f.html">Platform-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_plat_network.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../d9/d2c/pal__plat__network_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef _PAL_PLAT_SOCKET_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define _PAL_PLAT_SOCKET_H</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d9/d16/pal_8h.html">pal.h</a>&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d9/d17/pal__network_8h.html">pal_network.h</a>&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#ab92cca0e4facf3d62e03c0d0ca0523da">pal_plat_socketsInit</a>(<span class="keywordtype">void</span>* context);</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#a9f6e13112366978741749649356a886c">pal_plat_RegisterNetworkInterface</a>(<span class="keywordtype">void</span>* networkInterfaceContext, uint32_t* interfaceIndex);</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd">pal_plat_socketsTerminate</a>(<span class="keywordtype">void</span>* context);</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#a58a25ae30bb6225cc8b5344053fd705c">pal_plat_socket</a>(<a class="code" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a> domain, <a class="code" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a> type, <span class="keywordtype">bool</span> nonBlockingSocket, uint32_t interfaceNum, <a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>* socket);</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#a76c4e2adf95702c4db8f3792ae373bf9">pal_plat_getSocketOptions</a>(<a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="code" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a> optionName, <span class="keywordtype">void</span>* optionValue, <a class="code" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>* optionLength);</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#a08ea05dacec7f7d9dc892dab0318542d">pal_plat_setSocketOptions</a>(<a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <span class="keywordtype">int</span> optionName, <span class="keyword">const</span> <span class="keywordtype">void</span>* optionValue, <a class="code" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> optionLength);</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#a53a267fd8ed0b7a5cf988224e95bd47c">pal_plat_bind</a>(<a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* myAddress, <a class="code" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> addressLength);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#aa869b5eddbf4eb6aebbbb587ece84aac">pal_plat_receiveFrom</a>(<a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <span class="keywordtype">void</span>* buffer, <span class="keywordtype">size_t</span> length, <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* from, <a class="code" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>* fromLength, <span class="keywordtype">size_t</span>* bytesReceived);</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#a17365747ed8d29df153a336da3942187">pal_plat_sendTo</a>(<a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <span class="keyword">const</span> <span class="keywordtype">void</span>* buffer, <span class="keywordtype">size_t</span> length, <span class="keyword">const</span> <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* to, <a class="code" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> toLength, <span class="keywordtype">size_t</span>* bytesSent);</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#a071355a0ca4d4eece45f0ed85a9ab1da">pal_plat_close</a>(<a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>* socket);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#af36bf075867e5ed0be7479312469361f">pal_plat_getNumberOfNetInterfaces</a>(uint32_t* numInterfaces);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#a6dc3b4c06e96b29068995809b98a935e">pal_plat_getNetInterfaceInfo</a>(uint32_t interfaceNum, <a class="code" href="../../d9/d16/structpal_net_interface_info.html">palNetInterfaceInfo_t</a>* interfaceInfo);</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../d9/d2c/pal__plat__network_8h.html#aa0c26dfeee80444e58eacab238206d09">pal_plat_socketMiniSelect</a>(<span class="keyword">const</span> <a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socketsToCheck[<a class="code" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>], uint32_t numberOfSockets, <a class="code" href="../../de/dfc/structpal__time_val.html">pal_timeVal_t</a>* timeout,</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;                                        uint8_t palSocketStatus[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t * numberOfSocketsSet);</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="preprocessor">#if PAL_NET_TCP_AND_TLS_SUPPORT // functionality below supported only in case TCP is supported.</span></div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_listen(<a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <span class="keywordtype">int</span> backlog);</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_accept(<a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, <a class="code" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>* addressLen, <a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>* acceptedSocket);</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_connect(<a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <span class="keyword">const</span> <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, <a class="code" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> addressLen);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_recv(<a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <span class="keywordtype">void</span>* buf, <span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span>* recievedDataSize);</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_send(<a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <span class="keyword">const</span> <span class="keywordtype">void</span>* buf, <span class="keywordtype">size_t</span> len, <span class="keywordtype">size_t</span>* sentDataSize);</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="preprocessor">#endif //PAL_NET_TCP_AND_TLS_SUPPORT</span></div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="preprocessor">#if PAL_NET_ASYNCHRONOUS_SOCKET_API</span></div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_asynchronousSocket(<a class="code" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a> domain, <a class="code" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a> type, <span class="keywordtype">bool</span> nonBlockingSocket, uint32_t interfaceNum, palAsyncSocketCallback_t callback, <a class="code" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>* socket);</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;<span class="preprocessor">#if PAL_NET_DNS_SUPPORT</span></div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_getAddressInfo(<span class="keyword">const</span> <span class="keywordtype">char</span>* url, <a class="code" href="../../db/d42/structpal_socket_address.html">palSocketAddress_t</a>* address, <a class="code" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>* addressLength);</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;}</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="preprocessor">#endif //_PAL_PLAT_SOCKET_H</span></div><div class="ttc" id="pal_8h_html"><div class="ttname"><a href="../../d9/d16/pal_8h.html">pal.h</a></div></div>
+<div class="ttc" id="pal__network_8h_html"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html">pal_network.h</a></div></div>
+<div class="ttc" id="pal__plat__network_8h_html_af36bf075867e5ed0be7479312469361f"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#af36bf075867e5ed0be7479312469361f">pal_plat_getNumberOfNetInterfaces</a></div><div class="ttdeci">palStatus_t pal_plat_getNumberOfNetInterfaces(uint32_t *numInterfaces)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:458</div></div>
+<div class="ttc" id="pal__network_8h_html_ac844634680241bad287771f1ab8b0901"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a></div><div class="ttdeci">uint32_t palSocketLength_t</div><div class="ttdef"><b>Definition:</b> pal_network.h:32</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_a76c4e2adf95702c4db8f3792ae373bf9"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#a76c4e2adf95702c4db8f3792ae373bf9">pal_plat_getSocketOptions</a></div><div class="ttdeci">palStatus_t pal_plat_getSocketOptions(palSocket_t socket, palSocketOptionName_t optionName, void *optionValue, palSocketLength_t *optionLength)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:301</div></div>
+<div class="ttc" id="pal__network_8h_html_ac0bd9e160ca4973db4d846a4369ea996"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a></div><div class="ttdeci">void * palSocket_t</div><div class="ttdef"><b>Definition:</b> pal_network.h:33</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_aa0c26dfeee80444e58eacab238206d09"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#aa0c26dfeee80444e58eacab238206d09">pal_plat_socketMiniSelect</a></div><div class="ttdeci">palStatus_t pal_plat_socketMiniSelect(const palSocket_t socketsToCheck[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t numberOfSockets, pal_timeVal_t *timeout, uint8_t palSocketStatus[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t *numberOfSocketsSet)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:536</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_a17365747ed8d29df153a336da3942187"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#a17365747ed8d29df153a336da3942187">pal_plat_sendTo</a></div><div class="ttdeci">palStatus_t pal_plat_sendTo(palSocket_t socket, const void *buffer, size_t length, const palSocketAddress_t *to, palSocketLength_t toLength, size_t *bytesSent)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:418</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_a08ea05dacec7f7d9dc892dab0318542d"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#a08ea05dacec7f7d9dc892dab0318542d">pal_plat_setSocketOptions</a></div><div class="ttdeci">palStatus_t pal_plat_setSocketOptions(palSocket_t socket, int optionName, const void *optionValue, palSocketLength_t optionLength)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:332</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_a6a2b36db2bb5d71ade0fe8cb00d3cecd"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd">pal_plat_socketsTerminate</a></div><div class="ttdeci">palStatus_t pal_plat_socketsTerminate(void *context)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:144</div></div>
+<div class="ttc" id="pal__network_8h_html_ab5d2c3c0d3b2f0e08afcd0d53ff4c418"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a></div><div class="ttdeci">palSocketType_t</div><div class="ttdef"><b>Definition:</b> pal_network.h:54</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_a9f6e13112366978741749649356a886c"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#a9f6e13112366978741749649356a886c">pal_plat_RegisterNetworkInterface</a></div><div class="ttdeci">palStatus_t pal_plat_RegisterNetworkInterface(void *networkInterfaceContext, uint32_t *interfaceIndex)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:107</div></div>
+<div class="ttc" id="structpal_net_interface_info_html"><div class="ttname"><a href="../../d9/d16/structpal_net_interface_info.html">palNetInterfaceInfo</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:42</div></div>
+<div class="ttc" id="pal__network_8h_html_a2694f5de0fb810ddd7ff249ea1478f51"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a></div><div class="ttdeci">palSocketOptionName_t</div><div class="ttdef"><b>Definition:</b> pal_network.h:63</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_aa869b5eddbf4eb6aebbbb587ece84aac"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#aa869b5eddbf4eb6aebbbb587ece84aac">pal_plat_receiveFrom</a></div><div class="ttdeci">palStatus_t pal_plat_receiveFrom(palSocket_t socket, void *buffer, size_t length, palSocketAddress_t *from, palSocketLength_t *fromLength, size_t *bytesReceived)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:386</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_a071355a0ca4d4eece45f0ed85a9ab1da"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#a071355a0ca4d4eece45f0ed85a9ab1da">pal_plat_close</a></div><div class="ttdeci">palStatus_t pal_plat_close(palSocket_t *socket)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:444</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_ab92cca0e4facf3d62e03c0d0ca0523da"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#ab92cca0e4facf3d62e03c0d0ca0523da">pal_plat_socketsInit</a></div><div class="ttdeci">palStatus_t pal_plat_socketsInit(void *context)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:93</div></div>
+<div class="ttc" id="pal__network_8h_html_a5607f2af4b642ef0548bd47c891c6d31"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a></div><div class="ttdeci">#define PAL_NET_SOCKET_SELECT_MAX_SOCKETS</div><div class="ttdef"><b>Definition:</b> pal_network.h:216</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_a6dc3b4c06e96b29068995809b98a935e"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#a6dc3b4c06e96b29068995809b98a935e">pal_plat_getNetInterfaceInfo</a></div><div class="ttdeci">palStatus_t pal_plat_getNetInterfaceInfo(uint32_t interfaceNum, palNetInterfaceInfo_t *interfaceInfo)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:464</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_a58a25ae30bb6225cc8b5344053fd705c"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#a58a25ae30bb6225cc8b5344053fd705c">pal_plat_socket</a></div><div class="ttdeci">palStatus_t pal_plat_socket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palSocket_t *socket)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:251</div></div>
+<div class="ttc" id="pal__plat__network_8h_html_a53a267fd8ed0b7a5cf988224e95bd47c"><div class="ttname"><a href="../../d9/d2c/pal__plat__network_8h.html#a53a267fd8ed0b7a5cf988224e95bd47c">pal_plat_bind</a></div><div class="ttdeci">palStatus_t pal_plat_bind(palSocket_t socket, palSocketAddress_t *myAddress, palSocketLength_t addressLength)</div><div class="ttdef"><b>Definition:</b> pal_plat_network.cpp:366</div></div>
+<div class="ttc" id="pal__types_8h_html_a160277354e86b9aea01d7689ec26d88d"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a></div><div class="ttdeci">int32_t palStatus_t</div><div class="ttdef"><b>Definition:</b> pal_types.h:31</div></div>
+<div class="ttc" id="structpal__time_val_html"><div class="ttname"><a href="../../de/dfc/structpal__time_val.html">pal_timeVal</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:80</div></div>
+<div class="ttc" id="pal__network_8h_html_a01b7e0ab9c2845885f6a7e012002dba7"><div class="ttname"><a href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a></div><div class="ttdeci">palSocketDomain_t</div><div class="ttdef"><b>Definition:</b> pal_network.h:48</div></div>
+<div class="ttc" id="structpal_socket_address_html"><div class="ttname"><a href="../../db/d42/structpal_socket_address.html">palSocketAddress</a></div><div class="ttdef"><b>Definition:</b> pal_network.h:37</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,273 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_socket_test_main_mbedOS.cpp File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_socket_test_main_mbedOS.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;mbed.h&quot;</code><br />
+<code>#include &quot;rtos.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6b71ffd718e2af00cebeb05560b44be7"><td class="memItemLeft" align="right" valign="top">DigitalOut&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7">led1</a> (LED1)</td></tr>
+<tr class="separator:a6b71ffd718e2af00cebeb05560b44be7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5543796fae8f0c3d5bfbd33f2389cb8"><td class="memItemLeft" align="right" valign="top">InterruptIn&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8">sw2</a> (SW2)</td></tr>
+<tr class="separator:af5543796fae8f0c3d5bfbd33f2389cb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21e1e181f00d9dc8dbb912650459bfde"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde">sw2_press</a> (void)</td></tr>
+<tr class="separator:a21e1e181f00d9dc8dbb912650459bfde"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a602cc5fb415f60615dbfa0643b3b3e26"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26">led_thread</a> (void const *argument)</td></tr>
+<tr class="separator:a602cc5fb415f60615dbfa0643b3b3e26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe6a59684384290b7f8710db5203944a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a">button_thread</a> (void const *argument)</td></tr>
+<tr class="separator:afe6a59684384290b7f8710db5203944a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58ec279183697abbd5d3efea3442d4e5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">UnityMain</a> (int argc, const char *argv[], void(*runAllTests)(void))</td></tr>
+<tr class="separator:a58ec279183697abbd5d3efea3442d4e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2393bacb0eb76d2dd1b0c200a8769cab"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab">TEST_pal_socket_GROUP_RUNNER</a> (void)</td></tr>
+<tr class="separator:a2393bacb0eb76d2dd1b0c200a8769cab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0f2228420376f4db7e1274f2b41667c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">main</a> (int argc, const char *argv[])</td></tr>
+<tr class="separator:ac0f2228420376f4db7e1274f2b41667c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ae8697e1a75bad4a53dd6d6ec81e486cb"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">button_pressed</a> = 0</td></tr>
+<tr class="separator:ae8697e1a75bad4a53dd6d6ec81e486cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d37e93ff0246ad7bf396650eaf84487"><td class="memItemLeft" align="right" valign="top">Thread *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487">thread2</a></td></tr>
+<tr class="separator:a7d37e93ff0246ad7bf396650eaf84487"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="afe6a59684384290b7f8710db5203944a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void button_thread </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6b71ffd718e2af00cebeb05560b44be7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">DigitalOut led1 </td>
+          <td>(</td>
+          <td class="paramtype">LED1&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a602cc5fb415f60615dbfa0643b3b3e26"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void led_thread </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac0f2228420376f4db7e1274f2b41667c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af5543796fae8f0c3d5bfbd33f2389cb8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">InterruptIn sw2 </td>
+          <td>(</td>
+          <td class="paramtype">SW2&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a21e1e181f00d9dc8dbb912650459bfde"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sw2_press </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2393bacb0eb76d2dd1b0c200a8769cab"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TEST_pal_socket_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58ec279183697abbd5d3efea3442d4e5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UnityMain </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(void)&#160;</td>
+          <td class="paramname"><em>runAllTests</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ae8697e1a75bad4a53dd6d6ec81e486cb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t button_pressed = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7d37e93ff0246ad7bf396650eaf84487"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">Thread* thread2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/da/d2d/pal__rtos__test_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,653 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_rtos_test.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_rtos_test.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d4/d01/pal__rtos_8h_source.html">pal_rtos.h</a>&quot;</code><br />
+<code>#include &quot;unity.h&quot;</code><br />
+<code>#include &quot;unity_fixture.h&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d28/pal__rtos__test__utils_8h_source.html">pal_rtos_test_utils.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d9/d16/pal_8h_source.html">pal.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab19fea07339238925c3b105637ce92c1"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#ab19fea07339238925c3b105637ce92c1">TEST_GROUP</a> (pal_rtos)</td></tr>
+<tr class="separator:ab19fea07339238925c3b105637ce92c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a393f7a6e534c05e534cfdaf46473db45"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a393f7a6e534c05e534cfdaf46473db45">palRunThreads</a> ()</td></tr>
+<tr class="separator:a393f7a6e534c05e534cfdaf46473db45"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a7c6f6a71607f9dce69207f1f7ed3c1"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a8a7c6f6a71607f9dce69207f1f7ed3c1">TEST_SETUP</a> (pal_rtos)</td></tr>
+<tr class="separator:a8a7c6f6a71607f9dce69207f1f7ed3c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5fc4009112ba6cadc74ad8cd14c427b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#ac5fc4009112ba6cadc74ad8cd14c427b">TEST_TEAR_DOWN</a> (pal_rtos)</td></tr>
+<tr class="separator:ac5fc4009112ba6cadc74ad8cd14c427b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1e33659cb747282e1869e9f86fe2d33f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a1e33659cb747282e1869e9f86fe2d33f">TEST</a> (pal_rtos, pal_osKernelSysTick_Unity)</td></tr>
+<tr class="separator:a1e33659cb747282e1869e9f86fe2d33f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a19f494b1a336e145470aa415d517937f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a19f494b1a336e145470aa415d517937f">TEST</a> (pal_rtos, pal_osKernelSysTick64_Unity)</td></tr>
+<tr class="separator:a19f494b1a336e145470aa415d517937f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0efc309d0e8eb82d8caf439877959e21"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a0efc309d0e8eb82d8caf439877959e21">TEST</a> (pal_rtos, pal_osKernelSysTickMicroSec_Unity)</td></tr>
+<tr class="separator:a0efc309d0e8eb82d8caf439877959e21"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af2b06d1978f845fac0eaf4d1d3801629"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#af2b06d1978f845fac0eaf4d1d3801629">TEST</a> (pal_rtos, pal_osKernelSysMilliSecTick_Unity)</td></tr>
+<tr class="separator:af2b06d1978f845fac0eaf4d1d3801629"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a236b8351236670bd5b5a07c92d22df4b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a236b8351236670bd5b5a07c92d22df4b">TEST</a> (pal_rtos, pal_osKernelSysTickFrequency_Unity)</td></tr>
+<tr class="separator:a236b8351236670bd5b5a07c92d22df4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4291ec1155d61a686122f5d4d6f6d2c5"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a4291ec1155d61a686122f5d4d6f6d2c5">TEST</a> (pal_rtos, pal_osDelay_Unity)</td></tr>
+<tr class="separator:a4291ec1155d61a686122f5d4d6f6d2c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60d7bdf4675622e4a19f1a5b3a0d8523"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a60d7bdf4675622e4a19f1a5b3a0d8523">TEST</a> (pal_rtos, BasicTimeScenario)</td></tr>
+<tr class="separator:a60d7bdf4675622e4a19f1a5b3a0d8523"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad59650144ddde4e89319fea8013711cd"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#ad59650144ddde4e89319fea8013711cd">TEST</a> (pal_rtos, TimerUnityTest)</td></tr>
+<tr class="separator:ad59650144ddde4e89319fea8013711cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab6e3467dab64a1ae60a313f6c004e337"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#ab6e3467dab64a1ae60a313f6c004e337">TEST</a> (pal_rtos, PrimitivesUnityTest1)</td></tr>
+<tr class="separator:ab6e3467dab64a1ae60a313f6c004e337"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a15d1bcdd022e5ac3ded7f4c5c4d77195"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a15d1bcdd022e5ac3ded7f4c5c4d77195">TEST</a> (pal_rtos, PrimitivesUnityTest2)</td></tr>
+<tr class="separator:a15d1bcdd022e5ac3ded7f4c5c4d77195"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9286efb458d9a35e4c89e79111bc5b32"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a9286efb458d9a35e4c89e79111bc5b32">TEST</a> (pal_rtos, MemoryPoolUnityTest)</td></tr>
+<tr class="separator:a9286efb458d9a35e4c89e79111bc5b32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ab2135517e3491868d55fd58d1cfc93"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a1ab2135517e3491868d55fd58d1cfc93">TEST</a> (pal_rtos, MessageUnityTest)</td></tr>
+<tr class="separator:a1ab2135517e3491868d55fd58d1cfc93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02ee4db9ce4bddd60ae6af604b0f821f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a02ee4db9ce4bddd60ae6af604b0f821f">TEST</a> (pal_rtos, AtomicIncrementUnityTest)</td></tr>
+<tr class="separator:a02ee4db9ce4bddd60ae6af604b0f821f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a283449eb9014d626632ed99b627e3549"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a283449eb9014d626632ed99b627e3549">TEST</a> (pal_rtos, pal_init_test)</td></tr>
+<tr class="separator:a283449eb9014d626632ed99b627e3549"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4eb9db0c81e55785354f57fa97b1e0f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#aa4eb9db0c81e55785354f57fa97b1e0f">TEST</a> (pal_rtos, CustomizedTest)</td></tr>
+<tr class="separator:aa4eb9db0c81e55785354f57fa97b1e0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a9beaf51023e475986b8b182c80ccc023"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a9beaf51023e475986b8b182c80ccc023">g_threadStorage</a> [20] = { 0 }</td></tr>
+<tr class="separator:a9beaf51023e475986b8b182c80ccc023"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f9b1f133f82ce955405d453f0c506d6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">threadsArgument_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a8f9b1f133f82ce955405d453f0c506d6">g_threadsArg</a> = {0}</td></tr>
+<tr class="separator:a8f9b1f133f82ce955405d453f0c506d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a09db2f0cd5dd2d0929b34afad51ba1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">timerArgument_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a1a09db2f0cd5dd2d0929b34afad51ba1">g_timerArgs</a> = {0}</td></tr>
+<tr class="separator:a1a09db2f0cd5dd2d0929b34afad51ba1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb164ebbfd2189f434f5e550e2d93bb4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#adb164ebbfd2189f434f5e550e2d93bb4">mutex1</a> = <a class="el" href="../../d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab">NULLPTR</a></td></tr>
+<tr class="separator:adb164ebbfd2189f434f5e550e2d93bb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8706c6b975e957968f23af2812bbc0cb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a8706c6b975e957968f23af2812bbc0cb">mutex2</a> = <a class="el" href="../../d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab">NULLPTR</a></td></tr>
+<tr class="separator:a8706c6b975e957968f23af2812bbc0cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f8d675e43058c8f8b853b52366abf38"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d2d/pal__rtos__test_8c.html#a2f8d675e43058c8f8b853b52366abf38">semaphore1</a> = <a class="el" href="../../d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab">NULLPTR</a></td></tr>
+<tr class="separator:a2f8d675e43058c8f8b853b52366abf38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a393f7a6e534c05e534cfdaf46473db45"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void palRunThreads </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1e33659cb747282e1869e9f86fe2d33f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_osKernelSysTick_Unity&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19f494b1a336e145470aa415d517937f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_osKernelSysTick64_Unity&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0efc309d0e8eb82d8caf439877959e21"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_osKernelSysTickMicroSec_Unity&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af2b06d1978f845fac0eaf4d1d3801629"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_osKernelSysMilliSecTick_Unity&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a236b8351236670bd5b5a07c92d22df4b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_osKernelSysTickFrequency_Unity&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4291ec1155d61a686122f5d4d6f6d2c5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_osDelay_Unity&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a60d7bdf4675622e4a19f1a5b3a0d8523"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">BasicTimeScenario&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad59650144ddde4e89319fea8013711cd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">TimerUnityTest&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab6e3467dab64a1ae60a313f6c004e337"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">PrimitivesUnityTest1&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a15d1bcdd022e5ac3ded7f4c5c4d77195"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">PrimitivesUnityTest2&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9286efb458d9a35e4c89e79111bc5b32"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">MemoryPoolUnityTest&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1ab2135517e3491868d55fd58d1cfc93"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">MessageUnityTest&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a02ee4db9ce4bddd60ae6af604b0f821f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">AtomicIncrementUnityTest&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a283449eb9014d626632ed99b627e3549"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pal_init_test&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa4eb9db0c81e55785354f57fa97b1e0f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">CustomizedTest&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab19fea07339238925c3b105637ce92c1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_GROUP </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8a7c6f6a71607f9dce69207f1f7ed3c1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_SETUP </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac5fc4009112ba6cadc74ad8cd14c427b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_TEAR_DOWN </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a8f9b1f133f82ce955405d453f0c506d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">threadsArgument_t</a> g_threadsArg = {0}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9beaf51023e475986b8b182c80ccc023"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t g_threadStorage[20] = { 0 }</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1a09db2f0cd5dd2d0929b34afad51ba1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">timerArgument_t</a> g_timerArgs = {0}</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adb164ebbfd2189f434f5e550e2d93bb4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutex1 = <a class="el" href="../../d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab">NULLPTR</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8706c6b975e957968f23af2812bbc0cb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutex2 = <a class="el" href="../../d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab">NULLPTR</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2f8d675e43058c8f8b853b52366abf38"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphore1 = <a class="el" href="../../d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab">NULLPTR</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/da/d64/pal__socket__test__main__mbedos_classic_8cpp.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,273 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_socket_test_main_mbedosClassic.cpp File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_socket_test_main_mbedosClassic.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;mbed.h&quot;</code><br />
+<code>#include &quot;rtos.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6b71ffd718e2af00cebeb05560b44be7"><td class="memItemLeft" align="right" valign="top">DigitalOut&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7">led1</a> (LED1)</td></tr>
+<tr class="separator:a6b71ffd718e2af00cebeb05560b44be7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5543796fae8f0c3d5bfbd33f2389cb8"><td class="memItemLeft" align="right" valign="top">InterruptIn&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8">sw2</a> (SW2)</td></tr>
+<tr class="separator:af5543796fae8f0c3d5bfbd33f2389cb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21e1e181f00d9dc8dbb912650459bfde"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde">sw2_press</a> (void)</td></tr>
+<tr class="separator:a21e1e181f00d9dc8dbb912650459bfde"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a602cc5fb415f60615dbfa0643b3b3e26"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26">led_thread</a> (void const *argument)</td></tr>
+<tr class="separator:a602cc5fb415f60615dbfa0643b3b3e26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe6a59684384290b7f8710db5203944a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#afe6a59684384290b7f8710db5203944a">button_thread</a> (void const *argument)</td></tr>
+<tr class="separator:afe6a59684384290b7f8710db5203944a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58ec279183697abbd5d3efea3442d4e5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">UnityMain</a> (int argc, const char *argv[], void(*runAllTests)(void))</td></tr>
+<tr class="separator:a58ec279183697abbd5d3efea3442d4e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2393bacb0eb76d2dd1b0c200a8769cab"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab">TEST_pal_socket_GROUP_RUNNER</a> (void)</td></tr>
+<tr class="separator:a2393bacb0eb76d2dd1b0c200a8769cab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0f2228420376f4db7e1274f2b41667c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">main</a> (int argc, const char *argv[])</td></tr>
+<tr class="separator:ac0f2228420376f4db7e1274f2b41667c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ae8697e1a75bad4a53dd6d6ec81e486cb"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">button_pressed</a> = 0</td></tr>
+<tr class="separator:ae8697e1a75bad4a53dd6d6ec81e486cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d37e93ff0246ad7bf396650eaf84487"><td class="memItemLeft" align="right" valign="top">Thread *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487">thread2</a></td></tr>
+<tr class="separator:a7d37e93ff0246ad7bf396650eaf84487"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="afe6a59684384290b7f8710db5203944a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void button_thread </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6b71ffd718e2af00cebeb05560b44be7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">DigitalOut led1 </td>
+          <td>(</td>
+          <td class="paramtype">LED1&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a602cc5fb415f60615dbfa0643b3b3e26"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void led_thread </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac0f2228420376f4db7e1274f2b41667c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af5543796fae8f0c3d5bfbd33f2389cb8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">InterruptIn sw2 </td>
+          <td>(</td>
+          <td class="paramtype">SW2&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a21e1e181f00d9dc8dbb912650459bfde"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sw2_press </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2393bacb0eb76d2dd1b0c200a8769cab"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TEST_pal_socket_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58ec279183697abbd5d3efea3442d4e5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UnityMain </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(void)&#160;</td>
+          <td class="paramname"><em>runAllTests</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ae8697e1a75bad4a53dd6d6ec81e486cb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t button_pressed = 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7d37e93ff0246ad7bf396650eaf84487"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">Thread* thread2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/da/d7f/pal__update__test__main__mbed_o_s_8cpp.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,149 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_update_test_main_mbedOS.cpp File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_update_test_main_mbedOS.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;mbed.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a58ec279183697abbd5d3efea3442d4e5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d7f/pal__update__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">UnityMain</a> (int argc, const char *argv[], void(*runAllTests)(void))</td></tr>
+<tr class="separator:a58ec279183697abbd5d3efea3442d4e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59390bc31498889208cfda7dea51bffa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d7f/pal__update__test__main__mbed_o_s_8cpp.html#a59390bc31498889208cfda7dea51bffa">TEST_pal_update_GROUP_RUNNER</a> (void)</td></tr>
+<tr class="separator:a59390bc31498889208cfda7dea51bffa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0f2228420376f4db7e1274f2b41667c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/d7f/pal__update__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">main</a> (int argc, const char *argv[])</td></tr>
+<tr class="separator:ac0f2228420376f4db7e1274f2b41667c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac0f2228420376f4db7e1274f2b41667c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a59390bc31498889208cfda7dea51bffa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TEST_pal_update_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58ec279183697abbd5d3efea3442d4e5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UnityMain </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(void)&#160;</td>
+          <td class="paramname"><em>runAllTests</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/da/da9/pal__update_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,418 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Modules/Update/pal_update.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_5097254b22164c5ad71a4eec719a72ee.html">Modules</a></li><li class="navelem"><a class="el" href="../../dir_a9ff65e3f848f462604f5439bae27718.html">Update</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_update.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d2/d47/pal__plat__update_8h_source.html">pal_plat_update.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../dd/df9/pal__update_8h_source.html">pal_update.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../db/dcf/pal__macros_8h_source.html">pal_macros.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2e85d0291ef07a84780291b67da129b5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/da9/pal__update_8c.html#a2e85d0291ef07a84780291b67da129b5">pal_imageInitAPI</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a> CBfunction)</td></tr>
+<tr class="separator:a2e85d0291ef07a84780291b67da129b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a399c2a8dbd117abf5cd4fa69771f98a0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/da9/pal__update_8c.html#a399c2a8dbd117abf5cd4fa69771f98a0">pal_imageDeInit</a> (void)</td></tr>
+<tr class="separator:a399c2a8dbd117abf5cd4fa69771f98a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4efbe7dd54c89cc87c80e94aa07a9988"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/da9/pal__update_8c.html#a4efbe7dd54c89cc87c80e94aa07a9988">pal_imagePrepare</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, <a class="el" href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a> *headerDetails)</td></tr>
+<tr class="separator:a4efbe7dd54c89cc87c80e94aa07a9988"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8b38046695a7124198787f01250d49a3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/da9/pal__update_8c.html#a8b38046695a7124198787f01250d49a3">pal_imageWrite</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, size_t offset, <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *chunk)</td></tr>
+<tr class="separator:a8b38046695a7124198787f01250d49a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a175083cffce66b96cd608a6cd10e9c61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/da9/pal__update_8c.html#a175083cffce66b96cd608a6cd10e9c61">pal_imageFinalize</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId)</td></tr>
+<tr class="separator:a175083cffce66b96cd608a6cd10e9c61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a37805c23a8066068318031f2d90c2da4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/da9/pal__update_8c.html#a37805c23a8066068318031f2d90c2da4">pal_imageGetDirectMemoryAccess</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, void **imagePtr, size_t *imageSizeInBytes)</td></tr>
+<tr class="separator:a37805c23a8066068318031f2d90c2da4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aac9ba34b8a1600d97b2b019b55e31a8d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/da9/pal__update_8c.html#aac9ba34b8a1600d97b2b019b55e31a8d">pal_imageReadToBuffer</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, size_t offset, <a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *chunk)</td></tr>
+<tr class="separator:aac9ba34b8a1600d97b2b019b55e31a8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31b9ead19037301ac9df1ccd6260262e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/da9/pal__update_8c.html#a31b9ead19037301ac9df1ccd6260262e">pal_imageActivate</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId)</td></tr>
+<tr class="separator:a31b9ead19037301ac9df1ccd6260262e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a278dcb55bfa1196ffe5713fa938d5d6e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/da9/pal__update_8c.html#a278dcb55bfa1196ffe5713fa938d5d6e">pal_imageGetActiveHash</a> (<a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *hash)</td></tr>
+<tr class="separator:a278dcb55bfa1196ffe5713fa938d5d6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72cd92d9d3eb0166f83d7e3c3e66f64c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/da9/pal__update_8c.html#a72cd92d9d3eb0166f83d7e3c3e66f64c">pal_imageGetActiveVersion</a> (<a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *version)</td></tr>
+<tr class="separator:a72cd92d9d3eb0166f83d7e3c3e66f64c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa852dd1acee23c14859d9d4f94e09ce6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/da9/pal__update_8c.html#aa852dd1acee23c14859d9d4f94e09ce6">pal_imageWriteDataToMemory</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a73bbb720e1547d0d02b2ba607a35091d">palImagePlatformData_t</a> dataId, const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *const dataBuffer)</td></tr>
+<tr class="separator:aa852dd1acee23c14859d9d4f94e09ce6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a31b9ead19037301ac9df1ccd6260262e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageActivate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Sets image imageId to be the active image (after device reset). the function must call g_palUpdateServiceCBfunc before after finished</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a399c2a8dbd117abf5cd4fa69771f98a0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageDeInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>clearing all the resources used by the pal_update APIs </p><dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a175083cffce66b96cd608a6cd10e9c61"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageFinalize </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Flushes the image data and sets the version of imageId to imageVersion. the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageVersion</td><td>a struct containing the version as a buffer and the size </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a278dcb55bfa1196ffe5713fa938d5d6e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageGetActiveHash </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>hash</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Retrieve the hash value of the active image to hash buffer with max size hash maxBufferLength and sets to hash bufferLength to the hash size. the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">hash</td><td>struct containing the hash and actual size of hash read </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a72cd92d9d3eb0166f83d7e3c3e66f64c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageGetActiveVersion </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>version</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Retrieve the version of the active image to version buffer with size set to version bufferLength. the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">version</td><td>struct containing the version and actual size of version read </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a37805c23a8066068318031f2d90c2da4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageGetDirectMemoryAccess </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void **&#160;</td>
+          <td class="paramname"><em>imagePtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>imageSizeInBytes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Verifies whether image imageId is readable and sets imagePtr to point to the beginning of start of the image in the memory and imageSizeInBytes to the image size. In case of failure sets imagePtr to NULL and returns relevant palStatus_t error </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">imagePtr</td><td>pointer to the start of the image </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">imageSizeInBytes</td><td>the size of the image </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2e85d0291ef07a84780291b67da129b5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageInitAPI </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a>&#160;</td>
+          <td class="paramname"><em>CBfunction</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>setting the callback function that will be called before the end of each API (except imageGetDirectMemAccess)</p>
+<p>WARNING: please do not change this function! this function loads a call back function received from the upper layer (service). the call back should be called at the end of each function (except pal_plat_imageGetDirectMemAccess) the call back receives the event type that just happened defined by the ENUM palImageEvents_t.</p>
+<p>if you will not call the call back at the end the service behaver will be undefined the function must call g_palUpdateServiceCBfunc before after finished</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">CBfunction</td><td>pointer to the call back function </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4efbe7dd54c89cc87c80e94aa07a9988"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imagePrepare </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a> *&#160;</td>
+          <td class="paramname"><em>headerDetails</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Prepare to write image with id imageId and size imageSize in suitable memory region (Space availability will be verified and reserved). the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageSize</td><td>the size of the image </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aac9ba34b8a1600d97b2b019b55e31a8d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageReadToBuffer </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>chunk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Reads max of chunk maxBufferLength bytes from image imageId with relative offset offset and stores it in chunk buffer. And sets chunk bufferLength value to the actual number of bytes read. Note: Please use this API in case image is not directly accessible via imageGetDirectMemAccess function.</p>
+<p>the function must call g_palUpdateServiceCBfunc before after finished</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">offset</td><td>offset to start read from </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">chunk</td><td>struct containing the data and actual bytes read </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a8b38046695a7124198787f01250d49a3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageWrite </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>chunk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Writes the data in chunk buffer with size chunk bufferLength in the location of imageId adding the relative offset. the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">offset</td><td>the offset to write the data into </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">pointer</td><td>to struct containing the data and the data length to write </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa852dd1acee23c14859d9d4f94e09ce6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageWriteDataToMemory </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a73bbb720e1547d0d02b2ba607a35091d">palImagePlatformData_t</a>&#160;</td>
+          <td class="paramname"><em>dataId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *const&#160;</td>
+          <td class="paramname"><em>dataBuffer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Writing the data of dataId stored in dataBuffer to memory accessible to bootloader. Currently only has is available. the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">dataId</td><td>one of the members of palImagePlatformData_t enum </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">dataBuffer</td><td>struct containing the data and actual bytes to be written </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/da/dfe/pal__errors_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,346 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_errors.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_errors.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d6/dc2/pal__types_8h_source.html">pal_types.h</a>&quot;</code><br />
+</div>
+<p><a href="../../da/dfe/pal__errors_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:a1800b4754588cdf0f544d1a7194168d1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1">palErrorModules_t</a> { <br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091">PAL_ERR_MODULE_GENERAL</a> = 0x4, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9">PAL_ERR_MODULE_PAL</a> = 0x6, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a393e3aee68a29b56f296410882a61ee1">PAL_ERR_MODULE_C</a> = 0x8, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73">PAL_ERR_MODULE_RTOS</a> = 0xC, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b">PAL_ERR_MODULE_NET</a> = 0x10, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1aa9aff26dbdc5924c6d244d7c0727957d">PAL_ERR_MODULE_TLS</a> = 0x14, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a8a27e540ac27fc7fb67c75eeb233b944">PAL_ERR_MODULE_CRYPTO</a> = 0x18, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e">PAL_ERR_MODULE_UPDATE</a> = 0x1C
+<br />
+ }</td></tr>
+<tr class="separator:a1800b4754588cdf0f544d1a7194168d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a480f42f9c6533ec9a36f3312a285a7d5"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5">palError_t</a> { <br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a> = (-1 &lt;&lt; PAL_ERR_MODULE_GENERAL), 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa7f2512e5c7b5a9ac52c061d139bc7d4">PAL_ERR_GENERIC_FAILURE</a> = PAL_ERR_GENERAL_BASE, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a744e1823284f7cc0575234cb7ef00818">PAL_ERR_INVALID_ARGUMENT</a> = PAL_ERR_GENERAL_BASE + 1, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a12207f367341fdf5946140874b26729c">PAL_ERR_NO_MEMORY</a> = PAL_ERR_GENERAL_BASE + 2, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a46dd726962c185841ba6b2a6a51716f9">PAL_ERR_BUFFER_TOO_SMALL</a> = PAL_ERR_GENERAL_BASE + 3, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7b7f0ee07b070ec75d101dfa292b9d94">PAL_ERR_NOT_SUPPORTED</a> = PAL_ERR_GENERAL_BASE + 4, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a316210ded62b55ed1bbcc4e3c5ce8a49">PAL_ERR_TIMEOUT_EXPIRED</a> = PAL_ERR_GENERAL_BASE + 5, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4d8a84476204387d3b5e720b3e0777c">PAL_ERR_NOT_INITIALIZED</a> = PAL_ERR_GENERAL_BASE + 6, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5a632cfd6ad51b23b088ef5bf8a50107">PAL_ERR_NULL_POINTER</a> = PAL_ERR_GENERAL_BASE + 7, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aed6967ecb83464f0d078f210da21c308">PAL_ERR_CREATION_FAILED</a> = PAL_ERR_GENERAL_BASE + 8, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abeb3c1cb1631b2decdf863ba4875f86a">PAL_ERR_NOT_IMPLEMENTED</a> = (-1 &lt;&lt; PAL_ERR_MODULE_PAL), 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a> = (-1 &lt;&lt; PAL_ERR_MODULE_RTOS), 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5af57d1b96cac027006285d3e946f72da7">PAL_ERR_RTOS_PARAMETER</a> = PAL_ERR_RTOS_ERROR_BASE + 0x80, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ab842a33fc2033095f7526d36e76ffde3">PAL_ERR_RTOS_RESOURCE</a> = PAL_ERR_RTOS_ERROR_BASE + 0x81, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4f005aeb7022829339f50e6a1c48f07b">PAL_ERR_RTOS_TIMEOUT</a> = PAL_ERR_RTOS_ERROR_BASE + 0xC1, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a81f5a29e0f8f421412636195cd7eafef">PAL_ERR_RTOS_ISR</a> = PAL_ERR_RTOS_ERROR_BASE + 0x82, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5791ca907d7d2c5e811c1ff8a79ef3f4">PAL_ERR_RTOS_ISR_RECURSIVE</a> = PAL_ERR_RTOS_ERROR_BASE + 0x83, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa372d184ebea174a9a807a6af5feedbb">PAL_ERR_RTOS_PRIORITY</a> = PAL_ERR_RTOS_ERROR_BASE + 0x84, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4e823bf084db0abf95f92e644e44413">PAL_ERR_RTOS_NO_MEMORY</a> = PAL_ERR_RTOS_ERROR_BASE + 0x85, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a166a7c0ad427986e42eee2d7ed5f2690">PAL_ERR_RTOS_VALUE</a> = PAL_ERR_RTOS_ERROR_BASE + 0x86, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad783bb526712a8fc40b8c7e9e2dcca70">PAL_ERR_RTOS_OS</a> = PAL_ERR_RTOS_ERROR_BASE + 0xFF, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> = (-1 &lt;&lt; PAL_ERR_MODULE_NET), 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abd4cc21a7f65533cf8dfc118b19957fe">PAL_ERR_SOCKET_GENERIC</a> = PAL_ERR_SOCKET_ERROR_BASE, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a25f6affacd34aaf7e734a666b5186f2d">PAL_ERR_SOCKET_NO_BUFFERS</a> = PAL_ERR_SOCKET_ERROR_BASE + 1, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4d5cc5d96a1f1d23f69cf3fead9291e2">PAL_ERR_SOCKET_HOST_UNREACHABLE</a> = PAL_ERR_SOCKET_ERROR_BASE + 2, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a493871f4bc0b3223df779b89a3b0b829">PAL_ERR_SOCKET_IN_PROGRES</a> = PAL_ERR_SOCKET_ERROR_BASE + 3, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ade5fcfb0a8b3810ef513c25e7722db6e">PAL_ERR_SOCKET_INVALID_VALUE</a> = PAL_ERR_SOCKET_ERROR_BASE + 4, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a089003c7bd380a8426f211fedfb813ea">PAL_ERR_SOCKET_WOULD_BLOCK</a> = PAL_ERR_SOCKET_ERROR_BASE + 5, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aef19ff78785fd271b93bec327551f74e">PAL_ERR_SOCKET_ADDRESS_IN_USE</a> = PAL_ERR_SOCKET_ERROR_BASE + 6, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a05b82765d558b836fc988283d1d93e20">PAL_ERR_SOCKET_ALREADY_CONNECTED</a> = PAL_ERR_SOCKET_ERROR_BASE + 7, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7027cc594e676d26ade0efcca3d4a8cf">PAL_ERR_SOCKET_CONNECTION_ABORTED</a> = PAL_ERR_SOCKET_ERROR_BASE + 8, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae917d0749e3e541369413c782d6a1f3b">PAL_ERR_SOCKET_CONNECTION_RESET</a> = PAL_ERR_SOCKET_ERROR_BASE + 9, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a90f2efed44c1dbb04928d381355ece58">PAL_ERR_SOCKET_NOT_CONNECTED</a> = PAL_ERR_SOCKET_ERROR_BASE + 10, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae2f7bce589b21231745767161c43349d">PAL_ERR_SOCKET_INPUT_OUTPUT_ERROR</a> = PAL_ERR_SOCKET_ERROR_BASE + 11, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7449190771bd90f1b5dd54f0626c4d50">PAL_ERR_SOCKET_CONNECTION_CLOSED</a> = PAL_ERR_SOCKET_ERROR_BASE + 12, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a557f240d9723393b246c9d03ad5789cd">PAL_ERR_SOCKET_FAILED_TO_SET_SOCKET_TO_NON_BLOCKING</a> = PAL_ERR_SOCKET_ERROR_BASE + 13, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a3c0172ff8cc391873b83c9a1b7b6bd35">PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY</a> = PAL_ERR_SOCKET_ERROR_BASE + 14, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a033490de59972a46877f230267a070c8">PAL_ERR_SOCKET_INVALID_ADDRESS</a> = PAL_ERR_SOCKET_ERROR_BASE + 15, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aeb186326d561fd71f180d59ab12b0d5f">PAL_ERR_SOCKET_DNS_ERROR</a> = PAL_ERR_SOCKET_ERROR_BASE + 16, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a352e14b96bd1489c42728f4da485b577">PAL_ERR_SOCKET_HDCP_ERROR</a> = PAL_ERR_SOCKET_ERROR_BASE + 17, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8f07f3411c26d3107b86d64739b18fd8">PAL_ERR_SOCKET_AUTH_ERROR</a> = PAL_ERR_SOCKET_ERROR_BASE + 18, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a9a2d6af2657b5abd81bd38c7c6cf0479">PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED</a> = PAL_ERR_SOCKET_ERROR_BASE + 19, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">PAL_ERR_UPDATE_ERROR_BASE</a> = (-1 &lt;&lt; PAL_ERR_MODULE_UPDATE), 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a29017351514ed7e0a1fb46d6f1b53cb5">PAL_ERR_UPDATE_ERROR</a> = PAL_ERR_UPDATE_ERROR_BASE, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a123c0937e9046005938c724b7e0c7daf">PAL_ERR_UPDATE_BUSY</a> = PAL_ERR_UPDATE_ERROR_BASE + 1, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5afaeb01c79160229de16f8b764224823b">PAL_ERR_UPDATE_TIMEOUT</a> = PAL_ERR_UPDATE_ERROR_BASE + 2, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a6f29986bcfb1cc0f26c1dfa17fa44cf6">PAL_ERR_UPDATE_OUT_OF_BOUNDS</a> = PAL_ERR_UPDATE_ERROR_BASE + 3, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ada39f2992787040da527359ce7a25a57">PAL_ERR_UPDATE_PALFROM_API</a> = PAL_ERR_UPDATE_ERROR_BASE + 4, 
+<br />
+&#160;&#160;<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaa9a76afb13586743e21ece5310487e6">PAL_ERR_UPDATE_PALFROM_IO</a> = PAL_ERR_UPDATE_ERROR_BASE + 5, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaacb4fc41bcde230f42aeb05bfaccf42">PAL_ERR_UPDATE_END_OF_IMAGE</a> = PAL_ERR_UPDATE_ERROR_BASE + 6, 
+<a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4dffb58d0202d7ca5ac60eff42313ac9">PAL_ERR_UPDATE_CHUNK_TO_SMALL</a> = PAL_ERR_UPDATE_ERROR_BASE + 7
+<br />
+ }</td></tr>
+<tr class="separator:a480f42f9c6533ec9a36f3312a285a7d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5">palError_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35"></a>PAL_ERR_GENERAL_BASE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5aa7f2512e5c7b5a9ac52c061d139bc7d4"></a>PAL_ERR_GENERIC_FAILURE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a744e1823284f7cc0575234cb7ef00818"></a>PAL_ERR_INVALID_ARGUMENT&#160;</td><td class="fielddoc">
+<p>generic failure </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a12207f367341fdf5946140874b26729c"></a>PAL_ERR_NO_MEMORY&#160;</td><td class="fielddoc">
+<p>one or more of the functions arguments is invalid </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a46dd726962c185841ba6b2a6a51716f9"></a>PAL_ERR_BUFFER_TOO_SMALL&#160;</td><td class="fielddoc">
+<p>failure due to a failed attempt to allocate memory </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a7b7f0ee07b070ec75d101dfa292b9d94"></a>PAL_ERR_NOT_SUPPORTED&#160;</td><td class="fielddoc">
+<p>buffer given is too small </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a316210ded62b55ed1bbcc4e3c5ce8a49"></a>PAL_ERR_TIMEOUT_EXPIRED&#160;</td><td class="fielddoc">
+<p>operation not supported by PAL for the current configuration </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5aa4d8a84476204387d3b5e720b3e0777c"></a>PAL_ERR_NOT_INITIALIZED&#160;</td><td class="fielddoc">
+<p>timeout for the operation has expired </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a5a632cfd6ad51b23b088ef5bf8a50107"></a>PAL_ERR_NULL_POINTER&#160;</td><td class="fielddoc">
+<p>timeout for the operation has expired </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5aed6967ecb83464f0d078f210da21c308"></a>PAL_ERR_CREATION_FAILED&#160;</td><td class="fielddoc">
+<p>received a null pointer when it should be initialized </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5abeb3c1cb1631b2decdf863ba4875f86a"></a>PAL_ERR_NOT_IMPLEMENTED&#160;</td><td class="fielddoc">
+<p>failure in creation of given type, like: mutex, thread , etc </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65"></a>PAL_ERR_RTOS_ERROR_BASE&#160;</td><td class="fielddoc">
+<p>Currently not implemented will be in the future </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5af57d1b96cac027006285d3e946f72da7"></a>PAL_ERR_RTOS_PARAMETER&#160;</td><td class="fielddoc">
+<p>generic failure in RTOS module </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5ab842a33fc2033095f7526d36e76ffde3"></a>PAL_ERR_RTOS_RESOURCE&#160;</td><td class="fielddoc">
+<p>PAL mapping of CMSIS error osErrorParameter : parameter error: a mandatory parameter was missing or specified an incorrect object. </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a4f005aeb7022829339f50e6a1c48f07b"></a>PAL_ERR_RTOS_TIMEOUT&#160;</td><td class="fielddoc">
+<p>PAL mapping of CMSIS error osErrorResource : resource not available: a specified resource was not available. </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a81f5a29e0f8f421412636195cd7eafef"></a>PAL_ERR_RTOS_ISR&#160;</td><td class="fielddoc">
+<p>PAL mapping of CMSIS error osErrorTimeoutResource : resource not available within given time: a specified resource was not available within the timeout period </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a5791ca907d7d2c5e811c1ff8a79ef3f4"></a>PAL_ERR_RTOS_ISR_RECURSIVE&#160;</td><td class="fielddoc">
+<p>PAL mapping of CMSIS error osErrorISR : not allowed in ISR context: the function cannot be called from interrupt service routines. </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5aa372d184ebea174a9a807a6af5feedbb"></a>PAL_ERR_RTOS_PRIORITY&#160;</td><td class="fielddoc">
+<p>PAL mapping of CMSIS error osErrorISRRecursive : function called multiple times from ISR with same object.c </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5aa4e823bf084db0abf95f92e644e44413"></a>PAL_ERR_RTOS_NO_MEMORY&#160;</td><td class="fielddoc">
+<p>PAL mapping of CMSIS error osErrorPriority : system cannot determine priority or thread has illegal priority. </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a166a7c0ad427986e42eee2d7ed5f2690"></a>PAL_ERR_RTOS_VALUE&#160;</td><td class="fielddoc">
+<p>PAL mapping of CMSIS error osErrorNoMemory : system is out of memory: it was impossible to allocate or reserve memory for the operation. </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5ad783bb526712a8fc40b8c7e9e2dcca70"></a>PAL_ERR_RTOS_OS&#160;</td><td class="fielddoc">
+<p>PAL mapping of CMSIS error osErrorValue : value of a parameter is out of range. </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10"></a>PAL_ERR_SOCKET_ERROR_BASE&#160;</td><td class="fielddoc">
+<p>PAL mapping of CMSIS error osErrorOS : unspecified RTOS error: run-time error but no other error message fits. </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5abd4cc21a7f65533cf8dfc118b19957fe"></a>PAL_ERR_SOCKET_GENERIC&#160;</td><td class="fielddoc">
+<p>generic socket error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a25f6affacd34aaf7e734a666b5186f2d"></a>PAL_ERR_SOCKET_NO_BUFFERS&#160;</td><td class="fielddoc">
+<p>generic socket error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a4d5cc5d96a1f1d23f69cf3fead9291e2"></a>PAL_ERR_SOCKET_HOST_UNREACHABLE&#160;</td><td class="fielddoc">
+<p>no buffers - PAL mapping of posix error ENOBUFS </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a493871f4bc0b3223df779b89a3b0b829"></a>PAL_ERR_SOCKET_IN_PROGRES&#160;</td><td class="fielddoc">
+<p>host unreachable (routing error)- PAL mapping of posix error EHOSTUNREACH </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5ade5fcfb0a8b3810ef513c25e7722db6e"></a>PAL_ERR_SOCKET_INVALID_VALUE&#160;</td><td class="fielddoc">
+<p>in progress- PAL mapping of posix error EINPROGRESS </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a089003c7bd380a8426f211fedfb813ea"></a>PAL_ERR_SOCKET_WOULD_BLOCK&#160;</td><td class="fielddoc">
+<p>invalid value - PAL mapping of posix error EINVAL </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5aef19ff78785fd271b93bec327551f74e"></a>PAL_ERR_SOCKET_ADDRESS_IN_USE&#160;</td><td class="fielddoc">
+<p>would block - PAL mapping of posix error EWOULDBLOCK </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a05b82765d558b836fc988283d1d93e20"></a>PAL_ERR_SOCKET_ALREADY_CONNECTED&#160;</td><td class="fielddoc">
+<p>Address in use - PAL mapping of posix error EADDRINUSE </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a7027cc594e676d26ade0efcca3d4a8cf"></a>PAL_ERR_SOCKET_CONNECTION_ABORTED&#160;</td><td class="fielddoc">
+<p>Already connected - PAL mapping of posix error EALREADY </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5ae917d0749e3e541369413c782d6a1f3b"></a>PAL_ERR_SOCKET_CONNECTION_RESET&#160;</td><td class="fielddoc">
+<p>Connection aborted - PAL mapping of posix error ECONNABORTED </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a90f2efed44c1dbb04928d381355ece58"></a>PAL_ERR_SOCKET_NOT_CONNECTED&#160;</td><td class="fielddoc">
+<p>Connection reset - PAL mapping of posix error ECONNRESET </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5ae2f7bce589b21231745767161c43349d"></a>PAL_ERR_SOCKET_INPUT_OUTPUT_ERROR&#160;</td><td class="fielddoc">
+<p>Not connected - PAL mapping of posix error ENOTCONN </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a7449190771bd90f1b5dd54f0626c4d50"></a>PAL_ERR_SOCKET_CONNECTION_CLOSED&#160;</td><td class="fielddoc">
+<p>I/O error PAL mapping of posix error EIO </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a557f240d9723393b246c9d03ad5789cd"></a>PAL_ERR_SOCKET_FAILED_TO_SET_SOCKET_TO_NON_BLOCKING&#160;</td><td class="fielddoc">
+<p>connection closed </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a3c0172ff8cc391873b83c9a1b7b6bd35"></a>PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY&#160;</td><td class="fielddoc">
+<p>failed to set socket to non-blocking </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a033490de59972a46877f230267a070c8"></a>PAL_ERR_SOCKET_INVALID_ADDRESS&#160;</td><td class="fielddoc">
+<p>failed to set socket to non-blocking </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5aeb186326d561fd71f180d59ab12b0d5f"></a>PAL_ERR_SOCKET_DNS_ERROR&#160;</td><td class="fielddoc">
+<p>address given was not valid/found </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a352e14b96bd1489c42728f4da485b577"></a>PAL_ERR_SOCKET_HDCP_ERROR&#160;</td><td class="fielddoc">
+<p>DNS lookup error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a8f07f3411c26d3107b86d64739b18fd8"></a>PAL_ERR_SOCKET_AUTH_ERROR&#160;</td><td class="fielddoc">
+<p>HDCP error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a9a2d6af2657b5abd81bd38c7c6cf0479"></a>PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED&#160;</td><td class="fielddoc">
+<p>authentication error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b"></a>PAL_ERR_UPDATE_ERROR_BASE&#160;</td><td class="fielddoc">
+<p>socket option not supported </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a29017351514ed7e0a1fb46d6f1b53cb5"></a>PAL_ERR_UPDATE_ERROR&#160;</td><td class="fielddoc">
+<p>generic error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a123c0937e9046005938c724b7e0c7daf"></a>PAL_ERR_UPDATE_BUSY&#160;</td><td class="fielddoc">
+<p>unknown error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5afaeb01c79160229de16f8b764224823b"></a>PAL_ERR_UPDATE_TIMEOUT&#160;</td><td class="fielddoc">
+<p>unknown error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a6f29986bcfb1cc0f26c1dfa17fa44cf6"></a>PAL_ERR_UPDATE_OUT_OF_BOUNDS&#160;</td><td class="fielddoc">
+<p>unknown error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5ada39f2992787040da527359ce7a25a57"></a>PAL_ERR_UPDATE_PALFROM_API&#160;</td><td class="fielddoc">
+<p>unknown error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5aaa9a76afb13586743e21ece5310487e6"></a>PAL_ERR_UPDATE_PALFROM_IO&#160;</td><td class="fielddoc">
+<p>unknown error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5aaacb4fc41bcde230f42aeb05bfaccf42"></a>PAL_ERR_UPDATE_END_OF_IMAGE&#160;</td><td class="fielddoc">
+<p>unknown error </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a480f42f9c6533ec9a36f3312a285a7d5a4dffb58d0202d7ca5ac60eff42313ac9"></a>PAL_ERR_UPDATE_CHUNK_TO_SMALL&#160;</td><td class="fielddoc">
+<p>unknown error </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a1800b4754588cdf0f544d1a7194168d1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1">palErrorModules_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091"></a>PAL_ERR_MODULE_GENERAL&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9"></a>PAL_ERR_MODULE_PAL&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1800b4754588cdf0f544d1a7194168d1a393e3aee68a29b56f296410882a61ee1"></a>PAL_ERR_MODULE_C&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73"></a>PAL_ERR_MODULE_RTOS&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b"></a>PAL_ERR_MODULE_NET&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1800b4754588cdf0f544d1a7194168d1aa9aff26dbdc5924c6d244d7c0727957d"></a>PAL_ERR_MODULE_TLS&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1800b4754588cdf0f544d1a7194168d1a8a27e540ac27fc7fb67c75eeb233b944"></a>PAL_ERR_MODULE_CRYPTO&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e"></a>PAL_ERR_MODULE_UPDATE&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/da/dfe/pal__errors_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_errors.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_errors.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../da/dfe/pal__errors_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef _PAL_ERRORS_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define _PAL_ERRORS_H</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d6/dc2/pal__types_8h.html">pal_types.h</a>&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1">   28</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091">   29</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091">PAL_ERR_MODULE_GENERAL</a>      = 0x4,</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9">   30</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9">PAL_ERR_MODULE_PAL</a>          = 0x6,</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a393e3aee68a29b56f296410882a61ee1">   31</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a393e3aee68a29b56f296410882a61ee1">PAL_ERR_MODULE_C</a>            = 0x8,</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73">   32</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73">PAL_ERR_MODULE_RTOS</a>         = 0xC,</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b">   33</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b">PAL_ERR_MODULE_NET</a>          = 0x10,</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1aa9aff26dbdc5924c6d244d7c0727957d">   34</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1aa9aff26dbdc5924c6d244d7c0727957d">PAL_ERR_MODULE_TLS</a>          = 0x14,</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a8a27e540ac27fc7fb67c75eeb233b944">   35</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a8a27e540ac27fc7fb67c75eeb233b944">PAL_ERR_MODULE_CRYPTO</a>       = 0x18,</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e">   36</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e">PAL_ERR_MODULE_UPDATE</a>       = 0x1C,</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;} <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1">palErrorModules_t</a>;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5">   40</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="comment">// generic errors</span></div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">   42</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a> =          (-1 &lt;&lt; <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091">PAL_ERR_MODULE_GENERAL</a>),</div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa7f2512e5c7b5a9ac52c061d139bc7d4">   43</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa7f2512e5c7b5a9ac52c061d139bc7d4">PAL_ERR_GENERIC_FAILURE</a> =       <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a>,            <span class="comment">// try to use a more specific error message whenever possible</span></div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a744e1823284f7cc0575234cb7ef00818">   44</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a744e1823284f7cc0575234cb7ef00818">PAL_ERR_INVALID_ARGUMENT</a> =      <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a> + 1,   </div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a12207f367341fdf5946140874b26729c">   45</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a12207f367341fdf5946140874b26729c">PAL_ERR_NO_MEMORY</a> =             <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a> + 2,   </div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a46dd726962c185841ba6b2a6a51716f9">   46</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a46dd726962c185841ba6b2a6a51716f9">PAL_ERR_BUFFER_TOO_SMALL</a> =      <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a> + 3,   </div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7b7f0ee07b070ec75d101dfa292b9d94">   47</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7b7f0ee07b070ec75d101dfa292b9d94">PAL_ERR_NOT_SUPPORTED</a> =         <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a> + 4,   </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a316210ded62b55ed1bbcc4e3c5ce8a49">   48</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a316210ded62b55ed1bbcc4e3c5ce8a49">PAL_ERR_TIMEOUT_EXPIRED</a> =       <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a> + 5,   </div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4d8a84476204387d3b5e720b3e0777c">   49</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4d8a84476204387d3b5e720b3e0777c">PAL_ERR_NOT_INITIALIZED</a> =       <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a> + 6,   </div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5a632cfd6ad51b23b088ef5bf8a50107">   50</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5a632cfd6ad51b23b088ef5bf8a50107">PAL_ERR_NULL_POINTER</a>     =      <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a> + 7,   </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aed6967ecb83464f0d078f210da21c308">   51</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aed6967ecb83464f0d078f210da21c308">PAL_ERR_CREATION_FAILED</a> =       <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a> + 8,   </div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="comment">// pal errors</span></div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abeb3c1cb1631b2decdf863ba4875f86a">   53</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abeb3c1cb1631b2decdf863ba4875f86a">PAL_ERR_NOT_IMPLEMENTED</a> =                               (-1 &lt;&lt; <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9">PAL_ERR_MODULE_PAL</a>), </div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="comment">// c errors</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="comment">// RTOS errors</span></div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">   56</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a> =                               (-1 &lt;&lt; <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73">PAL_ERR_MODULE_RTOS</a>),     <span class="comment">// try to use a more specific error message whenever possible</span></div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5af57d1b96cac027006285d3e946f72da7">   57</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5af57d1b96cac027006285d3e946f72da7">PAL_ERR_RTOS_PARAMETER</a> =                                <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a> + 0x80,</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ab842a33fc2033095f7526d36e76ffde3">   58</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ab842a33fc2033095f7526d36e76ffde3">PAL_ERR_RTOS_RESOURCE</a> =                                 <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a> + 0x81,</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4f005aeb7022829339f50e6a1c48f07b">   59</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4f005aeb7022829339f50e6a1c48f07b">PAL_ERR_RTOS_TIMEOUT</a> =                                  <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a> + 0xC1,</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a81f5a29e0f8f421412636195cd7eafef">   60</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a81f5a29e0f8f421412636195cd7eafef">PAL_ERR_RTOS_ISR</a> =                                      <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a> + 0x82,</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5791ca907d7d2c5e811c1ff8a79ef3f4">   61</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5791ca907d7d2c5e811c1ff8a79ef3f4">PAL_ERR_RTOS_ISR_RECURSIVE</a> =                            <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a> + 0x83,</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa372d184ebea174a9a807a6af5feedbb">   62</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa372d184ebea174a9a807a6af5feedbb">PAL_ERR_RTOS_PRIORITY</a> =                                 <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a> + 0x84,</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4e823bf084db0abf95f92e644e44413">   63</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4e823bf084db0abf95f92e644e44413">PAL_ERR_RTOS_NO_MEMORY</a> =                                <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a> + 0x85,</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a166a7c0ad427986e42eee2d7ed5f2690">   64</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a166a7c0ad427986e42eee2d7ed5f2690">PAL_ERR_RTOS_VALUE</a> =                                    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a> + 0x86,</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad783bb526712a8fc40b8c7e9e2dcca70">   65</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad783bb526712a8fc40b8c7e9e2dcca70">PAL_ERR_RTOS_OS</a> =                                       <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a> + 0xFF,</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="comment">// network errors</span></div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">   67</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> =                             (-1 &lt;&lt; <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b">PAL_ERR_MODULE_NET</a>),             </div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abd4cc21a7f65533cf8dfc118b19957fe">   68</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abd4cc21a7f65533cf8dfc118b19957fe">PAL_ERR_SOCKET_GENERIC</a> =                                <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a>,              </div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a25f6affacd34aaf7e734a666b5186f2d">   69</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a25f6affacd34aaf7e734a666b5186f2d">PAL_ERR_SOCKET_NO_BUFFERS</a> =                             <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 1,          </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4d5cc5d96a1f1d23f69cf3fead9291e2">   70</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4d5cc5d96a1f1d23f69cf3fead9291e2">PAL_ERR_SOCKET_HOST_UNREACHABLE</a> =                       <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 2,          </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a493871f4bc0b3223df779b89a3b0b829">   71</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a493871f4bc0b3223df779b89a3b0b829">PAL_ERR_SOCKET_IN_PROGRES</a> =                             <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 3,          </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ade5fcfb0a8b3810ef513c25e7722db6e">   72</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ade5fcfb0a8b3810ef513c25e7722db6e">PAL_ERR_SOCKET_INVALID_VALUE</a> =                          <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 4,          </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a089003c7bd380a8426f211fedfb813ea">   73</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a089003c7bd380a8426f211fedfb813ea">PAL_ERR_SOCKET_WOULD_BLOCK</a> =                            <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 5,          </div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aef19ff78785fd271b93bec327551f74e">   74</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aef19ff78785fd271b93bec327551f74e">PAL_ERR_SOCKET_ADDRESS_IN_USE</a> =                         <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 6,          </div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a05b82765d558b836fc988283d1d93e20">   75</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a05b82765d558b836fc988283d1d93e20">PAL_ERR_SOCKET_ALREADY_CONNECTED</a> =                      <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 7,          </div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7027cc594e676d26ade0efcca3d4a8cf">   76</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7027cc594e676d26ade0efcca3d4a8cf">PAL_ERR_SOCKET_CONNECTION_ABORTED</a> =                     <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 8,          </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae917d0749e3e541369413c782d6a1f3b">   77</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae917d0749e3e541369413c782d6a1f3b">PAL_ERR_SOCKET_CONNECTION_RESET</a> =                       <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 9,          </div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a90f2efed44c1dbb04928d381355ece58">   78</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a90f2efed44c1dbb04928d381355ece58">PAL_ERR_SOCKET_NOT_CONNECTED</a> =                          <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 10,         </div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae2f7bce589b21231745767161c43349d">   79</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae2f7bce589b21231745767161c43349d">PAL_ERR_SOCKET_INPUT_OUTPUT_ERROR</a> =                     <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 11,         </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7449190771bd90f1b5dd54f0626c4d50">   80</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7449190771bd90f1b5dd54f0626c4d50">PAL_ERR_SOCKET_CONNECTION_CLOSED</a> =                      <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 12,         </div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a557f240d9723393b246c9d03ad5789cd">   81</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a557f240d9723393b246c9d03ad5789cd">PAL_ERR_SOCKET_FAILED_TO_SET_SOCKET_TO_NON_BLOCKING</a> =   <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 13,         </div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a3c0172ff8cc391873b83c9a1b7b6bd35">   82</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a3c0172ff8cc391873b83c9a1b7b6bd35">PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY</a> =                 <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 14,         </div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a033490de59972a46877f230267a070c8">   83</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a033490de59972a46877f230267a070c8">PAL_ERR_SOCKET_INVALID_ADDRESS</a> =                        <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 15,         </div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aeb186326d561fd71f180d59ab12b0d5f">   84</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aeb186326d561fd71f180d59ab12b0d5f">PAL_ERR_SOCKET_DNS_ERROR</a> =                              <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 16,         </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a352e14b96bd1489c42728f4da485b577">   85</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a352e14b96bd1489c42728f4da485b577">PAL_ERR_SOCKET_HDCP_ERROR</a> =                             <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 17,         </div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8f07f3411c26d3107b86d64739b18fd8">   86</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8f07f3411c26d3107b86d64739b18fd8">PAL_ERR_SOCKET_AUTH_ERROR</a> =                             <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 18,         </div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a9a2d6af2657b5abd81bd38c7c6cf0479">   87</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a9a2d6af2657b5abd81bd38c7c6cf0479">PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED</a> =                   <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a> + 19,         </div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="comment">//update Error</span></div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">   89</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">PAL_ERR_UPDATE_ERROR_BASE</a>           =                   (-1 &lt;&lt; <a class="code" href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e">PAL_ERR_MODULE_UPDATE</a>),          </div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a29017351514ed7e0a1fb46d6f1b53cb5">   90</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a29017351514ed7e0a1fb46d6f1b53cb5">PAL_ERR_UPDATE_ERROR</a>                =                   <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">PAL_ERR_UPDATE_ERROR_BASE</a>,              </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a123c0937e9046005938c724b7e0c7daf">   91</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a123c0937e9046005938c724b7e0c7daf">PAL_ERR_UPDATE_BUSY</a>                 =                   <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">PAL_ERR_UPDATE_ERROR_BASE</a> + 1,          </div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5afaeb01c79160229de16f8b764224823b">   92</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5afaeb01c79160229de16f8b764224823b">PAL_ERR_UPDATE_TIMEOUT</a>              =                   <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">PAL_ERR_UPDATE_ERROR_BASE</a> + 2,          </div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a6f29986bcfb1cc0f26c1dfa17fa44cf6">   93</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a6f29986bcfb1cc0f26c1dfa17fa44cf6">PAL_ERR_UPDATE_OUT_OF_BOUNDS</a>        =                   <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">PAL_ERR_UPDATE_ERROR_BASE</a> + 3,          </div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ada39f2992787040da527359ce7a25a57">   94</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ada39f2992787040da527359ce7a25a57">PAL_ERR_UPDATE_PALFROM_API</a>          =                   <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">PAL_ERR_UPDATE_ERROR_BASE</a> + 4,          </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaa9a76afb13586743e21ece5310487e6">   95</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaa9a76afb13586743e21ece5310487e6">PAL_ERR_UPDATE_PALFROM_IO</a>           =                   <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">PAL_ERR_UPDATE_ERROR_BASE</a> + 5,          </div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaacb4fc41bcde230f42aeb05bfaccf42">   96</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaacb4fc41bcde230f42aeb05bfaccf42">PAL_ERR_UPDATE_END_OF_IMAGE</a>         =                   <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">PAL_ERR_UPDATE_ERROR_BASE</a> + 6,          </div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4dffb58d0202d7ca5ac60eff42313ac9">   97</a></span>&#160;    <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4dffb58d0202d7ca5ac60eff42313ac9">PAL_ERR_UPDATE_CHUNK_TO_SMALL</a>       =                   <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">PAL_ERR_UPDATE_ERROR_BASE</a> + 7,          </div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;} <a class="code" href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5">palError_t</a>; </div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="preprocessor">#endif //_PAL_ERRORS</span></div><div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a4f005aeb7022829339f50e6a1c48f07b"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4f005aeb7022829339f50e6a1c48f07b">PAL_ERR_RTOS_TIMEOUT</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:59</div></div>
+<div class="ttc" id="pal__errors_8h_html_a1800b4754588cdf0f544d1a7194168d1a393e3aee68a29b56f296410882a61ee1"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a393e3aee68a29b56f296410882a61ee1">PAL_ERR_MODULE_C</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:31</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a3c0172ff8cc391873b83c9a1b7b6bd35"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a3c0172ff8cc391873b83c9a1b7b6bd35">PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:82</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">PAL_ERR_SOCKET_ERROR_BASE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:67</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a4d5cc5d96a1f1d23f69cf3fead9291e2"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4d5cc5d96a1f1d23f69cf3fead9291e2">PAL_ERR_SOCKET_HOST_UNREACHABLE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:70</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5aa7f2512e5c7b5a9ac52c061d139bc7d4"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa7f2512e5c7b5a9ac52c061d139bc7d4">PAL_ERR_GENERIC_FAILURE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:43</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a123c0937e9046005938c724b7e0c7daf"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a123c0937e9046005938c724b7e0c7daf">PAL_ERR_UPDATE_BUSY</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:91</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5aa4e823bf084db0abf95f92e644e44413"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4e823bf084db0abf95f92e644e44413">PAL_ERR_RTOS_NO_MEMORY</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:63</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">PAL_ERR_GENERAL_BASE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:42</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a557f240d9723393b246c9d03ad5789cd"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a557f240d9723393b246c9d03ad5789cd">PAL_ERR_SOCKET_FAILED_TO_SET_SOCKET_TO_NON_BLOCKING</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:81</div></div>
+<div class="ttc" id="pal__errors_8h_html_a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e">PAL_ERR_MODULE_UPDATE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:36</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5ade5fcfb0a8b3810ef513c25e7722db6e"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ade5fcfb0a8b3810ef513c25e7722db6e">PAL_ERR_SOCKET_INVALID_VALUE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:72</div></div>
+<div class="ttc" id="pal__errors_8h_html_a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73">PAL_ERR_MODULE_RTOS</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:32</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5ada39f2992787040da527359ce7a25a57"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ada39f2992787040da527359ce7a25a57">PAL_ERR_UPDATE_PALFROM_API</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:94</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a05b82765d558b836fc988283d1d93e20"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a05b82765d558b836fc988283d1d93e20">PAL_ERR_SOCKET_ALREADY_CONNECTED</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:75</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a25f6affacd34aaf7e734a666b5186f2d"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a25f6affacd34aaf7e734a666b5186f2d">PAL_ERR_SOCKET_NO_BUFFERS</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:69</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a744e1823284f7cc0575234cb7ef00818"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a744e1823284f7cc0575234cb7ef00818">PAL_ERR_INVALID_ARGUMENT</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:44</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a12207f367341fdf5946140874b26729c"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a12207f367341fdf5946140874b26729c">PAL_ERR_NO_MEMORY</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:45</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a29017351514ed7e0a1fb46d6f1b53cb5"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a29017351514ed7e0a1fb46d6f1b53cb5">PAL_ERR_UPDATE_ERROR</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:90</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a46dd726962c185841ba6b2a6a51716f9"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a46dd726962c185841ba6b2a6a51716f9">PAL_ERR_BUFFER_TOO_SMALL</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:46</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a7027cc594e676d26ade0efcca3d4a8cf"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7027cc594e676d26ade0efcca3d4a8cf">PAL_ERR_SOCKET_CONNECTION_ABORTED</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:76</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5">palError_t</a></div><div class="ttdeci">palError_t</div><div class="ttdef"><b>Definition:</b> pal_errors.h:40</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a352e14b96bd1489c42728f4da485b577"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a352e14b96bd1489c42728f4da485b577">PAL_ERR_SOCKET_HDCP_ERROR</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:85</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5af57d1b96cac027006285d3e946f72da7"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5af57d1b96cac027006285d3e946f72da7">PAL_ERR_RTOS_PARAMETER</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:57</div></div>
+<div class="ttc" id="pal__errors_8h_html_a1800b4754588cdf0f544d1a7194168d1aa9aff26dbdc5924c6d244d7c0727957d"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1aa9aff26dbdc5924c6d244d7c0727957d">PAL_ERR_MODULE_TLS</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:34</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a7b7f0ee07b070ec75d101dfa292b9d94"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7b7f0ee07b070ec75d101dfa292b9d94">PAL_ERR_NOT_SUPPORTED</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:47</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a316210ded62b55ed1bbcc4e3c5ce8a49"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a316210ded62b55ed1bbcc4e3c5ce8a49">PAL_ERR_TIMEOUT_EXPIRED</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:48</div></div>
+<div class="ttc" id="pal__errors_8h_html_a1800b4754588cdf0f544d1a7194168d1"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1">palErrorModules_t</a></div><div class="ttdeci">palErrorModules_t</div><div class="ttdef"><b>Definition:</b> pal_errors.h:28</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5aaa9a76afb13586743e21ece5310487e6"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaa9a76afb13586743e21ece5310487e6">PAL_ERR_UPDATE_PALFROM_IO</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:95</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a4dffb58d0202d7ca5ac60eff42313ac9"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4dffb58d0202d7ca5ac60eff42313ac9">PAL_ERR_UPDATE_CHUNK_TO_SMALL</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:97</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5aed6967ecb83464f0d078f210da21c308"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aed6967ecb83464f0d078f210da21c308">PAL_ERR_CREATION_FAILED</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:51</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a166a7c0ad427986e42eee2d7ed5f2690"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a166a7c0ad427986e42eee2d7ed5f2690">PAL_ERR_RTOS_VALUE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:64</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">PAL_ERR_RTOS_ERROR_BASE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:56</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a089003c7bd380a8426f211fedfb813ea"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a089003c7bd380a8426f211fedfb813ea">PAL_ERR_SOCKET_WOULD_BLOCK</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:73</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5ab842a33fc2033095f7526d36e76ffde3"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ab842a33fc2033095f7526d36e76ffde3">PAL_ERR_RTOS_RESOURCE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:58</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5aaacb4fc41bcde230f42aeb05bfaccf42"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaacb4fc41bcde230f42aeb05bfaccf42">PAL_ERR_UPDATE_END_OF_IMAGE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:96</div></div>
+<div class="ttc" id="pal__errors_8h_html_a1800b4754588cdf0f544d1a7194168d1a8a27e540ac27fc7fb67c75eeb233b944"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a8a27e540ac27fc7fb67c75eeb233b944">PAL_ERR_MODULE_CRYPTO</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:35</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5ae917d0749e3e541369413c782d6a1f3b"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae917d0749e3e541369413c782d6a1f3b">PAL_ERR_SOCKET_CONNECTION_RESET</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:77</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5ad783bb526712a8fc40b8c7e9e2dcca70"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad783bb526712a8fc40b8c7e9e2dcca70">PAL_ERR_RTOS_OS</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:65</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5afaeb01c79160229de16f8b764224823b"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5afaeb01c79160229de16f8b764224823b">PAL_ERR_UPDATE_TIMEOUT</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:92</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a493871f4bc0b3223df779b89a3b0b829"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a493871f4bc0b3223df779b89a3b0b829">PAL_ERR_SOCKET_IN_PROGRES</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:71</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a90f2efed44c1dbb04928d381355ece58"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a90f2efed44c1dbb04928d381355ece58">PAL_ERR_SOCKET_NOT_CONNECTED</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:78</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5abd4cc21a7f65533cf8dfc118b19957fe"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abd4cc21a7f65533cf8dfc118b19957fe">PAL_ERR_SOCKET_GENERIC</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:68</div></div>
+<div class="ttc" id="pal__types_8h_html"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html">pal_types.h</a></div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5aeb186326d561fd71f180d59ab12b0d5f"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aeb186326d561fd71f180d59ab12b0d5f">PAL_ERR_SOCKET_DNS_ERROR</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:84</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a7449190771bd90f1b5dd54f0626c4d50"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7449190771bd90f1b5dd54f0626c4d50">PAL_ERR_SOCKET_CONNECTION_CLOSED</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:80</div></div>
+<div class="ttc" id="pal__errors_8h_html_a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9">PAL_ERR_MODULE_PAL</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:30</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">PAL_ERR_UPDATE_ERROR_BASE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:89</div></div>
+<div class="ttc" id="pal__errors_8h_html_a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b">PAL_ERR_MODULE_NET</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:33</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a5a632cfd6ad51b23b088ef5bf8a50107"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5a632cfd6ad51b23b088ef5bf8a50107">PAL_ERR_NULL_POINTER</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:50</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5aa372d184ebea174a9a807a6af5feedbb"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa372d184ebea174a9a807a6af5feedbb">PAL_ERR_RTOS_PRIORITY</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:62</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5aa4d8a84476204387d3b5e720b3e0777c"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4d8a84476204387d3b5e720b3e0777c">PAL_ERR_NOT_INITIALIZED</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:49</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a033490de59972a46877f230267a070c8"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a033490de59972a46877f230267a070c8">PAL_ERR_SOCKET_INVALID_ADDRESS</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:83</div></div>
+<div class="ttc" id="pal__errors_8h_html_a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091">PAL_ERR_MODULE_GENERAL</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:29</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5ae2f7bce589b21231745767161c43349d"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae2f7bce589b21231745767161c43349d">PAL_ERR_SOCKET_INPUT_OUTPUT_ERROR</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:79</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5aef19ff78785fd271b93bec327551f74e"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aef19ff78785fd271b93bec327551f74e">PAL_ERR_SOCKET_ADDRESS_IN_USE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:74</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5abeb3c1cb1631b2decdf863ba4875f86a"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abeb3c1cb1631b2decdf863ba4875f86a">PAL_ERR_NOT_IMPLEMENTED</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:53</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a8f07f3411c26d3107b86d64739b18fd8"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8f07f3411c26d3107b86d64739b18fd8">PAL_ERR_SOCKET_AUTH_ERROR</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:86</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a6f29986bcfb1cc0f26c1dfa17fa44cf6"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a6f29986bcfb1cc0f26c1dfa17fa44cf6">PAL_ERR_UPDATE_OUT_OF_BOUNDS</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:93</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a9a2d6af2657b5abd81bd38c7c6cf0479"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a9a2d6af2657b5abd81bd38c7c6cf0479">PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:87</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a5791ca907d7d2c5e811c1ff8a79ef3f4"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5791ca907d7d2c5e811c1ff8a79ef3f4">PAL_ERR_RTOS_ISR_RECURSIVE</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:61</div></div>
+<div class="ttc" id="pal__errors_8h_html_a480f42f9c6533ec9a36f3312a285a7d5a81f5a29e0f8f421412636195cd7eafef"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a81f5a29e0f8f421412636195cd7eafef">PAL_ERR_RTOS_ISR</a></div><div class="ttdef"><b>Definition:</b> pal_errors.h:60</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/db/d42/structpal_socket_address.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: palSocketAddress Struct Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="../../functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">palSocketAddress Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="../../d9/d17/pal__network_8h_source.html">pal_network.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a8bdecffc9afacbdf84fc78d26090c221"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d42/structpal_socket_address.html#a8bdecffc9afacbdf84fc78d26090c221">addressType</a></td></tr>
+<tr class="separator:a8bdecffc9afacbdf84fc78d26090c221"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a5471b518ef60cfa0f28c47a323ec4c"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d42/structpal_socket_address.html#a0a5471b518ef60cfa0f28c47a323ec4c">addressData</a> [<a class="el" href="../../d9/d17/pal__network_8h.html#ac831e2e5064065e10c741da1003ff039">PAL_NET_MAX_ADDR_SIZE</a>]</td></tr>
+<tr class="separator:a0a5471b518ef60cfa0f28c47a323ec4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a0a5471b518ef60cfa0f28c47a323ec4c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char palSocketAddress::addressData[<a class="el" href="../../d9/d17/pal__network_8h.html#ac831e2e5064065e10c741da1003ff039">PAL_NET_MAX_ADDR_SIZE</a>]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>address family for the socket </p>
+
+</div>
+</div>
+<a class="anchor" id="a8bdecffc9afacbdf84fc78d26090c221"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned short palSocketAddress::addressType</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/<a class="el" href="../../d9/d17/pal__network_8h_source.html">pal_network.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/db/dcf/pal__macros_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,587 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_macros.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_macros.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../da/dfe/pal__errors_8h_source.html">pal_errors.h</a>&quot;</code><br />
+</div>
+<p><a href="../../db/dcf/pal__macros_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a92e2ad3a6b8c71818b6a08720fa84ba5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a92e2ad3a6b8c71818b6a08720fa84ba5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08c56fc189bfb1a6864a7b5d68433e7e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a08c56fc189bfb1a6864a7b5d68433e7e">PAL_MAX_UINT8</a>&#160;&#160;&#160;0xFFU</td></tr>
+<tr class="separator:a08c56fc189bfb1a6864a7b5d68433e7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af8d58ab12b0f655fe922fc40b3e52ca2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#af8d58ab12b0f655fe922fc40b3e52ca2">PAL_MAX_UINT16</a>&#160;&#160;&#160;0xFFFFU</td></tr>
+<tr class="separator:af8d58ab12b0f655fe922fc40b3e52ca2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac7e2d509703ff033a302b325aa664f6e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#ac7e2d509703ff033a302b325aa664f6e">PAL_MAX_UINT32</a>&#160;&#160;&#160;0xFFFFFFFFUL</td></tr>
+<tr class="separator:ac7e2d509703ff033a302b325aa664f6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6ee734c1fc41affa0926797e382fc8d4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a6ee734c1fc41affa0926797e382fc8d4">PAL_MAX_INT32</a>&#160;&#160;&#160;0x7FFFFFFFL</td></tr>
+<tr class="separator:a6ee734c1fc41affa0926797e382fc8d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac3a2f334767728e9bc57512139e0bd61"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#ac3a2f334767728e9bc57512139e0bd61">PAL_MIN_INT32</a>&#160;&#160;&#160;0x80000000L</td></tr>
+<tr class="separator:ac3a2f334767728e9bc57512139e0bd61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a28a8006d7bca3b64235ca4d0cb39bf2b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a28a8006d7bca3b64235ca4d0cb39bf2b">PAL_MAX_UINT64</a>&#160;&#160;&#160;0xFFFFFFFFFFFFFFFFULL</td></tr>
+<tr class="separator:a28a8006d7bca3b64235ca4d0cb39bf2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ada154fcb4b3ef9b641486f30de56c7b7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#ada154fcb4b3ef9b641486f30de56c7b7">PAL_MAX_INT64</a>&#160;&#160;&#160;0x7FFFFFFFFFFFFFFFLL</td></tr>
+<tr class="separator:ada154fcb4b3ef9b641486f30de56c7b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a117c6ce53646b65b4cdcb5da01801675"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a117c6ce53646b65b4cdcb5da01801675">PAL_MAX</a>(a,  b)                    &#160;&#160;&#160;((a) &gt; (b) ? (a) : (b))</td></tr>
+<tr class="separator:a117c6ce53646b65b4cdcb5da01801675"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29066dd6aaf6aa8fa21f3a88feb6da59"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a29066dd6aaf6aa8fa21f3a88feb6da59">PAL_MIN</a>(a,  b)                    &#160;&#160;&#160;((a) &lt; (b) ? (a) : (b))</td></tr>
+<tr class="separator:a29066dd6aaf6aa8fa21f3a88feb6da59"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a966411fe41e3830553bb1b8cf8baf730"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a966411fe41e3830553bb1b8cf8baf730">PAL_DIVIDE_ROUND_UP</a>(num,  divider)                  &#160;&#160;&#160;(((num) + (divider) - 1) / (divider))</td></tr>
+<tr class="separator:a966411fe41e3830553bb1b8cf8baf730"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1651594dc71abf466bddd0f6393edb8b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a1651594dc71abf466bddd0f6393edb8b">LITTLE__ENDIAN</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a1651594dc71abf466bddd0f6393edb8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98390512a7c2732f1197b07acf03e226"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a98390512a7c2732f1197b07acf03e226">PAL_HTONS</a>(x)</td></tr>
+<tr class="separator:a98390512a7c2732f1197b07acf03e226"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a55fbcf7a453813fec69016916802de2c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a55fbcf7a453813fec69016916802de2c">PAL_NTOHS</a>(x)</td></tr>
+<tr class="separator:a55fbcf7a453813fec69016916802de2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a55b1a7d9f939231045521ec4a4817cff"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a55b1a7d9f939231045521ec4a4817cff">PAL_HTONL</a>(x)</td></tr>
+<tr class="separator:a55b1a7d9f939231045521ec4a4817cff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7cbc81d1fb0dcddb1cc88b59d50c2aa9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a7cbc81d1fb0dcddb1cc88b59d50c2aa9">PAL_NTOHL</a>(x)</td></tr>
+<tr class="separator:a7cbc81d1fb0dcddb1cc88b59d50c2aa9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad989cc9220df56cd410590fc628e93b7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#ad989cc9220df56cd410590fc628e93b7">PAL_INVERSE_UINT16_BYTES</a>(val)&#160;&#160;&#160;( ((val) &lt;&lt; 8) | (((val) &amp; 0x0000FF00) &gt;&gt; 8))</td></tr>
+<tr class="separator:ad989cc9220df56cd410590fc628e93b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4a0b711e344955017ab60ff37977e18f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a4a0b711e344955017ab60ff37977e18f">PAL_INVERSE_UINT32_BYTES</a>(val)&#160;&#160;&#160;( ((val) &gt;&gt; 24) | (((val) &amp; 0x00FF0000) &gt;&gt; 8) | (((val) &amp; 0x0000FF00) &lt;&lt; 8) | (((val) &amp; 0x000000FF) &lt;&lt; 24) )</td></tr>
+<tr class="separator:a4a0b711e344955017ab60ff37977e18f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae376dc7d0682fb2fc8927897fb065c4c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#ae376dc7d0682fb2fc8927897fb065c4c">PAL_INVERSE_UINT64_BYTES</a>(val)&#160;&#160;&#160;((<a class="el" href="../../db/dcf/pal__macros_8h.html#a4a0b711e344955017ab60ff37977e18f">PAL_INVERSE_UINT32_BYTES</a>( ((val &gt;&gt; 16) &gt;&gt; 16)) &amp;0xffffffff)  | ((((uint64_t)PAL_INVERSE_UINT32_BYTES(val &amp; 0xffffffff))&lt;&lt;16)&lt;&lt;16))</td></tr>
+<tr class="separator:ae376dc7d0682fb2fc8927897fb065c4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1c98870c5eeba8fe649345e371ef866"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#ad1c98870c5eeba8fe649345e371ef866">PAL_LITTLE_ENDIAN_TO_HOST_16BIT</a>(x)&#160;&#160;&#160;(x)</td></tr>
+<tr class="separator:ad1c98870c5eeba8fe649345e371ef866"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa6229ece344478c07677c8b0436b1bb0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#aa6229ece344478c07677c8b0436b1bb0">PAL_LITTLE_ENDIAN_TO_HOST_32BIT</a>(x)&#160;&#160;&#160;(x)</td></tr>
+<tr class="separator:aa6229ece344478c07677c8b0436b1bb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ae1ca0100a3eee36eb95931cbec633e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a4ae1ca0100a3eee36eb95931cbec633e">PAL_LITTLE_ENDIAN_TO_HOST_64BIT</a>(x)&#160;&#160;&#160;(x)</td></tr>
+<tr class="separator:a4ae1ca0100a3eee36eb95931cbec633e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9bd4f76c3897b4338fe50a8d69830fe5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#a9bd4f76c3897b4338fe50a8d69830fe5">PAL_HOST_TO_LITTLE_ENDIAN_16BIT</a>(x)&#160;&#160;&#160;(x)</td></tr>
+<tr class="separator:a9bd4f76c3897b4338fe50a8d69830fe5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab01046a25df49d7fe1d85a8bf722975f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#ab01046a25df49d7fe1d85a8bf722975f">PAL_HOST_TO_LITTLE_ENDIAN_32BIT</a>(x)&#160;&#160;&#160;(x)</td></tr>
+<tr class="separator:ab01046a25df49d7fe1d85a8bf722975f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc0a4752569188800a75e1601a7e11b5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#adc0a4752569188800a75e1601a7e11b5">PAL_HOST_TO_LITTLE_ENDIAN_64BIT</a>(x)&#160;&#160;&#160;(x)</td></tr>
+<tr class="separator:adc0a4752569188800a75e1601a7e11b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad2109677fa03720f6ab0df072c755529"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#ad2109677fa03720f6ab0df072c755529">PAL_MODULE_INIT</a>(INIT)&#160;&#160;&#160;INIT= 1</td></tr>
+<tr class="separator:ad2109677fa03720f6ab0df072c755529"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaeb3e06c7119793239368c0fe74cda05"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#aaeb3e06c7119793239368c0fe74cda05">PAL_MODULE_DEINIT</a>(INIT)&#160;&#160;&#160;INIT= 0</td></tr>
+<tr class="separator:aaeb3e06c7119793239368c0fe74cda05"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade9a83a9aab96cf50058801afdef4ace"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#ade9a83a9aab96cf50058801afdef4ace">PAL_MODULE_IS_INIT</a>(INIT)</td></tr>
+<tr class="separator:ade9a83a9aab96cf50058801afdef4ace"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa1b662a1198e5729d6d0934a7efb02c4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/dcf/pal__macros_8h.html#aa1b662a1198e5729d6d0934a7efb02c4">DEBUG_PRINT</a>(ARGS...)</td></tr>
+<tr class="separator:aa1b662a1198e5729d6d0934a7efb02c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="aa1b662a1198e5729d6d0934a7efb02c4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEBUG_PRINT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">ARGS...</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1651594dc71abf466bddd0f6393edb8b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define LITTLE__ENDIAN&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a966411fe41e3830553bb1b8cf8baf730"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_DIVIDE_ROUND_UP</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">num, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">divider&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td>&#160;&#160;&#160;(((num) + (divider) - 1) / (divider))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9bd4f76c3897b4338fe50a8d69830fe5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_HOST_TO_LITTLE_ENDIAN_16BIT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x</td><td>)</td>
+          <td>&#160;&#160;&#160;(x)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab01046a25df49d7fe1d85a8bf722975f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_HOST_TO_LITTLE_ENDIAN_32BIT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x</td><td>)</td>
+          <td>&#160;&#160;&#160;(x)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adc0a4752569188800a75e1601a7e11b5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_HOST_TO_LITTLE_ENDIAN_64BIT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x</td><td>)</td>
+          <td>&#160;&#160;&#160;(x)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a55b1a7d9f939231045521ec4a4817cff"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_HTONL</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">((((x)&gt;&gt;24) &amp; 0xffL) | (((x)&gt;&gt;8) &amp; 0xff00L) | \</div><div class="line">            (((x)&lt;&lt;8) &amp; 0xff0000L) | (((x)&lt;&lt;24) &amp; 0xff000000L))</div></div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a98390512a7c2732f1197b07acf03e226"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_HTONS</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((((<span class="keywordtype">unsigned</span> short)(x)) &gt;&gt; 8) &amp; 0xff) | \</div><div class="line">            ((((<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)(x)) &amp; 0xff) &lt;&lt; 8))</div></div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="ad989cc9220df56cd410590fc628e93b7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_INVERSE_UINT16_BYTES</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">val</td><td>)</td>
+          <td>&#160;&#160;&#160;( ((val) &lt;&lt; 8) | (((val) &amp; 0x0000FF00) &gt;&gt; 8))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4a0b711e344955017ab60ff37977e18f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_INVERSE_UINT32_BYTES</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">val</td><td>)</td>
+          <td>&#160;&#160;&#160;( ((val) &gt;&gt; 24) | (((val) &amp; 0x00FF0000) &gt;&gt; 8) | (((val) &amp; 0x0000FF00) &lt;&lt; 8) | (((val) &amp; 0x000000FF) &lt;&lt; 24) )</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae376dc7d0682fb2fc8927897fb065c4c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_INVERSE_UINT64_BYTES</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">val</td><td>)</td>
+          <td>&#160;&#160;&#160;((<a class="el" href="../../db/dcf/pal__macros_8h.html#a4a0b711e344955017ab60ff37977e18f">PAL_INVERSE_UINT32_BYTES</a>( ((val &gt;&gt; 16) &gt;&gt; 16)) &amp;0xffffffff)  | ((((uint64_t)PAL_INVERSE_UINT32_BYTES(val &amp; 0xffffffff))&lt;&lt;16)&lt;&lt;16))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad1c98870c5eeba8fe649345e371ef866"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_LITTLE_ENDIAN_TO_HOST_16BIT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x</td><td>)</td>
+          <td>&#160;&#160;&#160;(x)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa6229ece344478c07677c8b0436b1bb0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_LITTLE_ENDIAN_TO_HOST_32BIT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x</td><td>)</td>
+          <td>&#160;&#160;&#160;(x)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4ae1ca0100a3eee36eb95931cbec633e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_LITTLE_ENDIAN_TO_HOST_64BIT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x</td><td>)</td>
+          <td>&#160;&#160;&#160;(x)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a117c6ce53646b65b4cdcb5da01801675"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MAX</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">a, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">b&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td>&#160;&#160;&#160;((a) &gt; (b) ? (a) : (b))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6ee734c1fc41affa0926797e382fc8d4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MAX_INT32&#160;&#160;&#160;0x7FFFFFFFL</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ada154fcb4b3ef9b641486f30de56c7b7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MAX_INT64&#160;&#160;&#160;0x7FFFFFFFFFFFFFFFLL</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af8d58ab12b0f655fe922fc40b3e52ca2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MAX_UINT16&#160;&#160;&#160;0xFFFFU</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac7e2d509703ff033a302b325aa664f6e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MAX_UINT32&#160;&#160;&#160;0xFFFFFFFFUL</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a28a8006d7bca3b64235ca4d0cb39bf2b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MAX_UINT64&#160;&#160;&#160;0xFFFFFFFFFFFFFFFFULL</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a08c56fc189bfb1a6864a7b5d68433e7e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MAX_UINT8&#160;&#160;&#160;0xFFU</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a29066dd6aaf6aa8fa21f3a88feb6da59"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MIN</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">a, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">b&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td>&#160;&#160;&#160;((a) &lt; (b) ? (a) : (b))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac3a2f334767728e9bc57512139e0bd61"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MIN_INT32&#160;&#160;&#160;0x80000000L</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aaeb3e06c7119793239368c0fe74cda05"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MODULE_DEINIT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">INIT</td><td>)</td>
+          <td>&#160;&#160;&#160;INIT= 0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad2109677fa03720f6ab0df072c755529"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MODULE_INIT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">INIT</td><td>)</td>
+          <td>&#160;&#160;&#160;INIT= 1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ade9a83a9aab96cf50058801afdef4ace"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_MODULE_IS_INIT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">INIT</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7cbc81d1fb0dcddb1cc88b59d50c2aa9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NTOHL</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">((((x)&gt;&gt;24) &amp; 0xffL) | (((x)&gt;&gt;8) &amp; 0xff00L) | \</div><div class="line">            (((x)&lt;&lt;8) &amp; 0xff0000L) | (((x)&lt;&lt;24) &amp; 0xff000000L))</div></div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a55fbcf7a453813fec69016916802de2c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_NTOHS</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x</td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line">(((((<span class="keywordtype">unsigned</span> short)(x)) &gt;&gt; 8) &amp; 0xff) | \</div><div class="line">            ((((<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>)(x)) &amp; 0xff) &lt;&lt; 8) )</div></div><!-- fragment -->
+</div>
+</div>
+<a class="anchor" id="a92e2ad3a6b8c71818b6a08720fa84ba5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_SUCCESS&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/db/dcf/pal__macros_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_macros.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_macros.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../db/dcf/pal__macros_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef _PAL_MACROS_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define _PAL_MACROS_H</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../da/dfe/pal__errors_8h.html">pal_errors.h</a>&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment">// PAL success value</span></div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">   27</a></span>&#160;<span class="preprocessor">#define PAL_SUCCESS 0</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment">// maximum integer types</span></div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a08c56fc189bfb1a6864a7b5d68433e7e">   30</a></span>&#160;<span class="preprocessor">#define PAL_MAX_UINT8       0xFFU</span></div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#af8d58ab12b0f655fe922fc40b3e52ca2">   31</a></span>&#160;<span class="preprocessor">#define PAL_MAX_UINT16      0xFFFFU</span></div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#ac7e2d509703ff033a302b325aa664f6e">   32</a></span>&#160;<span class="preprocessor">#define PAL_MAX_UINT32      0xFFFFFFFFUL</span></div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a6ee734c1fc41affa0926797e382fc8d4">   33</a></span>&#160;<span class="preprocessor">#define PAL_MAX_INT32       0x7FFFFFFFL</span></div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#ac3a2f334767728e9bc57512139e0bd61">   34</a></span>&#160;<span class="preprocessor">#define PAL_MIN_INT32       0x80000000L</span></div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a28a8006d7bca3b64235ca4d0cb39bf2b">   35</a></span>&#160;<span class="preprocessor">#define PAL_MAX_UINT64      0xFFFFFFFFFFFFFFFFULL</span></div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#ada154fcb4b3ef9b641486f30de56c7b7">   36</a></span>&#160;<span class="preprocessor">#define PAL_MAX_INT64       0x7FFFFFFFFFFFFFFFLL</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">// useful macros</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a117c6ce53646b65b4cdcb5da01801675">   40</a></span>&#160;<span class="preprocessor">#define PAL_MAX(a,b)            ((a) &gt; (b) ? (a) : (b))</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a29066dd6aaf6aa8fa21f3a88feb6da59">   42</a></span>&#160;<span class="preprocessor">#define PAL_MIN(a,b)            ((a) &lt; (b) ? (a) : (b))</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a966411fe41e3830553bb1b8cf8baf730">   44</a></span>&#160;<span class="preprocessor">#define PAL_DIVIDE_ROUND_UP(num, divider)           (((num) + (divider) - 1) / (divider))</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">#if PAL_COMPILATION_ENDIANITY == 1</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#define BIG__ENDIAN 1</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#elif PAL_COMPILATION_ENDIANITY == 0</span></div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a1651594dc71abf466bddd0f6393edb8b">   49</a></span>&#160;<span class="preprocessor">#define LITTLE__ENDIAN 1</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#else </span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#error neither BIG__ENDIAN nor LITTLE__ENDIAN defined, cannot compile</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">// endianity macros</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">#ifdef LITTLE__ENDIAN</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a98390512a7c2732f1197b07acf03e226">   57</a></span>&#160;<span class="preprocessor">#define PAL_HTONS(x) (((((unsigned short)(x)) &gt;&gt; 8) &amp; 0xff) | \</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">            ((((unsigned short)(x)) &amp; 0xff) &lt;&lt; 8))</span></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a55fbcf7a453813fec69016916802de2c">   59</a></span>&#160;<span class="preprocessor">#define PAL_NTOHS(x) (((((unsigned short)(x)) &gt;&gt; 8) &amp; 0xff) | \</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor">            ((((unsigned short)(x)) &amp; 0xff) &lt;&lt; 8) )</span></div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a55b1a7d9f939231045521ec4a4817cff">   61</a></span>&#160;<span class="preprocessor">#define PAL_HTONL(x) ((((x)&gt;&gt;24) &amp; 0xffL) | (((x)&gt;&gt;8) &amp; 0xff00L) | \</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor">            (((x)&lt;&lt;8) &amp; 0xff0000L) | (((x)&lt;&lt;24) &amp; 0xff000000L))</span></div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a7cbc81d1fb0dcddb1cc88b59d50c2aa9">   63</a></span>&#160;<span class="preprocessor">#define PAL_NTOHL(x) ((((x)&gt;&gt;24) &amp; 0xffL) | (((x)&gt;&gt;8) &amp; 0xff00L) | \</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor">            (((x)&lt;&lt;8) &amp; 0xff0000L) | (((x)&lt;&lt;24) &amp; 0xff000000L))</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor">#elif defined(BIG__ENDIAN)</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="preprocessor">#define PAL_HTONS(x) (x)</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="preprocessor">#define PAL_NTOHS(x) (x)</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="preprocessor">#define PAL_HTONL(x) (x)</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="preprocessor">#define PAL_NTOHL(x) (x)</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="preprocessor">#error neither BIG__ENDIAN nor LITTLE__ENDIAN defined, cannot compile</span></div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#ad989cc9220df56cd410590fc628e93b7">   78</a></span>&#160;<span class="preprocessor">#define PAL_INVERSE_UINT16_BYTES( val ) \</span></div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="preprocessor">    ( ((val) &lt;&lt; 8) | (((val) &amp; 0x0000FF00) &gt;&gt; 8))</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a4a0b711e344955017ab60ff37977e18f">   81</a></span>&#160;<span class="preprocessor">#define PAL_INVERSE_UINT32_BYTES( val ) \</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="preprocessor">   ( ((val) &gt;&gt; 24) | (((val) &amp; 0x00FF0000) &gt;&gt; 8) | (((val) &amp; 0x0000FF00) &lt;&lt; 8) | (((val) &amp; 0x000000FF) &lt;&lt; 24) )</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#ae376dc7d0682fb2fc8927897fb065c4c">   84</a></span>&#160;<span class="preprocessor">#define PAL_INVERSE_UINT64_BYTES( val ) \</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="preprocessor">    ((PAL_INVERSE_UINT32_BYTES( ((val &gt;&gt; 16) &gt;&gt; 16)) &amp;0xffffffff)  | ((((uint64_t)PAL_INVERSE_UINT32_BYTES(val &amp; 0xffffffff))&lt;&lt;16)&lt;&lt;16)) </span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="comment">/* Set of Macros similar to the HTONS/L, NTOHS/L ones but converting to/from little endian instead of big endian*/</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="preprocessor">#ifdef LITTLE__ENDIAN </span></div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#ad1c98870c5eeba8fe649345e371ef866">   89</a></span>&#160;<span class="preprocessor">#define PAL_LITTLE_ENDIAN_TO_HOST_16BIT(x) (x)</span></div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#aa6229ece344478c07677c8b0436b1bb0">   90</a></span>&#160;<span class="preprocessor">#define PAL_LITTLE_ENDIAN_TO_HOST_32BIT(x) (x)</span></div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a4ae1ca0100a3eee36eb95931cbec633e">   91</a></span>&#160;<span class="preprocessor">#define PAL_LITTLE_ENDIAN_TO_HOST_64BIT(x) (x)</span></div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#a9bd4f76c3897b4338fe50a8d69830fe5">   92</a></span>&#160;<span class="preprocessor">#define PAL_HOST_TO_LITTLE_ENDIAN_16BIT(x) (x)</span></div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#ab01046a25df49d7fe1d85a8bf722975f">   93</a></span>&#160;<span class="preprocessor">#define PAL_HOST_TO_LITTLE_ENDIAN_32BIT(x) (x)</span></div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#adc0a4752569188800a75e1601a7e11b5">   94</a></span>&#160;<span class="preprocessor">#define PAL_HOST_TO_LITTLE_ENDIAN_64BIT(x) (x)</span></div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="preprocessor">#elif defined(BIG__ENDIAN)</span></div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="preprocessor">#define PAL_LITTLE_ENDIAN_TO_HOST_16BIT(x) (PAL_INVERSE_UINT16_BYTES(((uint16_t)x)))</span></div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="preprocessor">#define PAL_LITTLE_ENDIAN_TO_HOST_32BIT(x) (PAL_INVERSE_UINT32_BYTES(((uint32_t)x)))</span></div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="preprocessor">#define PAL_LITTLE_ENDIAN_TO_HOST_64BIT(x) (PAL_INVERSE_UINT64_BYTES(((uint64_t)x)))</span></div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="preprocessor">#define PAL_HOST_TO_LITTLE_ENDIAN_16BIT(x) (PAL_INVERSE_UINT16_BYTES(((uint16_t)x)))</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="preprocessor">#define PAL_HOST_TO_LITTLE_ENDIAN_32BIT(x) (PAL_INVERSE_UINT32_BYTES(((uint32_t)x)))</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="preprocessor">#define PAL_HOST_TO_LITTLE_ENDIAN_64BIT(x) (PAL_INVERSE_UINT64_BYTES(((uint64_t)x)))</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="preprocessor">#error neither BIG__ENDIAN nor LITTLE__ENDIAN defined, cannot compile</span></div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#ad2109677fa03720f6ab0df072c755529">  110</a></span>&#160;<span class="preprocessor">#define PAL_MODULE_INIT(INIT) INIT= 1</span></div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#aaeb3e06c7119793239368c0fe74cda05">  111</a></span>&#160;<span class="preprocessor">#define PAL_MODULE_DEINIT(INIT) INIT= 0</span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="preprocessor">#ifdef DEBUG</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d9/d16/pal_8h.html">pal.h</a>&quot;</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="preprocessor">#define DEBUG_PRINT(ARGS...) PAL_PRINTF(ARGS)</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="preprocessor">#define DEBUG_PRINT(ARGS...) PAL_PRINTF(ARGS)</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="preprocessor">#define PAL_MODULE_IS_INIT(INIT) if(!INIT) return PAL_ERR_NOT_INITIALIZED;</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#ade9a83a9aab96cf50058801afdef4ace">  122</a></span>&#160;<span class="preprocessor">#define PAL_MODULE_IS_INIT(INIT)</span></div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="../../db/dcf/pal__macros_8h.html#aa1b662a1198e5729d6d0934a7efb02c4">  124</a></span>&#160;<span class="preprocessor">#define DEBUG_PRINT(ARGS...)</span></div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="preprocessor">#endif //DEBUG</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;}</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="preprocessor">#endif //_PAL_MACROS_H</span></div><div class="ttc" id="pal_8h_html"><div class="ttname"><a href="../../d9/d16/pal_8h.html">pal.h</a></div></div>
+<div class="ttc" id="pal__errors_8h_html"><div class="ttname"><a href="../../da/dfe/pal__errors_8h.html">pal_errors.h</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dc/d2c/structtimer_argument.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: timerArgument Struct Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="../../functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">timerArgument Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="../../d9/d28/pal__rtos__test__utils_8h_source.html">pal_rtos_test_utils.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a18bf51a6db87346257b34c24fefbd1b1"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d2c/structtimer_argument.html#a18bf51a6db87346257b34c24fefbd1b1">ticksBeforeTimer</a></td></tr>
+<tr class="separator:a18bf51a6db87346257b34c24fefbd1b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe9607363a4b6ae7b835ef129743ec08"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d2c/structtimer_argument.html#afe9607363a4b6ae7b835ef129743ec08">ticksInFunc1</a></td></tr>
+<tr class="separator:afe9607363a4b6ae7b835ef129743ec08"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af9f23b828a589dfac13cad4cb6e7da34"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d2c/structtimer_argument.html#af9f23b828a589dfac13cad4cb6e7da34">ticksInFunc2</a></td></tr>
+<tr class="separator:af9f23b828a589dfac13cad4cb6e7da34"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a18bf51a6db87346257b34c24fefbd1b1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t timerArgument::ticksBeforeTimer</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afe9607363a4b6ae7b835ef129743ec08"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t timerArgument::ticksInFunc1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af9f23b828a589dfac13cad4cb6e7da34"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t timerArgument::ticksInFunc2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>C:/work/PAL/zolFull/mbed-client-pal/Test/Common/<a class="el" href="../../d9/d28/pal__rtos__test__utils_8h_source.html">pal_rtos_test_utils.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dc/d89/pal__plat__socket__lwip_8cpp.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,557 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl/FreeRTOS/Networking/LWIP/pal_plat_socket_lwip.cpp File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="../../dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li><li class="navelem"><a class="el" href="../../dir_352f9dac526e52874364d2b56bbb5ef5.html">FreeRTOS</a></li><li class="navelem"><a class="el" href="../../dir_1c5e63936b3e43504237da8820a7bc34.html">Networking</a></li><li class="navelem"><a class="el" href="../../dir_13f791b89962c34a017839eda04eb72e.html">LWIP</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_plat_socket_lwip.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;pal_common.h&quot;</code><br />
+<code>#include &quot;pal_plat_socket.h&quot;</code><br />
+<code>#include &quot;/tmp/mbedos/mbed-os/features/net/FEATURE_IPV4/lwip-interface/lwip/include/lwip/sockets.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a1f9a42da4785a398dcc6778a265a088a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#a1f9a42da4785a398dcc6778a265a088a">PAL_POSIX_ERROR_CODE</a>&#160;&#160;&#160;(-1)</td></tr>
+<tr class="separator:a1f9a42da4785a398dcc6778a265a088a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a44fd223b3f72e54eb748620ed80c52e3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#a44fd223b3f72e54eb748620ed80c52e3">pal_plat_sockets_init</a> (void *context)</td></tr>
+<tr class="separator:a44fd223b3f72e54eb748620ed80c52e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a990aa2947ac229e478e312d0e06393a7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#a990aa2947ac229e478e312d0e06393a7">pal_plat_socket</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a> domain, <a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a> type, bool nonBlockingSocket, int interfaceNum, <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *socket)</td></tr>
+<tr class="separator:a990aa2947ac229e478e312d0e06393a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76c4e2adf95702c4db8f3792ae373bf9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#a76c4e2adf95702c4db8f3792ae373bf9">pal_plat_getSocketOptions</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a> optionName, void *optionValue, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *optionLength)</td></tr>
+<tr class="separator:a76c4e2adf95702c4db8f3792ae373bf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08ea05dacec7f7d9dc892dab0318542d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#a08ea05dacec7f7d9dc892dab0318542d">pal_plat_setSocketOptions</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, int optionName, const void *optionValue, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> optionLength)</td></tr>
+<tr class="separator:a08ea05dacec7f7d9dc892dab0318542d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a53a267fd8ed0b7a5cf988224e95bd47c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#a53a267fd8ed0b7a5cf988224e95bd47c">pal_plat_bind</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *myAddress, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> addressLength)</td></tr>
+<tr class="separator:a53a267fd8ed0b7a5cf988224e95bd47c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa869b5eddbf4eb6aebbbb587ece84aac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#aa869b5eddbf4eb6aebbbb587ece84aac">pal_plat_receiveFrom</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, void *buffer, size_t length, <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *from, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *fromLength, size_t *bytesReceived)</td></tr>
+<tr class="separator:aa869b5eddbf4eb6aebbbb587ece84aac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17365747ed8d29df153a336da3942187"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#a17365747ed8d29df153a336da3942187">pal_plat_sendTo</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socket, const void *buffer, size_t length, const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *to, <a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> toLength, size_t *bytesSent)</td></tr>
+<tr class="separator:a17365747ed8d29df153a336da3942187"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a071355a0ca4d4eece45f0ed85a9ab1da"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#a071355a0ca4d4eece45f0ed85a9ab1da">pal_plat_close</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *socket)</td></tr>
+<tr class="separator:a071355a0ca4d4eece45f0ed85a9ab1da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af36bf075867e5ed0be7479312469361f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#af36bf075867e5ed0be7479312469361f">pal_plat_getNumberOfNetInterfaces</a> (uint32_t *numInterfaces)</td></tr>
+<tr class="separator:af36bf075867e5ed0be7479312469361f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6dc3b4c06e96b29068995809b98a935e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#a6dc3b4c06e96b29068995809b98a935e">pal_plat_getNetInterfaceInfo</a> (uint32_t interfaceNum, <a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a> *interfaceInfo)</td></tr>
+<tr class="separator:a6dc3b4c06e96b29068995809b98a935e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a770a9d5a04ea29ced40363a0c9769165"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d89/pal__plat__socket__lwip_8cpp.html#a770a9d5a04ea29ced40363a0c9769165">pal_plat_socketMiniSelect</a> (const <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> socketsToCheck[<a class="el" href="../../d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">PAL_NET_SOCKET_SELECT_MAX_SOCKETS</a>], unsigned int numberOfSockets, <a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a> *timeout, palSocketStatus_t socketStatus, int *numberOfSocketsSet)</td></tr>
+<tr class="separator:a770a9d5a04ea29ced40363a0c9769165"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a1f9a42da4785a398dcc6778a265a088a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define PAL_POSIX_ERROR_CODE&#160;&#160;&#160;(-1)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a53a267fd8ed0b7a5cf988224e95bd47c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_bind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>myAddress</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>addressLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Bind a given socket to a local address. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket to bind. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">myAddress</td><td>The address to bind to. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">addressLength</td><td>The length of the address passed in myAddress. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a071355a0ca4d4eece45f0ed85a9ab1da"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_close </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *&#160;</td>
+          <td class="paramname"><em>socket</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Close a network socket. NOTE: recieves palSocket_t* and not palSocket_t so that it can zero the socket to avoid re-use. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">socket</td><td>Release and zero socket pointed to by given pointer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6dc3b4c06e96b29068995809b98a935e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_getNetInterfaceInfo </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>interfaceNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">palNetInterfaceInfo_t</a> *&#160;</td>
+          <td class="paramname"><em>interfaceInfo</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get information regarding the socket at the index/interface number given (this number is returned when registering the socket). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">interfaceNum</td><td>The number of the interface to get information for. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">interfaceInfo</td><td>The information for the given interface number. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="af36bf075867e5ed0be7479312469361f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_getNumberOfNetInterfaces </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>numInterfaces</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the number of current network interfaces (interfaces that have been registered through). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">numInterfaces</td><td>The number of interfaces after a successful call. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status as in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a76c4e2adf95702c4db8f3792ae373bf9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_getSocketOptions </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">palSocketOptionName_t</a>&#160;</td>
+          <td class="paramname"><em>optionName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>optionValue</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *&#160;</td>
+          <td class="paramname"><em>optionLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get options for a given network socket. Only a few options are supported (see palSocketOptionName_t for supported options). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket for which to get options. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionName</td><td>The name for which to set the option (see enum PAL_NET_SOCKET_OPTION for supported types). </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">optionValue</td><td>The buffer holding the option value returned by the function. </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">optionLength</td><td>The size of the buffer provided for optionValue when calling the function. After the call, it contains the length of data actually written to the optionValue buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa869b5eddbf4eb6aebbbb587ece84aac"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_receiveFrom </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>from</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a> *&#160;</td>
+          <td class="paramname"><em>fromLength</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>bytesReceived</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Receive a payload from the given socket. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket to receive from [sockets passed to this function should be of type PAL_SOCK_DGRAM (the implementation may support other types as well)]. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">buffer</td><td>The buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>The length of the buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">from</td><td>The address that sent the payload [optional - if not required pass NULL]. </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">fromLength</td><td>The length of the 'from' address. When completed, this contains the amount of data actually written to the from address [optional - if not required pass NULL]. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">bytesReceived</td><td>The actual amount of payload data received to the buffer. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a17365747ed8d29df153a336da3942187"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_sendTo </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">palSocketAddress_t</a> *&#160;</td>
+          <td class="paramname"><em>to</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>toLength</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>bytesSent</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Send a payload to the given address using the given socket. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket to use for sending the payload [sockets passed to this function should be of type PAL_SOCK_DGRAM (the implementation may support other types as well)]. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">buffer</td><td>The buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>The length of the buffer for the payload data. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">to</td><td>The address to which the payload should be sent. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">toLength</td><td>The length of the 'to' address. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">bytesSent</td><td>The actual amount of payload data sent. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a08ea05dacec7f7d9dc892dab0318542d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_setSocketOptions </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>optionName</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>optionValue</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">palSocketLength_t</a>&#160;</td>
+          <td class="paramname"><em>optionLength</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Set options for a given network socket. Only a few options are supported (see palSocketOptionName_t for supported options). </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>The socket for which to get options. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionName</td><td>The name for which to set the option (see enum PAL_NET_SOCKET_OPTION for supported types). </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionValue</td><td>The buffer holding the option value to set for the given option. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">optionLength</td><td>The size of the buffer provided for optionValue. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a990aa2947ac229e478e312d0e06393a7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_socket </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">palSocketDomain_t</a>&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">palSocketType_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>nonBlockingSocket</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>interfaceNum</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a> *&#160;</td>
+          <td class="paramname"><em>socket</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a770a9d5a04ea29ced40363a0c9769165"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_socketMiniSelect </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="../../d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">palSocket_t</a>&#160;</td>
+          <td class="paramname"><em>socketsToCheck</em>[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned int&#160;</td>
+          <td class="paramname"><em>numberOfSockets</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_timeVal_t</a> *&#160;</td>
+          <td class="paramname"><em>timeout</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">palSocketStatus_t&#160;</td>
+          <td class="paramname"><em>socketStatus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>numberOfSocketsSet</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a44fd223b3f72e54eb748620ed80c52e3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_plat_sockets_init </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>context</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dc/da5/pal__socket__test__runner_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_socket_test_runner.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_socket_test_runner.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;unity.h&quot;</code><br />
+<code>#include &quot;unity_fixture.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a7d7471d47d062a2bf20410044b712192"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/da5/pal__socket__test__runner_8c.html#a7d7471d47d062a2bf20410044b712192">TEST_GROUP_RUNNER</a> (<a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>)</td></tr>
+<tr class="separator:a7d7471d47d062a2bf20410044b712192"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a7d7471d47d062a2bf20410044b712192"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_socket</a>&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dd/d30/pal__all__test__main__mbed_o_s_8cpp.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_all_test_main_mbedOS.cpp File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_all_test_main_mbedOS.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;mbed.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a58ec279183697abbd5d3efea3442d4e5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">UnityMain</a> (int argc, const char *argv[], void(*runAllTests)(void))</td></tr>
+<tr class="separator:a58ec279183697abbd5d3efea3442d4e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59390bc31498889208cfda7dea51bffa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a59390bc31498889208cfda7dea51bffa">TEST_pal_update_GROUP_RUNNER</a> (void)</td></tr>
+<tr class="separator:a59390bc31498889208cfda7dea51bffa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e9aa39842df82b3f5086f3215cc74fc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc">TEST_pal_rtos_GROUP_RUNNER</a> (void)</td></tr>
+<tr class="separator:a9e9aa39842df82b3f5086f3215cc74fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2393bacb0eb76d2dd1b0c200a8769cab"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab">TEST_pal_socket_GROUP_RUNNER</a> (void)</td></tr>
+<tr class="separator:a2393bacb0eb76d2dd1b0c200a8769cab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc9a94aa19f52027390d7b0256a6693c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#adc9a94aa19f52027390d7b0256a6693c">TEST_pal_all_GROUPS_RUNNER</a> (void)</td></tr>
+<tr class="separator:adc9a94aa19f52027390d7b0256a6693c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0f2228420376f4db7e1274f2b41667c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">main</a> (int argc, const char *argv[])</td></tr>
+<tr class="separator:ac0f2228420376f4db7e1274f2b41667c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ac0f2228420376f4db7e1274f2b41667c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adc9a94aa19f52027390d7b0256a6693c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TEST_pal_all_GROUPS_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9e9aa39842df82b3f5086f3215cc74fc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TEST_pal_rtos_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2393bacb0eb76d2dd1b0c200a8769cab"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TEST_pal_socket_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a59390bc31498889208cfda7dea51bffa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TEST_pal_update_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58ec279183697abbd5d3efea3442d4e5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UnityMain </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(void)&#160;</td>
+          <td class="paramname"><em>runAllTests</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dd/df6/pal__rtos__test__runner_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_rtos_test_runner.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_rtos_test_runner.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;unity.h&quot;</code><br />
+<code>#include &quot;unity_fixture.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ace47ba1b1706d7b654cdf18e7008b174"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df6/pal__rtos__test__runner_8c.html#ace47ba1b1706d7b654cdf18e7008b174">TEST_GROUP_RUNNER</a> (pal_rtos)</td></tr>
+<tr class="separator:ace47ba1b1706d7b654cdf18e7008b174"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ace47ba1b1706d7b654cdf18e7008b174"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">TEST_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">pal_rtos&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dd/df9/pal__update_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,586 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_update.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_update.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../db/dcf/pal__macros_8h_source.html">pal_macros.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d6/dc2/pal__types_8h_source.html">pal_types.h</a>&quot;</code><br />
+</div>
+<p><a href="../../dd/df9/pal__update_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d0d/struct__pal_image_header_deails__t.html">_palImageHeaderDeails_t</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a4a9214b57530228af5cfba5ec05b406b"><td class="memItemLeft" align="right" valign="top">typedef uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a></td></tr>
+<tr class="separator:a4a9214b57530228af5cfba5ec05b406b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a224fe03733bd8a2e5476357be9b74ee6"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="../../df/d0d/struct__pal_image_header_deails__t.html">_palImageHeaderDeails_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a></td></tr>
+<tr class="separator:a224fe03733bd8a2e5476357be9b74ee6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a73bbb720e1547d0d02b2ba607a35091d"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851">_palImagePlatformData_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a73bbb720e1547d0d02b2ba607a35091d">palImagePlatformData_t</a></td></tr>
+<tr class="separator:a73bbb720e1547d0d02b2ba607a35091d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60ae872dfe6cee8af957d52853927db0"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2">_palImageEvents_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a60ae872dfe6cee8af957d52853927db0">palImageEvents_t</a></td></tr>
+<tr class="separator:a60ae872dfe6cee8af957d52853927db0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ac73ac0e2421507424182ebaffc8b21"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a>) (<a class="el" href="../../dd/df9/pal__update_8h.html#a60ae872dfe6cee8af957d52853927db0">palImageEvents_t</a> event)</td></tr>
+<tr class="separator:a9ac73ac0e2421507424182ebaffc8b21"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:a88449bb053973b58f147e23d07fab851"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851">_palImagePlatformData_t</a> { <a class="el" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851abdf5bd423ad35c4b7128f17681a5bdc4">PAL_IMAGE_DATA_FIRST</a> = 0, 
+<a class="el" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851aabf363152f1b7b09fb70ea9ba2576b5b">PAL_IMAGE_DATA_HASH</a> = PAL_IMAGE_DATA_FIRST, 
+<a class="el" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851ac738b87b7c6580f82cc356a1a3ec157b">PAL_IMAGE_DATA_LAST</a>
+ }</td></tr>
+<tr class="separator:a88449bb053973b58f147e23d07fab851"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a878db675a901d36499a7d3d75ed16aa2"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2">_palImageEvents_t</a> { <br />
+&#160;&#160;<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a59dc00e875909a0b4e39d8297460c0fd">PAL_IMAGE_EVENT_FIRST</a> = -1, 
+<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a24c4f23ccf68a46903002eec2f69c5ca">PAL_IMAGE_EVENT_ERROR</a> = PAL_IMAGE_EVENT_FIRST, 
+<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a98b853c25620d48d33395fa50c52ccf5">PAL_IMAGE_EVENT_INIT</a>, 
+<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a7aa6e9bb937575c51a10d6d268f12b3e">PAL_IMAGE_EVENT_PREPARE</a>, 
+<br />
+&#160;&#160;<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a622f3f5844f4343d2f4d64dd6b486ac2">PAL_IMAGE_EVENT_WRITE</a>, 
+<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a3cf133970b3fe50ed6bf4e722ee562d6">PAL_IMAGE_EVENT_FINALIZE</a>, 
+<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2aaa4b69a758b8f509c970c30ac3bd5af5">PAL_IMAGE_EVENT_READTOBUFFER</a>, 
+<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a598cdce57dc311dcf64fbff4b6fd2f42">PAL_IMAGE_EVENT_ACTIVATE</a>, 
+<br />
+&#160;&#160;<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a27e851d5c26a2c8ffcf71a0718adb5a7">PAL_IMAGE_EVENT_GETACTIVEHASH</a>, 
+<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a29dca8fcafbb08ed62618706e0f30e12">PAL_IMAGE_EVENT_GETACTIVEVERSION</a>, 
+<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a4c44e52a122746f76d406c987cdec6c1">PAL_IMAGE_EVENT_WRITEDATATOMEMORY</a>, 
+<a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a8defc31ad167e60ebd65d8659d04cf2b">PAL_IMAGE_EVENT_LAST</a>
+<br />
+ }</td></tr>
+<tr class="separator:a878db675a901d36499a7d3d75ed16aa2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a2e85d0291ef07a84780291b67da129b5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a2e85d0291ef07a84780291b67da129b5">pal_imageInitAPI</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a> CBfunction)</td></tr>
+<tr class="separator:a2e85d0291ef07a84780291b67da129b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a399c2a8dbd117abf5cd4fa69771f98a0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a399c2a8dbd117abf5cd4fa69771f98a0">pal_imageDeInit</a> (void)</td></tr>
+<tr class="separator:a399c2a8dbd117abf5cd4fa69771f98a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4efbe7dd54c89cc87c80e94aa07a9988"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a4efbe7dd54c89cc87c80e94aa07a9988">pal_imagePrepare</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, <a class="el" href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a> *headerDetails)</td></tr>
+<tr class="separator:a4efbe7dd54c89cc87c80e94aa07a9988"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8b38046695a7124198787f01250d49a3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a8b38046695a7124198787f01250d49a3">pal_imageWrite</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, size_t offset, <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *chunk)</td></tr>
+<tr class="separator:a8b38046695a7124198787f01250d49a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a175083cffce66b96cd608a6cd10e9c61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a175083cffce66b96cd608a6cd10e9c61">pal_imageFinalize</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId)</td></tr>
+<tr class="separator:a175083cffce66b96cd608a6cd10e9c61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a37805c23a8066068318031f2d90c2da4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a37805c23a8066068318031f2d90c2da4">pal_imageGetDirectMemoryAccess</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, void **imagePtr, size_t *imageSizeInBytes)</td></tr>
+<tr class="separator:a37805c23a8066068318031f2d90c2da4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aac9ba34b8a1600d97b2b019b55e31a8d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#aac9ba34b8a1600d97b2b019b55e31a8d">pal_imageReadToBuffer</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId, size_t offset, <a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *chunk)</td></tr>
+<tr class="separator:aac9ba34b8a1600d97b2b019b55e31a8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31b9ead19037301ac9df1ccd6260262e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a31b9ead19037301ac9df1ccd6260262e">pal_imageActivate</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a> imageId)</td></tr>
+<tr class="separator:a31b9ead19037301ac9df1ccd6260262e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a278dcb55bfa1196ffe5713fa938d5d6e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a278dcb55bfa1196ffe5713fa938d5d6e">pal_imageGetActiveHash</a> (<a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *hash)</td></tr>
+<tr class="separator:a278dcb55bfa1196ffe5713fa938d5d6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72cd92d9d3eb0166f83d7e3c3e66f64c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#a72cd92d9d3eb0166f83d7e3c3e66f64c">pal_imageGetActiveVersion</a> (<a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *version)</td></tr>
+<tr class="separator:a72cd92d9d3eb0166f83d7e3c3e66f64c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa852dd1acee23c14859d9d4f94e09ce6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/df9/pal__update_8h.html#aa852dd1acee23c14859d9d4f94e09ce6">pal_imageWriteDataToMemory</a> (<a class="el" href="../../dd/df9/pal__update_8h.html#a73bbb720e1547d0d02b2ba607a35091d">palImagePlatformData_t</a> dataId, const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *const dataBuffer)</td></tr>
+<tr class="separator:aa852dd1acee23c14859d9d4f94e09ce6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="a60ae872dfe6cee8af957d52853927db0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2">_palImageEvents_t</a>  <a class="el" href="../../dd/df9/pal__update_8h.html#a60ae872dfe6cee8af957d52853927db0">palImageEvents_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a224fe03733bd8a2e5476357be9b74ee6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="../../df/d0d/struct__pal_image_header_deails__t.html">_palImageHeaderDeails_t</a> <a class="el" href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4a9214b57530228af5cfba5ec05b406b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uint32_t <a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a73bbb720e1547d0d02b2ba607a35091d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851">_palImagePlatformData_t</a> <a class="el" href="../../dd/df9/pal__update_8h.html#a73bbb720e1547d0d02b2ba607a35091d">palImagePlatformData_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9ac73ac0e2421507424182ebaffc8b21"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef void(* palImageSignalEvent_t) (<a class="el" href="../../dd/df9/pal__update_8h.html#a60ae872dfe6cee8af957d52853927db0">palImageEvents_t</a> event)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2">_palImageEvents_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2a59dc00e875909a0b4e39d8297460c0fd"></a>PAL_IMAGE_EVENT_FIRST&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2a24c4f23ccf68a46903002eec2f69c5ca"></a>PAL_IMAGE_EVENT_ERROR&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2a98b853c25620d48d33395fa50c52ccf5"></a>PAL_IMAGE_EVENT_INIT&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2a7aa6e9bb937575c51a10d6d268f12b3e"></a>PAL_IMAGE_EVENT_PREPARE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2a622f3f5844f4343d2f4d64dd6b486ac2"></a>PAL_IMAGE_EVENT_WRITE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2a3cf133970b3fe50ed6bf4e722ee562d6"></a>PAL_IMAGE_EVENT_FINALIZE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2aaa4b69a758b8f509c970c30ac3bd5af5"></a>PAL_IMAGE_EVENT_READTOBUFFER&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2a598cdce57dc311dcf64fbff4b6fd2f42"></a>PAL_IMAGE_EVENT_ACTIVATE&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2a27e851d5c26a2c8ffcf71a0718adb5a7"></a>PAL_IMAGE_EVENT_GETACTIVEHASH&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2a29dca8fcafbb08ed62618706e0f30e12"></a>PAL_IMAGE_EVENT_GETACTIVEVERSION&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2a4c44e52a122746f76d406c987cdec6c1"></a>PAL_IMAGE_EVENT_WRITEDATATOMEMORY&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a878db675a901d36499a7d3d75ed16aa2a8defc31ad167e60ebd65d8659d04cf2b"></a>PAL_IMAGE_EVENT_LAST&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<a class="anchor" id="a88449bb053973b58f147e23d07fab851"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851">_palImagePlatformData_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="a88449bb053973b58f147e23d07fab851abdf5bd423ad35c4b7128f17681a5bdc4"></a>PAL_IMAGE_DATA_FIRST&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a88449bb053973b58f147e23d07fab851aabf363152f1b7b09fb70ea9ba2576b5b"></a>PAL_IMAGE_DATA_HASH&#160;</td><td class="fielddoc">
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="a88449bb053973b58f147e23d07fab851ac738b87b7c6580f82cc356a1a3ec157b"></a>PAL_IMAGE_DATA_LAST&#160;</td><td class="fielddoc">
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a31b9ead19037301ac9df1ccd6260262e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageActivate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Sets image imageId to be the active image (after device reset). the function must call g_palUpdateServiceCBfunc before after finished</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a399c2a8dbd117abf5cd4fa69771f98a0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageDeInit </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>clearing all the resources used by the pal_update APIs </p><dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a175083cffce66b96cd608a6cd10e9c61"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageFinalize </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Flushes the image data and sets the version of imageId to imageVersion. the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageVersion</td><td>a struct containing the version as a buffer and the size </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a278dcb55bfa1196ffe5713fa938d5d6e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageGetActiveHash </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>hash</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Retrieve the hash value of the active image to hash buffer with max size hash maxBufferLength and sets to hash bufferLength to the hash size. the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">hash</td><td>struct containing the hash and actual size of hash read </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a72cd92d9d3eb0166f83d7e3c3e66f64c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageGetActiveVersion </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>version</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Retrieve the version of the active image to version buffer with size set to version bufferLength. the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">version</td><td>struct containing the version and actual size of version read </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a37805c23a8066068318031f2d90c2da4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageGetDirectMemoryAccess </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void **&#160;</td>
+          <td class="paramname"><em>imagePtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>imageSizeInBytes</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Verifies whether image imageId is readable and sets imagePtr to point to the beginning of start of the image in the memory and imageSizeInBytes to the image size. In case of failure sets imagePtr to NULL and returns relevant palStatus_t error </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">imagePtr</td><td>pointer to the start of the image </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">imageSizeInBytes</td><td>the size of the image </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2e85d0291ef07a84780291b67da129b5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageInitAPI </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a>&#160;</td>
+          <td class="paramname"><em>CBfunction</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>setting the callback function that will be called before the end of each API (except imageGetDirectMemAccess)</p>
+<p>WARNING: please do not change this function! this function loads a call back function received from the upper layer (service). the call back should be called at the end of each function (except pal_plat_imageGetDirectMemAccess) the call back receives the event type that just happened defined by the ENUM palImageEvents_t.</p>
+<p>if you will not call the call back at the end the service behaver will be undefined the function must call g_palUpdateServiceCBfunc before after finished</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">CBfunction</td><td>pointer to the call back function </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a4efbe7dd54c89cc87c80e94aa07a9988"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imagePrepare </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a> *&#160;</td>
+          <td class="paramname"><em>headerDetails</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Prepare to write image with id imageId and size imageSize in suitable memory region (Space availability will be verified and reserved). the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageSize</td><td>the size of the image </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aac9ba34b8a1600d97b2b019b55e31a8d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageReadToBuffer </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>chunk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Reads max of chunk maxBufferLength bytes from image imageId with relative offset offset and stores it in chunk buffer. And sets chunk bufferLength value to the actual number of bytes read. Note: Please use this API in case image is not directly accessible via imageGetDirectMemAccess function.</p>
+<p>the function must call g_palUpdateServiceCBfunc before after finished</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">offset</td><td>offset to start read from </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">chunk</td><td>struct containing the data and actual bytes read </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a8b38046695a7124198787f01250d49a3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageWrite </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>&#160;</td>
+          <td class="paramname"><em>imageId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *&#160;</td>
+          <td class="paramname"><em>chunk</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Writes the data in chunk buffer with size chunk bufferLength in the location of imageId adding the relative offset. the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">imageId</td><td>the image id </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">offset</td><td>the offset to write the data into </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">pointer</td><td>to struct containing the data and the data length to write </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa852dd1acee23c14859d9d4f94e09ce6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_imageWriteDataToMemory </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../dd/df9/pal__update_8h.html#a73bbb720e1547d0d02b2ba607a35091d">palImagePlatformData_t</a>&#160;</td>
+          <td class="paramname"><em>dataId</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="../../d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">palConstBuffer_t</a> *const&#160;</td>
+          <td class="paramname"><em>dataBuffer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Writing the data of dataId stored in dataBuffer to memory accessible to bootloader. Currently only has is available. the function must call g_palUpdateServiceCBfunc before after finished </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">dataId</td><td>one of the members of palImagePlatformData_t enum </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">dataBuffer</td><td>struct containing the data and actual bytes to be written </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dd/df9/pal__update_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/pal_update.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_update.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../dd/df9/pal__update_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef SOURCE_PAL_IMPL_SERVICES_API_PAL_UPDATE_H_</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define SOURCE_PAL_IMPL_SERVICES_API_PAL_UPDATE_H_</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../db/dcf/pal__macros_8h.html">pal_macros.h</a>&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="../../d6/dc2/pal__types_8h.html">pal_types.h</a>&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">   31</a></span>&#160;<span class="keyword">typedef</span> uint32_t <a class="code" href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a>;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="../../df/d0d/struct__pal_image_header_deails__t.html">   33</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="../../df/d0d/struct__pal_image_header_deails__t.html">_palImageHeaderDeails_t</a></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;{</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="../../df/d0d/struct__pal_image_header_deails__t.html#a5fcb0398af2a70c3e4fc9fa64afb77ba">   35</a></span>&#160;                <span class="keywordtype">size_t</span> <a class="code" href="../../df/d0d/struct__pal_image_header_deails__t.html#a5fcb0398af2a70c3e4fc9fa64afb77ba">imageSize</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="../../df/d0d/struct__pal_image_header_deails__t.html#afee39a7c86a46bf1f9de53284380869e">   36</a></span>&#160;                <a class="code" href="../../d8/d19/struct__pal_buffer__t.html">palBuffer_t</a> <a class="code" href="../../df/d0d/struct__pal_image_header_deails__t.html#afee39a7c86a46bf1f9de53284380869e">hash</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="../../df/d0d/struct__pal_image_header_deails__t.html#a734411a639c41d6dc4b4252a006b134f">   37</a></span>&#160;                <a class="code" href="../../d8/d19/struct__pal_buffer__t.html">palBuffer_t</a> <a class="code" href="../../df/d0d/struct__pal_image_header_deails__t.html#a734411a639c41d6dc4b4252a006b134f">version</a>;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;}<a class="code" href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a>;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851">   41</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851">_palImagePlatformData_t</a></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851abdf5bd423ad35c4b7128f17681a5bdc4">   43</a></span>&#160;    <a class="code" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851abdf5bd423ad35c4b7128f17681a5bdc4">PAL_IMAGE_DATA_FIRST</a> = 0,</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851aabf363152f1b7b09fb70ea9ba2576b5b">   44</a></span>&#160;    <a class="code" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851aabf363152f1b7b09fb70ea9ba2576b5b">PAL_IMAGE_DATA_HASH</a> = <a class="code" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851abdf5bd423ad35c4b7128f17681a5bdc4">PAL_IMAGE_DATA_FIRST</a>,</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851ac738b87b7c6580f82cc356a1a3ec157b">   45</a></span>&#160;    <a class="code" href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851ac738b87b7c6580f82cc356a1a3ec157b">PAL_IMAGE_DATA_LAST</a></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;}<a class="code" href="../../dd/df9/pal__update_8h.html#a73bbb720e1547d0d02b2ba607a35091d">palImagePlatformData_t</a>;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2">   48</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2">_palImageEvents_t</a></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;{</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a59dc00e875909a0b4e39d8297460c0fd">   50</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a59dc00e875909a0b4e39d8297460c0fd">PAL_IMAGE_EVENT_FIRST</a> = -1,</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a24c4f23ccf68a46903002eec2f69c5ca">   51</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a24c4f23ccf68a46903002eec2f69c5ca">PAL_IMAGE_EVENT_ERROR</a> = <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a59dc00e875909a0b4e39d8297460c0fd">PAL_IMAGE_EVENT_FIRST</a>,</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a98b853c25620d48d33395fa50c52ccf5">   52</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a98b853c25620d48d33395fa50c52ccf5">PAL_IMAGE_EVENT_INIT</a> ,</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a7aa6e9bb937575c51a10d6d268f12b3e">   53</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a7aa6e9bb937575c51a10d6d268f12b3e">PAL_IMAGE_EVENT_PREPARE</a>,</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a622f3f5844f4343d2f4d64dd6b486ac2">   54</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a622f3f5844f4343d2f4d64dd6b486ac2">PAL_IMAGE_EVENT_WRITE</a>,</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a3cf133970b3fe50ed6bf4e722ee562d6">   55</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a3cf133970b3fe50ed6bf4e722ee562d6">PAL_IMAGE_EVENT_FINALIZE</a>,</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2aaa4b69a758b8f509c970c30ac3bd5af5">   56</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2aaa4b69a758b8f509c970c30ac3bd5af5">PAL_IMAGE_EVENT_READTOBUFFER</a>,</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a598cdce57dc311dcf64fbff4b6fd2f42">   57</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a598cdce57dc311dcf64fbff4b6fd2f42">PAL_IMAGE_EVENT_ACTIVATE</a>,</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a27e851d5c26a2c8ffcf71a0718adb5a7">   58</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a27e851d5c26a2c8ffcf71a0718adb5a7">PAL_IMAGE_EVENT_GETACTIVEHASH</a>,</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a29dca8fcafbb08ed62618706e0f30e12">   59</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a29dca8fcafbb08ed62618706e0f30e12">PAL_IMAGE_EVENT_GETACTIVEVERSION</a>,</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a4c44e52a122746f76d406c987cdec6c1">   60</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a4c44e52a122746f76d406c987cdec6c1">PAL_IMAGE_EVENT_WRITEDATATOMEMORY</a>,</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a8defc31ad167e60ebd65d8659d04cf2b">   61</a></span>&#160;        <a class="code" href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a8defc31ad167e60ebd65d8659d04cf2b">PAL_IMAGE_EVENT_LAST</a></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;} <a class="code" href="../../dd/df9/pal__update_8h.html#a60ae872dfe6cee8af957d52853927db0">palImageEvents_t</a>;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">   64</a></span>&#160;<span class="keyword">typedef</span> void (*<a class="code" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a>)( palImageEvents_t event);</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../dd/df9/pal__update_8h.html#a2e85d0291ef07a84780291b67da129b5">pal_imageInitAPI</a>(<a class="code" href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a> CBfunction);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../dd/df9/pal__update_8h.html#a399c2a8dbd117abf5cd4fa69771f98a0">pal_imageDeInit</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../dd/df9/pal__update_8h.html#a4efbe7dd54c89cc87c80e94aa07a9988">pal_imagePrepare</a>(palImageId_t imageId, <a class="code" href="../../df/d0d/struct__pal_image_header_deails__t.html">palImageHeaderDeails_t</a>* headerDetails);</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../dd/df9/pal__update_8h.html#a8b38046695a7124198787f01250d49a3">pal_imageWrite</a> (palImageId_t imageId, <span class="keywordtype">size_t</span> offset, <a class="code" href="../../d2/dab/struct__pal_const_buffer__t.html">palConstBuffer_t</a> *chunk);</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>  <a class="code" href="../../dd/df9/pal__update_8h.html#a175083cffce66b96cd608a6cd10e9c61">pal_imageFinalize</a>(palImageId_t imageId);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../dd/df9/pal__update_8h.html#a37805c23a8066068318031f2d90c2da4">pal_imageGetDirectMemoryAccess</a>(palImageId_t imageId, <span class="keywordtype">void</span>** imagePtr, <span class="keywordtype">size_t</span> *imageSizeInBytes);</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../dd/df9/pal__update_8h.html#aac9ba34b8a1600d97b2b019b55e31a8d">pal_imageReadToBuffer</a>(palImageId_t imageId, <span class="keywordtype">size_t</span> offset, <a class="code" href="../../d8/d19/struct__pal_buffer__t.html">palBuffer_t</a>* chunk);</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../dd/df9/pal__update_8h.html#a31b9ead19037301ac9df1ccd6260262e">pal_imageActivate</a>(palImageId_t imageId);</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../dd/df9/pal__update_8h.html#a278dcb55bfa1196ffe5713fa938d5d6e">pal_imageGetActiveHash</a>(<a class="code" href="../../d8/d19/struct__pal_buffer__t.html">palBuffer_t</a>* <a class="code" href="../../df/d0d/struct__pal_image_header_deails__t.html#afee39a7c86a46bf1f9de53284380869e">hash</a>);</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../dd/df9/pal__update_8h.html#a72cd92d9d3eb0166f83d7e3c3e66f64c">pal_imageGetActiveVersion</a>(<a class="code" href="../../d8/d19/struct__pal_buffer__t.html">palBuffer_t</a>* <a class="code" href="../../df/d0d/struct__pal_image_header_deails__t.html#a734411a639c41d6dc4b4252a006b134f">version</a>);</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<a class="code" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> <a class="code" href="../../dd/df9/pal__update_8h.html#aa852dd1acee23c14859d9d4f94e09ce6">pal_imageWriteDataToMemory</a>(palImagePlatformData_t dataId, <span class="keyword">const</span> <a class="code" href="../../d2/dab/struct__pal_const_buffer__t.html">palConstBuffer_t</a>* <span class="keyword">const</span> dataBuffer);</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;}</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* SOURCE_PAL_IMPL_SERVICES_API_PAL_UPDATE_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="pal__update_8h_html_a399c2a8dbd117abf5cd4fa69771f98a0"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a399c2a8dbd117abf5cd4fa69771f98a0">pal_imageDeInit</a></div><div class="ttdeci">palStatus_t pal_imageDeInit(void)</div><div class="ttdef"><b>Definition:</b> pal_update.c:34</div></div>
+<div class="ttc" id="struct__pal_buffer__t_html"><div class="ttname"><a href="../../d8/d19/struct__pal_buffer__t.html">_palBuffer_t</a></div><div class="ttdef"><b>Definition:</b> pal_types.h:34</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2a98b853c25620d48d33395fa50c52ccf5"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a98b853c25620d48d33395fa50c52ccf5">PAL_IMAGE_EVENT_INIT</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:52</div></div>
+<div class="ttc" id="struct__pal_image_header_deails__t_html_a5fcb0398af2a70c3e4fc9fa64afb77ba"><div class="ttname"><a href="../../df/d0d/struct__pal_image_header_deails__t.html#a5fcb0398af2a70c3e4fc9fa64afb77ba">_palImageHeaderDeails_t::imageSize</a></div><div class="ttdeci">size_t imageSize</div><div class="ttdef"><b>Definition:</b> pal_update.h:35</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2a24c4f23ccf68a46903002eec2f69c5ca"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a24c4f23ccf68a46903002eec2f69c5ca">PAL_IMAGE_EVENT_ERROR</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:51</div></div>
+<div class="ttc" id="pal__update_8h_html_aa852dd1acee23c14859d9d4f94e09ce6"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#aa852dd1acee23c14859d9d4f94e09ce6">pal_imageWriteDataToMemory</a></div><div class="ttdeci">palStatus_t pal_imageWriteDataToMemory(palImagePlatformData_t dataId, const palConstBuffer_t *const dataBuffer)</div><div class="ttdef"><b>Definition:</b> pal_update.c:111</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2a29dca8fcafbb08ed62618706e0f30e12"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a29dca8fcafbb08ed62618706e0f30e12">PAL_IMAGE_EVENT_GETACTIVEVERSION</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:59</div></div>
+<div class="ttc" id="pal__update_8h_html_a8b38046695a7124198787f01250d49a3"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a8b38046695a7124198787f01250d49a3">pal_imageWrite</a></div><div class="ttdeci">palStatus_t pal_imageWrite(palImageId_t imageId, size_t offset, palConstBuffer_t *chunk)</div><div class="ttdef"><b>Definition:</b> pal_update.c:54</div></div>
+<div class="ttc" id="pal__update_8h_html_a37805c23a8066068318031f2d90c2da4"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a37805c23a8066068318031f2d90c2da4">pal_imageGetDirectMemoryAccess</a></div><div class="ttdeci">palStatus_t pal_imageGetDirectMemoryAccess(palImageId_t imageId, void **imagePtr, size_t *imageSizeInBytes)</div><div class="ttdef"><b>Definition:</b> pal_update.c:70</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2aaa4b69a758b8f509c970c30ac3bd5af5"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2aaa4b69a758b8f509c970c30ac3bd5af5">PAL_IMAGE_EVENT_READTOBUFFER</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:56</div></div>
+<div class="ttc" id="struct__pal_image_header_deails__t_html"><div class="ttname"><a href="../../df/d0d/struct__pal_image_header_deails__t.html">_palImageHeaderDeails_t</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:33</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2a27e851d5c26a2c8ffcf71a0718adb5a7"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a27e851d5c26a2c8ffcf71a0718adb5a7">PAL_IMAGE_EVENT_GETACTIVEHASH</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:58</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2a8defc31ad167e60ebd65d8659d04cf2b"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a8defc31ad167e60ebd65d8659d04cf2b">PAL_IMAGE_EVENT_LAST</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:61</div></div>
+<div class="ttc" id="pal__update_8h_html_a88449bb053973b58f147e23d07fab851"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851">_palImagePlatformData_t</a></div><div class="ttdeci">_palImagePlatformData_t</div><div class="ttdef"><b>Definition:</b> pal_update.h:41</div></div>
+<div class="ttc" id="pal__update_8h_html_a4efbe7dd54c89cc87c80e94aa07a9988"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a4efbe7dd54c89cc87c80e94aa07a9988">pal_imagePrepare</a></div><div class="ttdeci">palStatus_t pal_imagePrepare(palImageId_t imageId, palImageHeaderDeails_t *headerDetails)</div><div class="ttdef"><b>Definition:</b> pal_update.c:44</div></div>
+<div class="ttc" id="pal__update_8h_html_a31b9ead19037301ac9df1ccd6260262e"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a31b9ead19037301ac9df1ccd6260262e">pal_imageActivate</a></div><div class="ttdeci">palStatus_t pal_imageActivate(palImageId_t imageId)</div><div class="ttdef"><b>Definition:</b> pal_update.c:87</div></div>
+<div class="ttc" id="pal__update_8h_html_a224fe03733bd8a2e5476357be9b74ee6"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a224fe03733bd8a2e5476357be9b74ee6">palImageHeaderDeails_t</a></div><div class="ttdeci">struct _palImageHeaderDeails_t palImageHeaderDeails_t</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2a59dc00e875909a0b4e39d8297460c0fd"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a59dc00e875909a0b4e39d8297460c0fd">PAL_IMAGE_EVENT_FIRST</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:50</div></div>
+<div class="ttc" id="pal__update_8h_html_aac9ba34b8a1600d97b2b019b55e31a8d"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#aac9ba34b8a1600d97b2b019b55e31a8d">pal_imageReadToBuffer</a></div><div class="ttdeci">palStatus_t pal_imageReadToBuffer(palImageId_t imageId, size_t offset, palBuffer_t *chunk)</div><div class="ttdef"><b>Definition:</b> pal_update.c:78</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2a598cdce57dc311dcf64fbff4b6fd2f42"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a598cdce57dc311dcf64fbff4b6fd2f42">PAL_IMAGE_EVENT_ACTIVATE</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:57</div></div>
+<div class="ttc" id="pal__update_8h_html_a88449bb053973b58f147e23d07fab851ac738b87b7c6580f82cc356a1a3ec157b"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851ac738b87b7c6580f82cc356a1a3ec157b">PAL_IMAGE_DATA_LAST</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:45</div></div>
+<div class="ttc" id="struct__pal_const_buffer__t_html"><div class="ttname"><a href="../../d2/dab/struct__pal_const_buffer__t.html">_palConstBuffer_t</a></div><div class="ttdef"><b>Definition:</b> pal_types.h:41</div></div>
+<div class="ttc" id="pal__update_8h_html_a2e85d0291ef07a84780291b67da129b5"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a2e85d0291ef07a84780291b67da129b5">pal_imageInitAPI</a></div><div class="ttdeci">palStatus_t pal_imageInitAPI(palImageSignalEvent_t CBfunction)</div><div class="ttdef"><b>Definition:</b> pal_update.c:26</div></div>
+<div class="ttc" id="struct__pal_image_header_deails__t_html_a734411a639c41d6dc4b4252a006b134f"><div class="ttname"><a href="../../df/d0d/struct__pal_image_header_deails__t.html#a734411a639c41d6dc4b4252a006b134f">_palImageHeaderDeails_t::version</a></div><div class="ttdeci">palBuffer_t version</div><div class="ttdef"><b>Definition:</b> pal_update.h:37</div></div>
+<div class="ttc" id="pal__update_8h_html_a9ac73ac0e2421507424182ebaffc8b21"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a9ac73ac0e2421507424182ebaffc8b21">palImageSignalEvent_t</a></div><div class="ttdeci">void(* palImageSignalEvent_t)(palImageEvents_t event)</div><div class="ttdef"><b>Definition:</b> pal_update.h:64</div></div>
+<div class="ttc" id="pal__types_8h_html"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html">pal_types.h</a></div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2a3cf133970b3fe50ed6bf4e722ee562d6"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a3cf133970b3fe50ed6bf4e722ee562d6">PAL_IMAGE_EVENT_FINALIZE</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:55</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2">_palImageEvents_t</a></div><div class="ttdeci">_palImageEvents_t</div><div class="ttdef"><b>Definition:</b> pal_update.h:48</div></div>
+<div class="ttc" id="pal__update_8h_html_a4a9214b57530228af5cfba5ec05b406b"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a4a9214b57530228af5cfba5ec05b406b">palImageId_t</a></div><div class="ttdeci">uint32_t palImageId_t</div><div class="ttdef"><b>Definition:</b> pal_update.h:31</div></div>
+<div class="ttc" id="pal__macros_8h_html"><div class="ttname"><a href="../../db/dcf/pal__macros_8h.html">pal_macros.h</a></div></div>
+<div class="ttc" id="pal__update_8h_html_a73bbb720e1547d0d02b2ba607a35091d"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a73bbb720e1547d0d02b2ba607a35091d">palImagePlatformData_t</a></div><div class="ttdeci">enum _palImagePlatformData_t palImagePlatformData_t</div></div>
+<div class="ttc" id="pal__update_8h_html_a88449bb053973b58f147e23d07fab851abdf5bd423ad35c4b7128f17681a5bdc4"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851abdf5bd423ad35c4b7128f17681a5bdc4">PAL_IMAGE_DATA_FIRST</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:43</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2a622f3f5844f4343d2f4d64dd6b486ac2"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a622f3f5844f4343d2f4d64dd6b486ac2">PAL_IMAGE_EVENT_WRITE</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:54</div></div>
+<div class="ttc" id="struct__pal_image_header_deails__t_html_afee39a7c86a46bf1f9de53284380869e"><div class="ttname"><a href="../../df/d0d/struct__pal_image_header_deails__t.html#afee39a7c86a46bf1f9de53284380869e">_palImageHeaderDeails_t::hash</a></div><div class="ttdeci">palBuffer_t hash</div><div class="ttdef"><b>Definition:</b> pal_update.h:36</div></div>
+<div class="ttc" id="pal__update_8h_html_a88449bb053973b58f147e23d07fab851aabf363152f1b7b09fb70ea9ba2576b5b"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a88449bb053973b58f147e23d07fab851aabf363152f1b7b09fb70ea9ba2576b5b">PAL_IMAGE_DATA_HASH</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:44</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2a4c44e52a122746f76d406c987cdec6c1"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a4c44e52a122746f76d406c987cdec6c1">PAL_IMAGE_EVENT_WRITEDATATOMEMORY</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:60</div></div>
+<div class="ttc" id="pal__update_8h_html_a278dcb55bfa1196ffe5713fa938d5d6e"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a278dcb55bfa1196ffe5713fa938d5d6e">pal_imageGetActiveHash</a></div><div class="ttdeci">palStatus_t pal_imageGetActiveHash(palBuffer_t *hash)</div><div class="ttdef"><b>Definition:</b> pal_update.c:95</div></div>
+<div class="ttc" id="pal__update_8h_html_a60ae872dfe6cee8af957d52853927db0"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a60ae872dfe6cee8af957d52853927db0">palImageEvents_t</a></div><div class="ttdeci">enum _palImageEvents_t palImageEvents_t</div></div>
+<div class="ttc" id="pal__types_8h_html_a160277354e86b9aea01d7689ec26d88d"><div class="ttname"><a href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a></div><div class="ttdeci">int32_t palStatus_t</div><div class="ttdef"><b>Definition:</b> pal_types.h:31</div></div>
+<div class="ttc" id="pal__update_8h_html_a175083cffce66b96cd608a6cd10e9c61"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a175083cffce66b96cd608a6cd10e9c61">pal_imageFinalize</a></div><div class="ttdeci">palStatus_t pal_imageFinalize(palImageId_t imageId)</div><div class="ttdef"><b>Definition:</b> pal_update.c:62</div></div>
+<div class="ttc" id="pal__update_8h_html_a72cd92d9d3eb0166f83d7e3c3e66f64c"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a72cd92d9d3eb0166f83d7e3c3e66f64c">pal_imageGetActiveVersion</a></div><div class="ttdeci">palStatus_t pal_imageGetActiveVersion(palBuffer_t *version)</div><div class="ttdef"><b>Definition:</b> pal_update.c:103</div></div>
+<div class="ttc" id="pal__update_8h_html_a878db675a901d36499a7d3d75ed16aa2a7aa6e9bb937575c51a10d6d268f12b3e"><div class="ttname"><a href="../../dd/df9/pal__update_8h.html#a878db675a901d36499a7d3d75ed16aa2a7aa6e9bb937575c51a10d6d268f12b3e">PAL_IMAGE_EVENT_PREPARE</a></div><div class="ttdef"><b>Definition:</b> pal_update.h:53</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/de/d33/_free_r_t_o_s_config_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,677 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/BUILD_FreeRTOS/FreeRTOSConfig.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_5b516ef453fd36a0929ce414690fe335.html">BUILD_FreeRTOS</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a>  </div>
+  <div class="headertitle">
+<div class="title">FreeRTOSConfig.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;unity.h&quot;</code><br />
+</div>
+<p><a href="../../de/d33/_free_r_t_o_s_config_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:adde83486022745409c40605922b0bdd6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#adde83486022745409c40605922b0bdd6">configUSE_PREEMPTION</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:adde83486022745409c40605922b0bdd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac637ae45863c19fa2e919db0ed49301f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#ac637ae45863c19fa2e919db0ed49301f">configUSE_IDLE_HOOK</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:ac637ae45863c19fa2e919db0ed49301f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a23c5922c077106fad3f70b54d9071466"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a23c5922c077106fad3f70b54d9071466">configUSE_TICK_HOOK</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a23c5922c077106fad3f70b54d9071466"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa68082df879e6fc96bcb9b26513639e7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#aa68082df879e6fc96bcb9b26513639e7">configCPU_CLOCK_HZ</a>&#160;&#160;&#160;(SystemCoreClock)</td></tr>
+<tr class="separator:aa68082df879e6fc96bcb9b26513639e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f0258dd1e3b877e5bc013be54c2db6a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a2f0258dd1e3b877e5bc013be54c2db6a">configTICK_RATE_HZ</a>&#160;&#160;&#160;((TickType_t)1000)</td></tr>
+<tr class="separator:a2f0258dd1e3b877e5bc013be54c2db6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a78f5ac61e6cb172dadf2a51f11db38"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a9a78f5ac61e6cb172dadf2a51f11db38">configMAX_PRIORITIES</a>&#160;&#160;&#160;(5)</td></tr>
+<tr class="separator:a9a78f5ac61e6cb172dadf2a51f11db38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c534a6cf8a00528fe0be42083484f9a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a6c534a6cf8a00528fe0be42083484f9a">configMINIMAL_STACK_SIZE</a>&#160;&#160;&#160;((unsigned short)90)</td></tr>
+<tr class="separator:a6c534a6cf8a00528fe0be42083484f9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9f213227674effff0122a75d94d87938"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a9f213227674effff0122a75d94d87938">configTOTAL_HEAP_SIZE</a>&#160;&#160;&#160;((size_t)(10 * 1024))</td></tr>
+<tr class="separator:a9f213227674effff0122a75d94d87938"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac388dc4041aab6997348828eb27fc1a8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#ac388dc4041aab6997348828eb27fc1a8">configMAX_TASK_NAME_LEN</a>&#160;&#160;&#160;(10)</td></tr>
+<tr class="separator:ac388dc4041aab6997348828eb27fc1a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a27f5ee137dc9f125681a31f0b0a4b3be"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a27f5ee137dc9f125681a31f0b0a4b3be">configUSE_TRACE_FACILITY</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a27f5ee137dc9f125681a31f0b0a4b3be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aac311ed9b9e5ae4d2d9648b33a24acce"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#aac311ed9b9e5ae4d2d9648b33a24acce">configUSE_16_BIT_TICKS</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:aac311ed9b9e5ae4d2d9648b33a24acce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6a5061a742fee450ac455e4ad0f4b6c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#ad6a5061a742fee450ac455e4ad0f4b6c">configIDLE_SHOULD_YIELD</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:ad6a5061a742fee450ac455e4ad0f4b6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a543bf3c79008974cc1d36bab51d94fbf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a543bf3c79008974cc1d36bab51d94fbf">configUSE_MUTEXES</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a543bf3c79008974cc1d36bab51d94fbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4b5138c4e42a180f0abd4f2455f90fb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#aa4b5138c4e42a180f0abd4f2455f90fb">configQUEUE_REGISTRY_SIZE</a>&#160;&#160;&#160;8</td></tr>
+<tr class="separator:aa4b5138c4e42a180f0abd4f2455f90fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a847511ee433494b1e32c90602c967ae7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a847511ee433494b1e32c90602c967ae7">configCHECK_FOR_STACK_OVERFLOW</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a847511ee433494b1e32c90602c967ae7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9fe02d866cb1c4fbaa0c3de79f53d42d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a9fe02d866cb1c4fbaa0c3de79f53d42d">configUSE_RECURSIVE_MUTEXES</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a9fe02d866cb1c4fbaa0c3de79f53d42d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abdf48e7c9cf513f083aa9cbed0dd7cd7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#abdf48e7c9cf513f083aa9cbed0dd7cd7">configUSE_MALLOC_FAILED_HOOK</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:abdf48e7c9cf513f083aa9cbed0dd7cd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2eb2a0baf886a7adab15b5735029434b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a2eb2a0baf886a7adab15b5735029434b">configUSE_APPLICATION_TASK_TAG</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a2eb2a0baf886a7adab15b5735029434b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a55778995203c57369d2fbfb10224943d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a55778995203c57369d2fbfb10224943d">configUSE_COUNTING_SEMAPHORES</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a55778995203c57369d2fbfb10224943d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8081822f3ebc7c917b63bd7bdd7bc58"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#ad8081822f3ebc7c917b63bd7bdd7bc58">configGENERATE_RUN_TIME_STATS</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:ad8081822f3ebc7c917b63bd7bdd7bc58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a493c5763eb7a39bd80779a1c58de0d82"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a493c5763eb7a39bd80779a1c58de0d82">configUSE_TIME_SLICING</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a493c5763eb7a39bd80779a1c58de0d82"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57990715eb06402474b8b47e1d562616"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a57990715eb06402474b8b47e1d562616">configUSE_CO_ROUTINES</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a57990715eb06402474b8b47e1d562616"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8f3fd645e6e78dfeb8a6e874af6195a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#ae8f3fd645e6e78dfeb8a6e874af6195a">configMAX_CO_ROUTINE_PRIORITIES</a>&#160;&#160;&#160;(2)</td></tr>
+<tr class="separator:ae8f3fd645e6e78dfeb8a6e874af6195a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac342ae309b0c53828d2ecad3e6de355b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#ac342ae309b0c53828d2ecad3e6de355b">configUSE_TIMERS</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:ac342ae309b0c53828d2ecad3e6de355b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05c75ff9029ba3f0ab5bde9196f1e873"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a05c75ff9029ba3f0ab5bde9196f1e873">configTIMER_TASK_PRIORITY</a>&#160;&#160;&#160;(2)</td></tr>
+<tr class="separator:a05c75ff9029ba3f0ab5bde9196f1e873"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb9aa0f31c1f3b14a15083a3c6120918"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#abb9aa0f31c1f3b14a15083a3c6120918">configTIMER_QUEUE_LENGTH</a>&#160;&#160;&#160;10</td></tr>
+<tr class="separator:abb9aa0f31c1f3b14a15083a3c6120918"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed7c7ebcdee603583a55e8ce04e55841"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#aed7c7ebcdee603583a55e8ce04e55841">configTIMER_TASK_STACK_DEPTH</a>&#160;&#160;&#160;(<a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a6c534a6cf8a00528fe0be42083484f9a">configMINIMAL_STACK_SIZE</a> * 2)</td></tr>
+<tr class="separator:aed7c7ebcdee603583a55e8ce04e55841"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6858ac8aaf726007fd19752956ef1bd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#ad6858ac8aaf726007fd19752956ef1bd">INCLUDE_vTaskPrioritySet</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:ad6858ac8aaf726007fd19752956ef1bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1279eb797355460aeeec06aa524e91df"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a1279eb797355460aeeec06aa524e91df">INCLUDE_uxTaskPriorityGet</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a1279eb797355460aeeec06aa524e91df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ae1434fdf995108dc749ff9329f53bd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a5ae1434fdf995108dc749ff9329f53bd">INCLUDE_vTaskDelete</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a5ae1434fdf995108dc749ff9329f53bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7ee138825e57f243c8ee5fd4207b9e26"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a7ee138825e57f243c8ee5fd4207b9e26">INCLUDE_vTaskCleanUpResources</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a7ee138825e57f243c8ee5fd4207b9e26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef8fbb97819ad3d962f334ac298206d1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#aef8fbb97819ad3d962f334ac298206d1">INCLUDE_vTaskSuspend</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:aef8fbb97819ad3d962f334ac298206d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8459bfd5b428319bb10de9f504a53aa"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#ae8459bfd5b428319bb10de9f504a53aa">INCLUDE_vTaskDelayUntil</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:ae8459bfd5b428319bb10de9f504a53aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a24361a6eb816a965f1ee4e2e08e364f8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a24361a6eb816a965f1ee4e2e08e364f8">INCLUDE_vTaskDelay</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a24361a6eb816a965f1ee4e2e08e364f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5796db11ec6f9aa38d017d2ac393c5ba"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a5796db11ec6f9aa38d017d2ac393c5ba">configPRIO_BITS</a>&#160;&#160;&#160;4 /* 15 priority levels */</td></tr>
+<tr class="separator:a5796db11ec6f9aa38d017d2ac393c5ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10da20f180ec9bd131b0052a802dbc39"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a10da20f180ec9bd131b0052a802dbc39">configLIBRARY_LOWEST_INTERRUPT_PRIORITY</a>&#160;&#160;&#160;0xf</td></tr>
+<tr class="separator:a10da20f180ec9bd131b0052a802dbc39"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2254bd235d882be3061bcad0b1e8be98"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a2254bd235d882be3061bcad0b1e8be98">configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY</a>&#160;&#160;&#160;5</td></tr>
+<tr class="separator:a2254bd235d882be3061bcad0b1e8be98"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac42cff506ad61d4174fa23e952e3225e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#ac42cff506ad61d4174fa23e952e3225e">configKERNEL_INTERRUPT_PRIORITY</a>&#160;&#160;&#160;(<a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a10da20f180ec9bd131b0052a802dbc39">configLIBRARY_LOWEST_INTERRUPT_PRIORITY</a> &lt;&lt; (8 - <a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a5796db11ec6f9aa38d017d2ac393c5ba">configPRIO_BITS</a>))</td></tr>
+<tr class="separator:ac42cff506ad61d4174fa23e952e3225e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a54bfc31c410ee452577a25a4552c3704"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a54bfc31c410ee452577a25a4552c3704">configMAX_SYSCALL_INTERRUPT_PRIORITY</a>&#160;&#160;&#160;(<a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a2254bd235d882be3061bcad0b1e8be98">configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY</a> &lt;&lt; (8 - <a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a5796db11ec6f9aa38d017d2ac393c5ba">configPRIO_BITS</a>))</td></tr>
+<tr class="separator:a54bfc31c410ee452577a25a4552c3704"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adeb674dafd926ad4dd27b70ecdc41163"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#adeb674dafd926ad4dd27b70ecdc41163">configASSERT</a>(x)                  &#160;&#160;&#160;TEST_ASSERT(x)</td></tr>
+<tr class="separator:adeb674dafd926ad4dd27b70ecdc41163"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad43047b3ea0a146673e30637488bf754"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#ad43047b3ea0a146673e30637488bf754">vPortSVCHandler</a>&#160;&#160;&#160;SVC_Handler</td></tr>
+<tr class="separator:ad43047b3ea0a146673e30637488bf754"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f30022da7d797dd31f1b8a11cae9a35"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a6f30022da7d797dd31f1b8a11cae9a35">xPortPendSVHandler</a>&#160;&#160;&#160;PendSV_Handler</td></tr>
+<tr class="separator:a6f30022da7d797dd31f1b8a11cae9a35"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae42e6318b5d564e44f97f8c765859448"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#ae42e6318b5d564e44f97f8c765859448">xPortSysTickHandler</a>&#160;&#160;&#160;SysTick_Handler</td></tr>
+<tr class="separator:ae42e6318b5d564e44f97f8c765859448"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="adeb674dafd926ad4dd27b70ecdc41163"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configASSERT</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x</td><td>)</td>
+          <td>&#160;&#160;&#160;TEST_ASSERT(x)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a847511ee433494b1e32c90602c967ae7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configCHECK_FOR_STACK_OVERFLOW&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa68082df879e6fc96bcb9b26513639e7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configCPU_CLOCK_HZ&#160;&#160;&#160;(SystemCoreClock)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad8081822f3ebc7c917b63bd7bdd7bc58"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configGENERATE_RUN_TIME_STATS&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad6a5061a742fee450ac455e4ad0f4b6c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configIDLE_SHOULD_YIELD&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac42cff506ad61d4174fa23e952e3225e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configKERNEL_INTERRUPT_PRIORITY&#160;&#160;&#160;(<a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a10da20f180ec9bd131b0052a802dbc39">configLIBRARY_LOWEST_INTERRUPT_PRIORITY</a> &lt;&lt; (8 - <a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a5796db11ec6f9aa38d017d2ac393c5ba">configPRIO_BITS</a>))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a10da20f180ec9bd131b0052a802dbc39"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY&#160;&#160;&#160;0xf</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2254bd235d882be3061bcad0b1e8be98"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY&#160;&#160;&#160;5</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae8f3fd645e6e78dfeb8a6e874af6195a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configMAX_CO_ROUTINE_PRIORITIES&#160;&#160;&#160;(2)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9a78f5ac61e6cb172dadf2a51f11db38"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configMAX_PRIORITIES&#160;&#160;&#160;(5)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a54bfc31c410ee452577a25a4552c3704"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configMAX_SYSCALL_INTERRUPT_PRIORITY&#160;&#160;&#160;(<a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a2254bd235d882be3061bcad0b1e8be98">configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY</a> &lt;&lt; (8 - <a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a5796db11ec6f9aa38d017d2ac393c5ba">configPRIO_BITS</a>))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac388dc4041aab6997348828eb27fc1a8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configMAX_TASK_NAME_LEN&#160;&#160;&#160;(10)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6c534a6cf8a00528fe0be42083484f9a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configMINIMAL_STACK_SIZE&#160;&#160;&#160;((unsigned short)90)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5796db11ec6f9aa38d017d2ac393c5ba"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configPRIO_BITS&#160;&#160;&#160;4 /* 15 priority levels */</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa4b5138c4e42a180f0abd4f2455f90fb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configQUEUE_REGISTRY_SIZE&#160;&#160;&#160;8</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2f0258dd1e3b877e5bc013be54c2db6a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configTICK_RATE_HZ&#160;&#160;&#160;((TickType_t)1000)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abb9aa0f31c1f3b14a15083a3c6120918"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configTIMER_QUEUE_LENGTH&#160;&#160;&#160;10</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a05c75ff9029ba3f0ab5bde9196f1e873"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configTIMER_TASK_PRIORITY&#160;&#160;&#160;(2)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aed7c7ebcdee603583a55e8ce04e55841"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configTIMER_TASK_STACK_DEPTH&#160;&#160;&#160;(<a class="el" href="../../de/d33/_free_r_t_o_s_config_8h.html#a6c534a6cf8a00528fe0be42083484f9a">configMINIMAL_STACK_SIZE</a> * 2)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9f213227674effff0122a75d94d87938"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configTOTAL_HEAP_SIZE&#160;&#160;&#160;((size_t)(10 * 1024))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aac311ed9b9e5ae4d2d9648b33a24acce"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_16_BIT_TICKS&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2eb2a0baf886a7adab15b5735029434b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_APPLICATION_TASK_TAG&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a57990715eb06402474b8b47e1d562616"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_CO_ROUTINES&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a55778995203c57369d2fbfb10224943d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_COUNTING_SEMAPHORES&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac637ae45863c19fa2e919db0ed49301f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_IDLE_HOOK&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abdf48e7c9cf513f083aa9cbed0dd7cd7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_MALLOC_FAILED_HOOK&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a543bf3c79008974cc1d36bab51d94fbf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_MUTEXES&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adde83486022745409c40605922b0bdd6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_PREEMPTION&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9fe02d866cb1c4fbaa0c3de79f53d42d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_RECURSIVE_MUTEXES&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a23c5922c077106fad3f70b54d9071466"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_TICK_HOOK&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a493c5763eb7a39bd80779a1c58de0d82"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_TIME_SLICING&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac342ae309b0c53828d2ecad3e6de355b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_TIMERS&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a27f5ee137dc9f125681a31f0b0a4b3be"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define configUSE_TRACE_FACILITY&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1279eb797355460aeeec06aa524e91df"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define INCLUDE_uxTaskPriorityGet&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7ee138825e57f243c8ee5fd4207b9e26"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define INCLUDE_vTaskCleanUpResources&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a24361a6eb816a965f1ee4e2e08e364f8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define INCLUDE_vTaskDelay&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae8459bfd5b428319bb10de9f504a53aa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define INCLUDE_vTaskDelayUntil&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5ae1434fdf995108dc749ff9329f53bd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define INCLUDE_vTaskDelete&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad6858ac8aaf726007fd19752956ef1bd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define INCLUDE_vTaskPrioritySet&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aef8fbb97819ad3d962f334ac298206d1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define INCLUDE_vTaskSuspend&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad43047b3ea0a146673e30637488bf754"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define vPortSVCHandler&#160;&#160;&#160;SVC_Handler</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6f30022da7d797dd31f1b8a11cae9a35"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define xPortPendSVHandler&#160;&#160;&#160;PendSV_Handler</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae42e6318b5d564e44f97f8c765859448"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define xPortSysTickHandler&#160;&#160;&#160;SysTick_Handler</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/de/d33/_free_r_t_o_s_config_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/BUILD_FreeRTOS/FreeRTOSConfig.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_5b516ef453fd36a0929ce414690fe335.html">BUILD_FreeRTOS</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">FreeRTOSConfig.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../de/d33/_free_r_t_o_s_config_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">    FreeRTOS V8.2.3 - Copyright (C) 2015 Real Time Engineers Ltd.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">    All rights reserved</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">    This file is part of the FreeRTOS distribution.</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">    FreeRTOS is free software; you can redistribute it and/or modify it under</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">    the terms of the GNU General Public License (version 2) as published by the</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">    Free Software Foundation &gt;&gt;&gt;&gt; AND MODIFIED BY &lt;&lt;&lt;&lt; the FreeRTOS exception.</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">    ***************************************************************************</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">    &gt;&gt;!   NOTE: The modification to the GPL is included to allow you to     !&lt;&lt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">    &gt;&gt;!   distribute a combined work that includes FreeRTOS without being   !&lt;&lt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">    &gt;&gt;!   obliged to provide the source code for proprietary components     !&lt;&lt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">    &gt;&gt;!   outside of the FreeRTOS kernel.                                   !&lt;&lt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">    ***************************************************************************</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment">    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment">    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment">    FOR A PARTICULAR PURPOSE.  Full license text is available on the following</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment">    link: http://www.freertos.org/a00114.html</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment">    ***************************************************************************</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment">     *                                                                       *</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment">     *    FreeRTOS provides completely free yet professionally developed,    *</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment">     *    robust, strictly quality controlled, supported, and cross          *</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment">     *    platform software that is more than just the market leader, it     *</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">     *    is the industry&#39;s de facto standard.                               *</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">     *                                                                       *</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">     *    Help yourself get started quickly while simultaneously helping     *</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">     *    to support the FreeRTOS project by purchasing a FreeRTOS           *</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">     *    tutorial book, reference manual, or both:                          *</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">     *    http://www.FreeRTOS.org/Documentation                              *</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">     *                                                                       *</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">    ***************************************************************************</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">    the FAQ page &quot;My application does not run, what could be wrong?&quot;.  Have you</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">    defined configASSERT()?</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">    http://www.FreeRTOS.org/support - In return for receiving this top quality</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">    embedded software for free we request you assist our global community by</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">    participating in the support forum.</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">    http://www.FreeRTOS.org/training - Investing in training allows your team to</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">    be as productive as possible as early as possible.  Now you can receive</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">    FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">    Ltd, and the world&#39;s leading authority on the world&#39;s leading RTOS.</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">    including FreeRTOS+Trace - an indispensable productivity tool, a DOS</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">    compatible FAT file system, and our tiny thread aware UDP/IP stack.</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment">    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment">    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">    licenses offer ticketed support, indemnification and commercial middleware.</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment">    http://www.SafeRTOS.com - High Integrity Systems also provide a safety</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment">    engineered and independently SIL3 certified version for use in safety and</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="comment">    mission critical applications that require provable dependability.</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment">    1 tab == 4 spaces!</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="preprocessor">#ifndef FREERTOS_CONFIG_H</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="preprocessor">#define FREERTOS_CONFIG_H</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment">/*-----------------------------------------------------------</span></div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment"> * Application specific definitions.</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="comment"> * These definitions should be adjusted for your particular hardware and</span></div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="comment"> * application requirements.</span></div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="comment"> * THESE PARAMETERS ARE DESCRIBED WITHIN THE &#39;CONFIGURATION&#39; SECTION OF THE</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="comment"> * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="comment"> * See http://www.freertos.org/a00110.html.</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="comment"> *----------------------------------------------------------*/</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#adde83486022745409c40605922b0bdd6">   85</a></span>&#160;<span class="preprocessor">#define configUSE_PREEMPTION 1</span></div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#ac637ae45863c19fa2e919db0ed49301f">   86</a></span>&#160;<span class="preprocessor">#define configUSE_IDLE_HOOK 0</span></div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a23c5922c077106fad3f70b54d9071466">   87</a></span>&#160;<span class="preprocessor">#define configUSE_TICK_HOOK 0</span></div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#aa68082df879e6fc96bcb9b26513639e7">   88</a></span>&#160;<span class="preprocessor">#define configCPU_CLOCK_HZ (SystemCoreClock)</span></div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a2f0258dd1e3b877e5bc013be54c2db6a">   89</a></span>&#160;<span class="preprocessor">#define configTICK_RATE_HZ ((TickType_t)1000)</span></div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a9a78f5ac61e6cb172dadf2a51f11db38">   90</a></span>&#160;<span class="preprocessor">#define configMAX_PRIORITIES (5)</span></div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a6c534a6cf8a00528fe0be42083484f9a">   91</a></span>&#160;<span class="preprocessor">#define configMINIMAL_STACK_SIZE ((unsigned short)90)</span></div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a9f213227674effff0122a75d94d87938">   92</a></span>&#160;<span class="preprocessor">#define configTOTAL_HEAP_SIZE ((size_t)(10 * 1024))</span></div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#ac388dc4041aab6997348828eb27fc1a8">   93</a></span>&#160;<span class="preprocessor">#define configMAX_TASK_NAME_LEN (10)</span></div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a27f5ee137dc9f125681a31f0b0a4b3be">   94</a></span>&#160;<span class="preprocessor">#define configUSE_TRACE_FACILITY 1</span></div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#aac311ed9b9e5ae4d2d9648b33a24acce">   95</a></span>&#160;<span class="preprocessor">#define configUSE_16_BIT_TICKS 0</span></div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#ad6a5061a742fee450ac455e4ad0f4b6c">   96</a></span>&#160;<span class="preprocessor">#define configIDLE_SHOULD_YIELD 1</span></div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a543bf3c79008974cc1d36bab51d94fbf">   97</a></span>&#160;<span class="preprocessor">#define configUSE_MUTEXES 1</span></div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#aa4b5138c4e42a180f0abd4f2455f90fb">   98</a></span>&#160;<span class="preprocessor">#define configQUEUE_REGISTRY_SIZE 8</span></div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a847511ee433494b1e32c90602c967ae7">   99</a></span>&#160;<span class="preprocessor">#define configCHECK_FOR_STACK_OVERFLOW 0</span></div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a9fe02d866cb1c4fbaa0c3de79f53d42d">  100</a></span>&#160;<span class="preprocessor">#define configUSE_RECURSIVE_MUTEXES 1</span></div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#abdf48e7c9cf513f083aa9cbed0dd7cd7">  101</a></span>&#160;<span class="preprocessor">#define configUSE_MALLOC_FAILED_HOOK 0</span></div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a2eb2a0baf886a7adab15b5735029434b">  102</a></span>&#160;<span class="preprocessor">#define configUSE_APPLICATION_TASK_TAG 0</span></div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a55778995203c57369d2fbfb10224943d">  103</a></span>&#160;<span class="preprocessor">#define configUSE_COUNTING_SEMAPHORES 1</span></div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#ad8081822f3ebc7c917b63bd7bdd7bc58">  104</a></span>&#160;<span class="preprocessor">#define configGENERATE_RUN_TIME_STATS 0</span></div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a493c5763eb7a39bd80779a1c58de0d82">  105</a></span>&#160;<span class="preprocessor">#define configUSE_TIME_SLICING 0</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="comment">/* Co-routine definitions. */</span></div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a57990715eb06402474b8b47e1d562616">  108</a></span>&#160;<span class="preprocessor">#define configUSE_CO_ROUTINES 0</span></div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#ae8f3fd645e6e78dfeb8a6e874af6195a">  109</a></span>&#160;<span class="preprocessor">#define configMAX_CO_ROUTINE_PRIORITIES (2)</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="comment">/* Software timer definitions. */</span></div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#ac342ae309b0c53828d2ecad3e6de355b">  112</a></span>&#160;<span class="preprocessor">#define configUSE_TIMERS 1</span></div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a05c75ff9029ba3f0ab5bde9196f1e873">  113</a></span>&#160;<span class="preprocessor">#define configTIMER_TASK_PRIORITY (2)</span></div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#abb9aa0f31c1f3b14a15083a3c6120918">  114</a></span>&#160;<span class="preprocessor">#define configTIMER_QUEUE_LENGTH 10</span></div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#aed7c7ebcdee603583a55e8ce04e55841">  115</a></span>&#160;<span class="preprocessor">#define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE * 2)</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="comment">/* Set the following definitions to 1 to include the API function, or zero</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="comment">to exclude the API function. */</span></div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#ad6858ac8aaf726007fd19752956ef1bd">  119</a></span>&#160;<span class="preprocessor">#define INCLUDE_vTaskPrioritySet 1</span></div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a1279eb797355460aeeec06aa524e91df">  120</a></span>&#160;<span class="preprocessor">#define INCLUDE_uxTaskPriorityGet 1</span></div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a5ae1434fdf995108dc749ff9329f53bd">  121</a></span>&#160;<span class="preprocessor">#define INCLUDE_vTaskDelete 1</span></div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a7ee138825e57f243c8ee5fd4207b9e26">  122</a></span>&#160;<span class="preprocessor">#define INCLUDE_vTaskCleanUpResources 1</span></div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#aef8fbb97819ad3d962f334ac298206d1">  123</a></span>&#160;<span class="preprocessor">#define INCLUDE_vTaskSuspend 1</span></div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#ae8459bfd5b428319bb10de9f504a53aa">  124</a></span>&#160;<span class="preprocessor">#define INCLUDE_vTaskDelayUntil 1</span></div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a24361a6eb816a965f1ee4e2e08e364f8">  125</a></span>&#160;<span class="preprocessor">#define INCLUDE_vTaskDelay 1</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="comment">/* Cortex-M specific definitions. */</span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="preprocessor">#ifdef __NVIC_PRIO_BITS</span></div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;<span class="comment">/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */</span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="preprocessor">#define configPRIO_BITS __NVIC_PRIO_BITS</span></div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a5796db11ec6f9aa38d017d2ac393c5ba">  132</a></span>&#160;<span class="preprocessor">#define configPRIO_BITS 4 </span><span class="comment">/* 15 priority levels */</span><span class="preprocessor"></span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="comment">/* The lowest interrupt priority that can be used in a call to a &quot;set priority&quot;</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="comment">function. */</span></div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a10da20f180ec9bd131b0052a802dbc39">  137</a></span>&#160;<span class="preprocessor">#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xf</span></div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="comment">/* The highest interrupt priority that can be used by any interrupt service</span></div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="comment">routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="comment">INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER</span></div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="comment">PRIORITY THAN THIS! (higher priorities are lower numeric values. */</span></div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a2254bd235d882be3061bcad0b1e8be98">  143</a></span>&#160;<span class="preprocessor">#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="comment">/* Interrupt priorities used by the kernel port layer itself.  These are generic</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="comment">to all Cortex-M ports, and do not rely on any particular library functions. */</span></div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#ac42cff506ad61d4174fa23e952e3225e">  147</a></span>&#160;<span class="preprocessor">#define configKERNEL_INTERRUPT_PRIORITY (configLIBRARY_LOWEST_INTERRUPT_PRIORITY &lt;&lt; (8 - configPRIO_BITS))</span></div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="comment">/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!</span></div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="comment">See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */</span></div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a54bfc31c410ee452577a25a4552c3704">  150</a></span>&#160;<span class="preprocessor">#define configMAX_SYSCALL_INTERRUPT_PRIORITY (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY &lt;&lt; (8 - configPRIO_BITS))</span></div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="comment">/* Normal assert() semantics without relying on the provision of an assert.h</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="comment">header file. */</span></div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<span class="preprocessor">#include &quot;unity.h&quot;</span></div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#adeb674dafd926ad4dd27b70ecdc41163">  155</a></span>&#160;<span class="preprocessor">#define configASSERT(x)           TEST_ASSERT(x)</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="comment">/*#define configASSERT(x)           \</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="comment">    if ((x) == 0)                 \</span></div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="comment">    {                             \</span></div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="comment">        taskDISABLE_INTERRUPTS(); \</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="comment">        for (;;)                  \</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="comment">            ;                     \</span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="comment">    }*/</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="comment">/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="comment">standard names. */</span></div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#ad43047b3ea0a146673e30637488bf754">  166</a></span>&#160;<span class="preprocessor">#define vPortSVCHandler SVC_Handler</span></div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#a6f30022da7d797dd31f1b8a11cae9a35">  167</a></span>&#160;<span class="preprocessor">#define xPortPendSVHandler PendSV_Handler</span></div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="../../de/d33/_free_r_t_o_s_config_8h.html#ae42e6318b5d564e44f97f8c765859448">  168</a></span>&#160;<span class="preprocessor">#define xPortSysTickHandler SysTick_Handler</span></div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FREERTOS_CONFIG_H */</span><span class="preprocessor"></span></div></div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/de/d33/pal__rtos_8c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1151 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Modules/RTOS/pal_rtos.c File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="../../dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="../../dir_5097254b22164c5ad71a4eec719a72ee.html">Modules</a></li><li class="navelem"><a class="el" href="../../dir_0a6b9d10733e8fa4306fa781def1f127.html">RTOS</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_rtos.c File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="../../d4/d01/pal__rtos_8h_source.html">pal_rtos.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="../../d5/d59/pal__plat__rtos_8h_source.html">pal_plat_rtos.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ab8ab0f31bbf4258b7684d22e7725a9f8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#ab8ab0f31bbf4258b7684d22e7725a9f8">pal_osReboot</a> (void)</td></tr>
+<tr class="separator:ab8ab0f31bbf4258b7684d22e7725a9f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9800b8b9e057fe17e50c4259c809f898"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a9800b8b9e057fe17e50c4259c809f898">pal_osKernelSysTick</a> (void)</td></tr>
+<tr class="separator:a9800b8b9e057fe17e50c4259c809f898"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af88551b6ca24a7a2bb6d94d423eb4401"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#af88551b6ca24a7a2bb6d94d423eb4401">pal_osKernelSysTick64</a> (void)</td></tr>
+<tr class="separator:af88551b6ca24a7a2bb6d94d423eb4401"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a34375ee82619a4064849daccbdfbc966"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a34375ee82619a4064849daccbdfbc966">pal_osKernelSysTickMicroSec</a> (uint64_t microseconds)</td></tr>
+<tr class="separator:a34375ee82619a4064849daccbdfbc966"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59e85747582417a1395ed0f9c140eb8a"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a59e85747582417a1395ed0f9c140eb8a">pal_osKernelSysMilliSecTick</a> (uint64_t sysTicks)</td></tr>
+<tr class="separator:a59e85747582417a1395ed0f9c140eb8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a087214ae87c20fd59f47fe3c96d0eefc"><td class="memItemLeft" align="right" valign="top">uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a087214ae87c20fd59f47fe3c96d0eefc">pal_osKernelSysTickFrequency</a> (void)</td></tr>
+<tr class="separator:a087214ae87c20fd59f47fe3c96d0eefc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2dae64d917f644982b893037adf562b4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a2dae64d917f644982b893037adf562b4">pal_osThreadCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a> function, void *funcArgument, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a> priority, uint32_t stackSize, uint32_t *stackPtr, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a> *store, <a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *threadID)</td></tr>
+<tr class="separator:a2dae64d917f644982b893037adf562b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abcfa47b411929b33d5d9cfaaff28ce18"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#abcfa47b411929b33d5d9cfaaff28ce18">pal_osThreadTerminate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *threadID)</td></tr>
+<tr class="separator:abcfa47b411929b33d5d9cfaaff28ce18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2993b8f6b5e8d7ccd6121dc18330e4be"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a2993b8f6b5e8d7ccd6121dc18330e4be">pal_osThreadGetId</a> (void)</td></tr>
+<tr class="separator:a2993b8f6b5e8d7ccd6121dc18330e4be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac94f4efc4bad73969e57c8255c136a0d"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#ac94f4efc4bad73969e57c8255c136a0d">pal_osThreadGetLocalStore</a> (void)</td></tr>
+<tr class="separator:ac94f4efc4bad73969e57c8255c136a0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad6aaee432fd7ea5e35ab500a6278cc25"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#ad6aaee432fd7ea5e35ab500a6278cc25">pal_osDelay</a> (uint32_t milliseconds)</td></tr>
+<tr class="separator:ad6aaee432fd7ea5e35ab500a6278cc25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4da36fbbba744a14d1bdfe2a26d1a18"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#aa4da36fbbba744a14d1bdfe2a26d1a18">pal_osTimerCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a> function, void *funcArgument, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a> timerType, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *timerID)</td></tr>
+<tr class="separator:aa4da36fbbba744a14d1bdfe2a26d1a18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c60c9e433bc6005bac6b02d5aba7363"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a6c60c9e433bc6005bac6b02d5aba7363">pal_osTimerStart</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> timerID, uint32_t millisec)</td></tr>
+<tr class="separator:a6c60c9e433bc6005bac6b02d5aba7363"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94f4df594102e582cbd2114f6eebb57d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a94f4df594102e582cbd2114f6eebb57d">pal_osTimerStop</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> timerID)</td></tr>
+<tr class="separator:a94f4df594102e582cbd2114f6eebb57d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac7ca6e7c3c229f4092c9df4b69e7dd59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#ac7ca6e7c3c229f4092c9df4b69e7dd59">pal_osTimerDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *timerID)</td></tr>
+<tr class="separator:ac7ca6e7c3c229f4092c9df4b69e7dd59"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af89aab14085207b1a0951f7aad24193c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#af89aab14085207b1a0951f7aad24193c">pal_osMutexCreate</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *mutexID)</td></tr>
+<tr class="separator:af89aab14085207b1a0951f7aad24193c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acda0974247325955719b23494d66c622"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#acda0974247325955719b23494d66c622">pal_osMutexWait</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutexID, uint32_t millisec)</td></tr>
+<tr class="separator:acda0974247325955719b23494d66c622"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1d976a616a5c850b2016b2b87d8b47cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a1d976a616a5c850b2016b2b87d8b47cc">pal_osMutexRelease</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> mutexID)</td></tr>
+<tr class="separator:a1d976a616a5c850b2016b2b87d8b47cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03f43d7e53435d89f316862b48b573c4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a03f43d7e53435d89f316862b48b573c4">pal_osMutexDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *mutexID)</td></tr>
+<tr class="separator:a03f43d7e53435d89f316862b48b573c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa7aee442a5c8cc274d3e52206984037"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#aaa7aee442a5c8cc274d3e52206984037">pal_osSemaphoreCreate</a> (uint32_t count, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *semaphoreID)</td></tr>
+<tr class="separator:aaa7aee442a5c8cc274d3e52206984037"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa2d998744dbc9504bfe0358f85457fc4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#aa2d998744dbc9504bfe0358f85457fc4">pal_osSemaphoreWait</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphoreID, uint32_t millisec, int32_t *countersAvailable)</td></tr>
+<tr class="separator:aa2d998744dbc9504bfe0358f85457fc4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a009d0c063119265f9c5c0c9bff379c14"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a009d0c063119265f9c5c0c9bff379c14">pal_osSemaphoreRelease</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> semaphoreID)</td></tr>
+<tr class="separator:a009d0c063119265f9c5c0c9bff379c14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a45f071482f8669821b90264e0470b33d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a45f071482f8669821b90264e0470b33d">pal_osSemaphoreDelete</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *semaphoreID)</td></tr>
+<tr class="separator:a45f071482f8669821b90264e0470b33d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1245f053abb3fdb7ab2ceb5a2899e8c6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a1245f053abb3fdb7ab2ceb5a2899e8c6">pal_osPoolCreate</a> (uint32_t blockSize, uint32_t blockCount, <a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *memoryPoolID)</td></tr>
+<tr class="separator:a1245f053abb3fdb7ab2ceb5a2899e8c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3a2b57685096d16a110ee38f7f29e099"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a3a2b57685096d16a110ee38f7f29e099">pal_osPoolAlloc</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID)</td></tr>
+<tr class="separator:a3a2b57685096d16a110ee38f7f29e099"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d20661cd387a172450a2fe12993687a"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a5d20661cd387a172450a2fe12993687a">pal_osPoolCAlloc</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID)</td></tr>
+<tr class="separator:a5d20661cd387a172450a2fe12993687a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79f4997069310aa7bbb6ae7995988dd7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a79f4997069310aa7bbb6ae7995988dd7">pal_osPoolFree</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> memoryPoolID, void *block)</td></tr>
+<tr class="separator:a79f4997069310aa7bbb6ae7995988dd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c01464448f8d7bd95bf518d651484c6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a1c01464448f8d7bd95bf518d651484c6">pal_osPoolDestroy</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *memoryPoolID)</td></tr>
+<tr class="separator:a1c01464448f8d7bd95bf518d651484c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c7f0003e92b3494089966d53ab24a1b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a0c7f0003e92b3494089966d53ab24a1b">pal_osMessageQueueCreate</a> (uint32_t messageQSize, <a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *messageQID)</td></tr>
+<tr class="separator:a0c7f0003e92b3494089966d53ab24a1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a966daa5b0bd9282fbffa7c462da1c417"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a966daa5b0bd9282fbffa7c462da1c417">pal_osMessagePut</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> messageQID, uint32_t info, uint32_t timeout)</td></tr>
+<tr class="separator:a966daa5b0bd9282fbffa7c462da1c417"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab70d0be45514258874c0406c2040372c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#ab70d0be45514258874c0406c2040372c">pal_osMessageGet</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> messageQID, uint32_t timeout, uint32_t *messageValue)</td></tr>
+<tr class="separator:ab70d0be45514258874c0406c2040372c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adba13212ec060092acdf6165e82be5b6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#adba13212ec060092acdf6165e82be5b6">pal_osMessageQueueDestroy</a> (<a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *messageQID)</td></tr>
+<tr class="separator:adba13212ec060092acdf6165e82be5b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b33d260ee1022f5b5f6a9dfc3363f2a"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a9b33d260ee1022f5b5f6a9dfc3363f2a">pal_osAtomicIncrement</a> (int32_t *valuePtr, int32_t increment)</td></tr>
+<tr class="separator:a9b33d260ee1022f5b5f6a9dfc3363f2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b4f475c89ea263557d6529c4d9a9353"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d33/pal__rtos_8c.html#a2b4f475c89ea263557d6529c4d9a9353">dbgPrintf</a> (const char *function, uint32_t line, const char *format,...)</td></tr>
+<tr class="separator:a2b4f475c89ea263557d6529c4d9a9353"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2b4f475c89ea263557d6529c4d9a9353"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void dbgPrintf </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>function</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>line</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>format</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname"><em>...</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Printf like function with prefix of function and line.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">function</td><td>name of the current function </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">line</td><td>line number to be printed </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">format</td><td>print format (just like printf)</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the value of the valuePtr after the increment operation. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9b33d260ee1022f5b5f6a9dfc3363f2a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t pal_osAtomicIncrement </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>valuePtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>increment</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Perform an atomic increment for a signed32 bit value</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">valuePtr</td><td>the address of the value to increment </td></tr>
+    <tr><td class="paramdir"></td><td class="paramname"></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ad6aaee432fd7ea5e35ab500a6278cc25"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osDelay </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>milliseconds</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait for a specified time period in milliseconds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">milliseconds</td><td>the amount of milliseconds to wait before proceeding.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a59e85747582417a1395ed0f9c140eb8a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_osKernelSysMilliSecTick </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>sysTicks</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Converts value from kernel system ticks to milliseconds.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">sysTicks</td><td>the amount of kernel system ticks to convert into millieseconds</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>converted value in system ticks </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a9800b8b9e057fe17e50c4259c809f898"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t pal_osKernelSysTick </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the RTOS kernel system timer counter. </p><dl class="section note"><dt>Note</dt><dd>this counter will wrap around very often (e.g. once every 42 sec for 100Mhz) </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>the RTOS kernel system timer counter </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="af88551b6ca24a7a2bb6d94d423eb4401"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_osKernelSysTick64 </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the RTOS kernel system timer counter. </p><dl class="section return"><dt>Returns</dt><dd>the RTOS kernel system timer counter </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a087214ae87c20fd59f47fe3c96d0eefc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_osKernelSysTickFrequency </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the system tick frequency </p><dl class="section return"><dt>Returns</dt><dd>the system tick frequency </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a34375ee82619a4064849daccbdfbc966"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint64_t pal_osKernelSysTickMicroSec </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t&#160;</td>
+          <td class="paramname"><em>microseconds</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Converts value from microseconds to kernel sys tick</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">microseconds</td><td>the amount of microseconds to convert into system ticks</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>converted value in system ticks </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab70d0be45514258874c0406c2040372c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMessageGet </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a>&#160;</td>
+          <td class="paramname"><em>messageQID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>timeout</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>messageValue</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get a Message or Wait for a Message from a Queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQID</td><td>the handle for the memory pool </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>timeout in milliseconds </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">event</td><td>the data to send</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - in case semaphore was not available but not due to time out. PAL_ERR_RTOS_TIMEOUT - no message arrived during the timeout period. PAL_ERR_RTOS_RESOURCE - no message received and there was no timeout </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a966daa5b0bd9282fbffa7c462da1c417"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMessagePut </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a>&#160;</td>
+          <td class="paramname"><em>messageQID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>info</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>timeout</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Put a Message to a Queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQID</td><td>the handle for the memory pool </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">info</td><td>the data to send </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>timeout in milliseconds</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a0c7f0003e92b3494089966d53ab24a1b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMessageQueueCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>messageQSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *&#160;</td>
+          <td class="paramname"><em>messageQID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a message queue.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">messageQSize</td><td>size of the message queue. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">memoryPoolID</td><td>holds the created memory pool ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when message queue created successfully. PAL_ERR_NO_MEMORY: no memory resource available to create message queue object. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="adba13212ec060092acdf6165e82be5b6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMessageQueueDestroy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">palMessageQID_t</a> *&#160;</td>
+          <td class="paramname"><em>messageQID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a message queue object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">messageQID</td><td>the handle for the message queue, in success:(*messageQID = NULL).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="af89aab14085207b1a0951f7aad24193c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMutexCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize Mutex object</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">mutexID</td><td>holds the created mutex ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when mutex created successfully. PAL_ERR_NO_MEMORY: no memory resource available to create mutex object. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a03f43d7e53435d89f316862b48b573c4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMutexDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a> *&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a Mutex object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">mutexID</td><td>Mutex handle to delete, in success:(*mutexID = NULL).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when mutex deleted successfully. PAL_ERR_RTOS_RESOURCE - mutex already released. PAL_ERR_RTOS_PARAMETER - mutex id is invalid. PAL_ERR_RTOS_ISR - cannot be called from interrupt service routines. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>After this call the mutex_id is no longer valid and cannot be used. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1d976a616a5c850b2016b2b87d8b47cc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMutexRelease </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td>
+          <td class="paramname"><em>mutexID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Release a Mutex that was obtained by osMutexWait.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">mutexID</td><td>the handle for the mutex </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="acda0974247325955719b23494d66c622"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osMutexWait </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">palMutexID_t</a>&#160;</td>
+          <td class="paramname"><em>mutexID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait until a Mutex becomes available.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">mutexID</td><td>the handle for the mutex </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>the timeout for the waiting operation if the timeout expires before the semaphore is released and error will be returned from the function, PAL_RTOS_WAIT_FOREVER can be used.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and one of the following error codes in case of failure: PAL_ERR_RTOS_RESOURCE - mutex not avaialbe but no time out set. PAL_ERR_RTOS_TIMEOUT - mutex was not available until timeout expired. PAL_ERR_RTOS_PARAMETER - mutex id is invalid PAL_ERR_RTOS_ISR - cannot be called from interrupt service routines </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a3a2b57685096d16a110ee38f7f29e099"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_osPoolAlloc </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Allocate a single memory block from a memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolID</td><td>the handle for the memory pool</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns a pointer to a single allocated memory from the pool or NULL in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a5d20661cd387a172450a2fe12993687a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_osPoolCAlloc </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Allocate a single memory block from a memory pool and set memory block to zero.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolID</td><td>the handle for the memory pool</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns a pointer to a single allocated memory from the pool or NULL in case of failure. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1245f053abb3fdb7ab2ceb5a2899e8c6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osPoolCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>blockSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>blockCount</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">blockSize</td><td>size of single block in bytes. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">blockCount</td><td>maximum number of blocks in memory pool. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">memoryPoolID</td><td>holds the created memory pool ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when memory pool created successfully. PAL_ERR_NO_MEMORY: no memory resource available to create memory pool object. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a1c01464448f8d7bd95bf518d651484c6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osPoolDestroy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a> *&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a memory pool object.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">memoryPoolID</td><td>the handle for the memory pool, in success:(*memoryPoolID = NULL).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a79f4997069310aa7bbb6ae7995988dd7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osPoolFree </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">palMemoryPoolID_t</a>&#160;</td>
+          <td class="paramname"><em>memoryPoolID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>block</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Return an memoryPoolID memory block back to a specific memory pool.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">memoryPoolHandle</td><td>the handle for the memory pool </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">block</td><td>the block to free</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ab8ab0f31bbf4258b7684d22e7725a9f8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void pal_osReboot </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Initiates a system reboot </p>
+
+</div>
+</div>
+<a class="anchor" id="aaa7aee442a5c8cc274d3e52206984037"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osSemaphoreCreate </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>count</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *&#160;</td>
+          <td class="paramname"><em>semaphoreID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Create and initialize a Semaphore object</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">count</td><td>number of available resources </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">semaphoreID</td><td>holds the created semaphore ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when semaphore created successfully. PAL_ERR_NO_MEMORY: no memory resource available to create semaphore object. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a45f071482f8669821b90264e0470b33d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osSemaphoreDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a> *&#160;</td>
+          <td class="paramname"><em>semaphoreID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete a Semaphore object</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">semaphoreID</td><td>Semaphore handle to delete, in success:(*semaphoreID = NULL).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when semaphore deleted successfully. PAL_ERR_RTOS_RESOURCE - semaphore already released. PAL_ERR_RTOS_PARAMETER - semaphore id is invalid. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>After this call the semaphore_id is no longer valid and cannot be used. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a009d0c063119265f9c5c0c9bff379c14"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osSemaphoreRelease </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>&#160;</td>
+          <td class="paramname"><em>semaphoreID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Release a Semaphore token.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">semaphoreID</td><td>the handle for the semaphore</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa2d998744dbc9504bfe0358f85457fc4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osSemaphoreWait </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">palSemaphoreID_t</a>&#160;</td>
+          <td class="paramname"><em>semaphoreID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>countersAvailable</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Wait until a Semaphore token becomes available.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">semaphoreID</td><td>the handle for the semaphore </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>the timeout for the waiting operation if the timeout expires before the semaphore is released and error will be returned from the function, PAL_RTOS_WAIT_FOREVER can be used. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">counteresAvailable</td><td>the number of semaphore available at the call if semaphore is available, if semaphore was not available (timeout/error) zero is returned. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and one of the following error codes in case of failure: PAL_ERR_RTOS_TIMEOUT - semaphore was not available until timeout expired. PAL_ERR_RTOS_PARAMETER - semaphore id is invalid. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2dae64d917f644982b893037adf562b4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osThreadCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">palThreadFuncPtr</a>&#160;</td>
+          <td class="paramname"><em>function</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>funcArgument</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">palThreadPriority_t</a>&#160;</td>
+          <td class="paramname"><em>priority</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>stackSize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>stackPtr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">palThreadLocalStore_t</a> *&#160;</td>
+          <td class="paramname"><em>store</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *&#160;</td>
+          <td class="paramname"><em>threadID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Creates and starts thread function.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">function</td><td>function pointer to the thread callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">funcArgument</td><td>argument for the thread function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">priority</td><td>priotity of the thread. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">stackSize</td><td>the stack size of the thread can NOT be 0. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">stackPtr</td><td>pointer to the thread's stack can NOT be NULL. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">store</td><td>pointer to thread's local sotre, can be NULL. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">threadID</td><td>holds the created thread ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when thread created successfully. PAL_ERR_RTOS_PRIORITY : the given priority already used before in the system.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Each thread MUST be with unique priority. </dd>
+<dd>
+When the priority of the created thread function is higher than the current running thread, the created thread function starts instantly and becomes the new running thread. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a2993b8f6b5e8d7ccd6121dc18330e4be"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> pal_osThreadGetId </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get ID of the current thread </p><dl class="section return"><dt>Returns</dt><dd>the ID of the current thread - in case of error return PAL_MAX_UINT32 </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>for thread with Real Time priority the function will always return PAL_MAX_UINT32 </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac94f4efc4bad73969e57c8255c136a0d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_osThreadGetLocalStore </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Get the storage of current thread </p><dl class="section return"><dt>Returns</dt><dd>the storage of the current thread </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="abcfa47b411929b33d5d9cfaaff28ce18"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osThreadTerminate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">palThreadID_t</a> *&#160;</td>
+          <td class="paramname"><em>threadID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Terminates and free allocated data for the thread.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">threadID</td><td>thread ID to stop and terminate.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure PAL_ERR_RTOS_RESOURCE: if the thread ID is not correct. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="aa4da36fbbba744a14d1bdfe2a26d1a18"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osTimerCreate </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">palTimerFuncPtr</a>&#160;</td>
+          <td class="paramname"><em>function</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>funcArgument</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">palTimerType_t</a>&#160;</td>
+          <td class="paramname"><em>timerType</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *&#160;</td>
+          <td class="paramname"><em>timerID</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Creates a Timer.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">function</td><td>function pointer to the timer callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">funcArgument</td><td>funcArgument for the timer callback function. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerType</td><td>timer type to be created - (periodic or oneShot). </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">timerID</td><td>holds the created timer ID handle - zero value indecates an error.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when timer created successfully. PAL_ERR_NO_MEMORY: no memory resource available to create timer object.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>the timer function runs according to the platform resources of stack-size and priority. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ac7ca6e7c3c229f4092c9df4b69e7dd59"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osTimerDelete </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a> *&#160;</td>
+          <td class="paramname"><em>timerID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Delete the timer object</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">timerID</td><td>the handle for the timer to delete, in success:(*timerID = NULL).</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>PAL_SUCCESS when timer deleted successfully. PAL_ERR_RTOS_PARAMETER when timerID is incorrect. </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a6c60c9e433bc6005bac6b02d5aba7363"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osTimerStart </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a>&#160;</td>
+          <td class="paramname"><em>timerID</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>millisec</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Start or restart a timer.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerID</td><td>the handle for the timer to start </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">millisec</td><td>the amount of time in milliseconds to set the timer to.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a94f4df594102e582cbd2114f6eebb57d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">palStatus_t</a> pal_osTimerStop </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="../../d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">palTimerID_t</a>&#160;</td>
+          <td class="paramname"><em>timerID</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Stop a timer. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">timerID</td><td>the handle for the timer to stop </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>the function returns the status in the form of palStatus_t which will be <a class="el" href="../../d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">PAL_SUCCESS(0)</a> in case of success and another negative value indicating a specific error code in case of failure </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/de/dfc/structpal__time_val.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: pal_timeVal Struct Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="../../functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_timeVal Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="../../d9/d17/pal__network_8h_source.html">pal_network.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a8c0bfa9026d4b23b598f0652aa975fcf"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/dfc/structpal__time_val.html#a8c0bfa9026d4b23b598f0652aa975fcf">pal_tv_sec</a></td></tr>
+<tr class="separator:a8c0bfa9026d4b23b598f0652aa975fcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf8b8c0480064a16325f94f155db4e1c"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/dfc/structpal__time_val.html#acf8b8c0480064a16325f94f155db4e1c">pal_tv_usec</a></td></tr>
+<tr class="separator:acf8b8c0480064a16325f94f155db4e1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="a8c0bfa9026d4b23b598f0652aa975fcf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t pal_timeVal::pal_tv_sec</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acf8b8c0480064a16325f94f155db4e1c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t pal_timeVal::pal_tv_usec</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>seconds </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/<a class="el" href="../../d9/d17/pal__network_8h_source.html">pal_network.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/df/d0d/struct__pal_image_header_deails__t.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: _palImageHeaderDeails_t Struct Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="../../functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">_palImageHeaderDeails_t Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="../../dd/df9/pal__update_8h_source.html">pal_update.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a5fcb0398af2a70c3e4fc9fa64afb77ba"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d0d/struct__pal_image_header_deails__t.html#a5fcb0398af2a70c3e4fc9fa64afb77ba">imageSize</a></td></tr>
+<tr class="separator:a5fcb0398af2a70c3e4fc9fa64afb77ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afee39a7c86a46bf1f9de53284380869e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d0d/struct__pal_image_header_deails__t.html#afee39a7c86a46bf1f9de53284380869e">hash</a></td></tr>
+<tr class="separator:afee39a7c86a46bf1f9de53284380869e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a734411a639c41d6dc4b4252a006b134f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d0d/struct__pal_image_header_deails__t.html#a734411a639c41d6dc4b4252a006b134f">version</a></td></tr>
+<tr class="separator:a734411a639c41d6dc4b4252a006b134f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="afee39a7c86a46bf1f9de53284380869e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> _palImageHeaderDeails_t::hash</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5fcb0398af2a70c3e4fc9fa64afb77ba"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">size_t _palImageHeaderDeails_t::imageSize</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a734411a639c41d6dc4b4252a006b134f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="../../d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">palBuffer_t</a> _palImageHeaderDeails_t::version</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/<a class="el" href="../../dd/df9/pal__update_8h_source.html">pal_update.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,273 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest/pal_rtos_test_main_mbedOS.cpp File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_rtos_test_main_mbedOS.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;mbed.h&quot;</code><br />
+<code>#include &quot;rtos.h&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a6b71ffd718e2af00cebeb05560b44be7"><td class="memItemLeft" align="right" valign="top">DigitalOut&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7">led1</a> (LED1)</td></tr>
+<tr class="separator:a6b71ffd718e2af00cebeb05560b44be7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5543796fae8f0c3d5bfbd33f2389cb8"><td class="memItemLeft" align="right" valign="top">InterruptIn&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8">sw2</a> (SW2)</td></tr>
+<tr class="separator:af5543796fae8f0c3d5bfbd33f2389cb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21e1e181f00d9dc8dbb912650459bfde"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde">sw2_press</a> (void)</td></tr>
+<tr class="separator:a21e1e181f00d9dc8dbb912650459bfde"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a602cc5fb415f60615dbfa0643b3b3e26"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26">led_thread</a> (void const *argument)</td></tr>
+<tr class="separator:a602cc5fb415f60615dbfa0643b3b3e26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe6a59684384290b7f8710db5203944a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a">button_thread</a> (void const *argument)</td></tr>
+<tr class="separator:afe6a59684384290b7f8710db5203944a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58ec279183697abbd5d3efea3442d4e5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">UnityMain</a> (int argc, const char *argv[], void(*runAllTests)(void))</td></tr>
+<tr class="separator:a58ec279183697abbd5d3efea3442d4e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e9aa39842df82b3f5086f3215cc74fc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc">TEST_pal_rtos_GROUP_RUNNER</a> (void)</td></tr>
+<tr class="separator:a9e9aa39842df82b3f5086f3215cc74fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0f2228420376f4db7e1274f2b41667c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">main</a> (int argc, const char *argv[])</td></tr>
+<tr class="separator:ac0f2228420376f4db7e1274f2b41667c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:ae8697e1a75bad4a53dd6d6ec81e486cb"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">button_pressed</a></td></tr>
+<tr class="separator:ae8697e1a75bad4a53dd6d6ec81e486cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d37e93ff0246ad7bf396650eaf84487"><td class="memItemLeft" align="right" valign="top">Thread *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487">thread2</a></td></tr>
+<tr class="separator:a7d37e93ff0246ad7bf396650eaf84487"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="afe6a59684384290b7f8710db5203944a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void button_thread </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6b71ffd718e2af00cebeb05560b44be7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">DigitalOut led1 </td>
+          <td>(</td>
+          <td class="paramtype">LED1&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a602cc5fb415f60615dbfa0643b3b3e26"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void led_thread </td>
+          <td>(</td>
+          <td class="paramtype">void const *&#160;</td>
+          <td class="paramname"><em>argument</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac0f2228420376f4db7e1274f2b41667c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[]&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af5543796fae8f0c3d5bfbd33f2389cb8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">InterruptIn sw2 </td>
+          <td>(</td>
+          <td class="paramtype">SW2&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a21e1e181f00d9dc8dbb912650459bfde"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void sw2_press </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9e9aa39842df82b3f5086f3215cc74fc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void TEST_pal_rtos_GROUP_RUNNER </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a58ec279183697abbd5d3efea3442d4e5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int UnityMain </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>argc</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>argv</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(void)&#160;</td>
+          <td class="paramname"><em>runAllTests</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="ae8697e1a75bad4a53dd6d6ec81e486cb"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t button_pressed</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7d37e93ff0246ad7bf396650eaf84487"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">Thread* thread2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/df/d2a/pal__socket__test__utils_8h.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Common/pal_socket_test_utils.h File Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_f8e9a069a0807d5f7341f9bc5892e16f.html">Common</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_socket_test_utils.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a href="../../df/d2a/pal__socket__test__utils_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a5e4a39a385159acfd150a2e6098351cf"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d2a/pal__socket__test__utils_8h.html#a5e4a39a385159acfd150a2e6098351cf">palTestGetNetWorkInterfaceContext</a> ()</td></tr>
+<tr class="separator:a5e4a39a385159acfd150a2e6098351cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a5e4a39a385159acfd150a2e6098351cf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* palTestGetNetWorkInterfaceContext </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/df/d2a/pal__socket__test__utils_8h_source.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Common/pal_socket_test_utils.h Source File</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../files.html"><span>File&#160;List</span></a></li>
+      <li><a href="../../globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="../../dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="../../dir_f8e9a069a0807d5f7341f9bc5892e16f.html">Common</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">pal_socket_test_utils.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="../../df/d2a/pal__socket__test__utils_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">* Copyright (c) 2016 ARM Limited. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">* SPDX-License-Identifier: Apache-2.0</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">* Licensed under the Apache License, Version 2.0 (the License); you may</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">* not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">* distributed under the License is distributed on an AS IS BASIS, WITHOUT</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef _PAL_SOCKET_TEST_UTILS_H</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define _PAL_SOCKET_TEST_UTILS_H</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keywordtype">void</span>* <a class="code" href="../../df/d2a/pal__socket__test__utils_8h.html#a5e4a39a385159acfd150a2e6098351cf">palTestGetNetWorkInterfaceContext</a>();</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;}</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#endif //_PAL_SOCKET_TEST_UTILS_H</span></div><div class="ttc" id="pal__socket__test__utils_8h_html_a5e4a39a385159acfd150a2e6098351cf"><div class="ttname"><a href="../../df/d2a/pal__socket__test__utils_8h.html#a5e4a39a385159acfd150a2e6098351cf">palTestGetNetWorkInterfaceContext</a></div><div class="ttdeci">void * palTestGetNetWorkInterfaceContext()</div><div class="ttdef"><b>Definition:</b> pal_socket_test_utils.cpp:25</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/df/d48/structpal__thread_local_store.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: pal_threadLocalStore Struct Reference</title>
+<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="../../jquery.js"></script>
+<script type="text/javascript" src="../../dynsections.js"></script>
+<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="../../index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="../../annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="../../classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="../../functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">pal_threadLocalStore Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="../../d4/d01/pal__rtos_8h_source.html">pal_rtos.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:abe68dca8335fc1c9e6da5359117625bc"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../df/d48/structpal__thread_local_store.html#abe68dca8335fc1c9e6da5359117625bc">storeData</a></td></tr>
+<tr class="separator:abe68dca8335fc1c9e6da5359117625bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Thread priority levels for PAL threads - each thread must have a different priority Thread Local Store struct. Can be used to hold: State, configurations and etc inside the thread. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="abe68dca8335fc1c9e6da5359117625bc"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* pal_threadLocalStore::storeData</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API/<a class="el" href="../../d4/d01/pal__rtos_8h_source.html">pal_rtos.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="../../doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_0a6b9d10733e8fa4306fa781def1f127.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Modules/RTOS Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="dir_5097254b22164c5ad71a4eec719a72ee.html">Modules</a></li><li class="navelem"><a class="el" href="dir_0a6b9d10733e8fa4306fa781def1f127.html">RTOS</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">RTOS Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:de/d33/pal__rtos_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="de/d33/pal__rtos_8c.html">pal_rtos.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_0bf78cffa0901bd3b5cb7be7888aabc9.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Port Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_21bbc5adf7d2637a4cb8a3cee979c96f"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_21bbc5adf7d2637a4cb8a3cee979c96f.html">Platform-API</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_c08386f3c1aee312ced83a5951d11ed6"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_13f791b89962c34a017839eda04eb72e.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl/FreeRTOS/Networking/LWIP Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li><li class="navelem"><a class="el" href="dir_352f9dac526e52874364d2b56bbb5ef5.html">FreeRTOS</a></li><li class="navelem"><a class="el" href="dir_1c5e63936b3e43504237da8820a7bc34.html">Networking</a></li><li class="navelem"><a class="el" href="dir_13f791b89962c34a017839eda04eb72e.html">LWIP</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">LWIP Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:dc/d89/pal__plat__socket__lwip_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dc/d89/pal__plat__socket__lwip_8cpp.html">pal_plat_socket_lwip.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_1460475e8e667d8c97e1be97dbcd2231.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl/mbedOS/RTOS Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li><li class="navelem"><a class="el" href="dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html">mbedOS</a></li><li class="navelem"><a class="el" href="dir_1460475e8e667d8c97e1be97dbcd2231.html">RTOS</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">RTOS Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:d4/dc5/pal__plat__rtos_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d4/dc5/pal__plat__rtos_8c.html">pal_plat_rtos.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_18cc01a76aedd55acdee1b7ef37dd546.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Services-API Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Services-API Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:d9/d16/pal_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d9/d16/pal_8h.html">pal.h</a> <a href="d9/d16/pal_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:d2/d87/pal__configuration_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d2/d87/pal__configuration_8h.html">pal_configuration.h</a> <a href="d2/d87/pal__configuration_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:da/dfe/pal__errors_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="da/dfe/pal__errors_8h.html">pal_errors.h</a> <a href="da/dfe/pal__errors_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:db/dcf/pal__macros_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="db/dcf/pal__macros_8h.html">pal_macros.h</a> <a href="db/dcf/pal__macros_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:d9/d17/pal__network_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d9/d17/pal__network_8h.html">pal_network.h</a> <a href="d9/d17/pal__network_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:d4/d01/pal__rtos_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d4/d01/pal__rtos_8h.html">pal_rtos.h</a> <a href="d4/d01/pal__rtos_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:d6/dc2/pal__types_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d6/dc2/pal__types_8h.html">pal_types.h</a> <a href="d6/dc2/pal__types_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_1c5e63936b3e43504237da8820a7bc34.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl/FreeRTOS/Networking Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li><li class="navelem"><a class="el" href="dir_352f9dac526e52874364d2b56bbb5ef5.html">FreeRTOS</a></li><li class="navelem"><a class="el" href="dir_1c5e63936b3e43504237da8820a7bc34.html">Networking</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Networking Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_13f791b89962c34a017839eda04eb72e"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_13f791b89962c34a017839eda04eb72e.html">LWIP</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_21bbc5adf7d2637a4cb8a3cee979c96f.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Platform-API Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="dir_21bbc5adf7d2637a4cb8a3cee979c96f.html">Platform-API</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Platform-API Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:d9/d2c/pal__plat__network_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d9/d2c/pal__plat__network_8h.html">pal_plat_network.h</a> <a href="d9/d2c/pal__plat__network_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:d5/d59/pal__plat__rtos_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d5/d59/pal__plat__rtos_8h.html">pal_plat_rtos.h</a> <a href="d5/d59/pal__plat__rtos_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_352f9dac526e52874364d2b56bbb5ef5.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl/FreeRTOS Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li><li class="navelem"><a class="el" href="dir_352f9dac526e52874364d2b56bbb5ef5.html">FreeRTOS</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">FreeRTOS Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_1c5e63936b3e43504237da8820a7bc34"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_1c5e63936b3e43504237da8820a7bc34.html">Networking</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_37618a71d99bdfed5979e976980d5eec.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Test Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_f8e9a069a0807d5f7341f9bc5892e16f"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_f8e9a069a0807d5f7341f9bc5892e16f.html">Common</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_b922272f3c09a4cbb928a2f2eda5adf8"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_5097254b22164c5ad71a4eec719a72ee.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Modules Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="dir_5097254b22164c5ad71a4eec719a72ee.html">Modules</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Modules Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_59e3d70b06141856a554dd7aab1293ae"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_59e3d70b06141856a554dd7aab1293ae.html">Networking</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_0a6b9d10733e8fa4306fa781def1f127"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0a6b9d10733e8fa4306fa781def1f127.html">RTOS</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_59e3d70b06141856a554dd7aab1293ae.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Modules/Networking Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="dir_5097254b22164c5ad71a4eec719a72ee.html">Modules</a></li><li class="navelem"><a class="el" href="dir_59e3d70b06141856a554dd7aab1293ae.html">Networking</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Networking Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:d1/dc4/pal__network_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d1/dc4/pal__network_8c.html">pal_network.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_5b516ef453fd36a0929ce414690fe335.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/BUILD_FreeRTOS Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="dir_5b516ef453fd36a0929ce414690fe335.html">BUILD_FreeRTOS</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">BUILD_FreeRTOS Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:de/d33/_free_r_t_o_s_config_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="de/d33/_free_r_t_o_s_config_8h.html">FreeRTOSConfig.h</a> <a href="de/d33/_free_r_t_o_s_config_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_74389ed8173ad57b461b9d623a1f3867.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Source Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_8a9a67948239eaee56ff05ba80ad2d3c"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_0bf78cffa0901bd3b5cb7be7888aabc9"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl/mbedOS Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li><li class="navelem"><a class="el" href="dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html">mbedOS</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">mbedOS Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_ddf5611ee10e8b15ebe1664d2c043f4e"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_ddf5611ee10e8b15ebe1664d2c043f4e.html">Networking</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_1460475e8e667d8c97e1be97dbcd2231"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_1460475e8e667d8c97e1be97dbcd2231.html">RTOS</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_8a9a67948239eaee56ff05ba80ad2d3c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,74 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">PAL-Impl Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_5097254b22164c5ad71a4eec719a72ee"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_5097254b22164c5ad71a4eec719a72ee.html">Modules</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_18cc01a76aedd55acdee1b7ef37dd546"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_18cc01a76aedd55acdee1b7ef37dd546.html">Services-API</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:d7/d66/pal__init_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d7/d66/pal__init_8c.html">pal_init.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_a9ff65e3f848f462604f5439bae27718.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/PAL-Impl/Modules/Update Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_8a9a67948239eaee56ff05ba80ad2d3c.html">PAL-Impl</a></li><li class="navelem"><a class="el" href="dir_5097254b22164c5ad71a4eec719a72ee.html">Modules</a></li><li class="navelem"><a class="el" href="dir_a9ff65e3f848f462604f5439bae27718.html">Update</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Update Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:da/da9/pal__update_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="da/da9/pal__update_8c.html">pal_update.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_b922272f3c09a4cbb928a2f2eda5adf8.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Unitest Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="dir_b922272f3c09a4cbb928a2f2eda5adf8.html">Unitest</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Unitest Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:d5/de2/pal__all__test_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d5/de2/pal__all__test_8c.html">pal_all_test.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dd/d30/pal__all__test__main__mbed_o_s_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html">pal_all_test_main_mbedOS.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:d3/dab/pal__all__test__runner_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d3/dab/pal__all__test__runner_8c.html">pal_all_test_runner.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:da/d2d/pal__rtos__test_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="da/d2d/pal__rtos__test_8c.html">pal_rtos_test.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:df/d12/pal__rtos__test__main__mbed_o_s_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html">pal_rtos_test_main_mbedOS.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dd/df6/pal__rtos__test__runner_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dd/df6/pal__rtos__test__runner_8c.html">pal_rtos_test_runner.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:d5/d2a/pal__socket__test_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d5/d2a/pal__socket__test_8c.html">pal_socket_test.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:d9/dc0/pal__socket__test__main__mbed_o_s_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html">pal_socket_test_main_mbedOS.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dc/da5/pal__socket__test__runner_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dc/da5/pal__socket__test__runner_8c.html">pal_socket_test_runner.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_c08386f3c1aee312ced83a5951d11ed6.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Reference-Impl Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_7b7fa73f1a1b36d6dab78f50bb89ca7b"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html">mbedOS</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_ddf5611ee10e8b15ebe1664d2c043f4e.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl/mbedOS/Networking Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li><li class="navelem"><a class="el" href="dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html">mbedOS</a></li><li class="navelem"><a class="el" href="dir_ddf5611ee10e8b15ebe1664d2c043f4e.html">Networking</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Networking Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:d3/dfb/pal__plat__network_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d3/dfb/pal__plat__network_8cpp.html">pal_plat_network.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_e0c4a7f8a7dec467104a1fe0064ec60f.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Source/Port/Reference-Impl/mbedOS/Update Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html">Source</a></li><li class="navelem"><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html">Port</a></li><li class="navelem"><a class="el" href="dir_c08386f3c1aee312ced83a5951d11ed6.html">Reference-Impl</a></li><li class="navelem"><a class="el" href="dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html">mbedOS</a></li><li class="navelem"><a class="el" href="dir_e0c4a7f8a7dec467104a1fe0064ec60f.html">Update</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Update Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:d3/d44/pal__plat__update_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d3/d44/pal__plat__update_8cpp.html">pal_plat_update.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dir_f8e9a069a0807d5f7341f9bc5892e16f.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: C:/work/PAL/zolFull/mbed-client-pal/Test/Common Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_37618a71d99bdfed5979e976980d5eec.html">Test</a></li><li class="navelem"><a class="el" href="dir_f8e9a069a0807d5f7341f9bc5892e16f.html">Common</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Common Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:d1/dee/pal__rtos__test__utils_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d1/dee/pal__rtos__test__utils_8c.html">pal_rtos_test_utils.c</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:d9/d28/pal__rtos__test__utils_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d9/d28/pal__rtos__test__utils_8h.html">pal_rtos_test_utils.h</a> <a href="d9/d28/pal__rtos__test__utils_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:d8/d5f/pal__socket__test__utils_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d8/d5f/pal__socket__test__utils_8cpp.html">pal_socket_test_utils.cpp</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:df/d2a/pal__socket__test__utils_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="df/d2a/pal__socket__test__utils_8h.html">pal_socket_test_utils.h</a> <a href="df/d2a/pal__socket__test__utils_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:d0/d51/pal__test__utils_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="d0/d51/pal__test__utils_8h.html">pal_test_utils.h</a> <a href="d0/d51/pal__test__utils_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
Binary file pal/Docs/html/doc.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/doxygen.css	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1475 @@
+/* The standard CSS for doxygen 1.8.11 */
+
+body, table, div, p, dl {
+	font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+	font-size: 150%;
+}
+
+.title {
+	font: 400 14px/28px Roboto,sans-serif;
+	font-size: 150%;
+	font-weight: bold;
+	margin: 10px 2px;
+}
+
+h2.groupheader {
+	border-bottom: 1px solid #879ECB;
+	color: #354C7B;
+	font-size: 150%;
+	font-weight: normal;
+	margin-top: 1.75em;
+	padding-top: 8px;
+	padding-bottom: 4px;
+	width: 100%;
+}
+
+h3.groupheader {
+	font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px cyan;
+}
+
+dt {
+	font-weight: bold;
+}
+
+div.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+	margin-top: 2px;
+}
+
+p.starttd {
+	margin-top: 0px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+}
+
+div.qindex, div.navpath {
+	width: 100%;
+	line-height: 140%;
+}
+
+div.navtab {
+	margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+	color: #3D578C;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #4665A2;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.qindex {
+	font-weight: bold;
+}
+
+a.qindexHL {
+	font-weight: bold;
+	background-color: #9CAFD4;
+	color: #ffffff;
+	border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+        color: #ffffff;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+	color: #4665A2; 
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+	color: #4665A2; 
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+	background-color: #FBFCFD;
+	border: 1px solid #C4CFE5;
+}
+
+div.line {
+	font-family: monospace, fixed;
+        font-size: 13px;
+	min-height: 13px;
+	line-height: 1.0;
+	text-wrap: unrestricted;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -53px;
+	padding-left: 53px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+div.line:after {
+    content:"\000A";
+    white-space: pre;
+}
+
+div.line.glow {
+	background-color: cyan;
+	box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+	padding-right: 4px;
+	text-align: right;
+	border-right: 2px solid #0F0;
+	background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+	background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+	background-color: #C8C8C8;
+}
+
+div.ah, span.ah {
+	background-color: black;
+	font-weight: bold;
+	color: #ffffff;
+	margin-bottom: 3px;
+	margin-top: 3px;
+	padding: 0.2em;
+	border: solid thin #333;
+	border-radius: 0.5em;
+	-webkit-border-radius: .5em;
+	-moz-border-radius: .5em;
+	box-shadow: 2px 2px 3px #999;
+	-webkit-box-shadow: 2px 2px 3px #999;
+	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+        list-style: none;
+        padding-left: 0;
+}
+
+div.classindex span.ai {
+        display: inline-block;
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	background-color: white;
+	color: black;
+        margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 8px;
+}
+
+td.indexkey {
+	background-color: #EBEFF6;
+	font-weight: bold;
+	border: 1px solid #C4CFE5;
+	margin: 2px 0px 2px 0;
+	padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
+}
+
+td.indexvalue {
+	background-color: #EBEFF6;
+	border: 1px solid #C4CFE5;
+	padding: 2px 10px;
+	margin: 2px 0px;
+}
+
+tr.memlist {
+	background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.formulaDsp {
+	
+}
+
+img.formulaInl {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000
+}
+
+span.keywordtype {
+	color: #604020
+}
+
+span.keywordflow {
+	color: #e08000
+}
+
+span.comment {
+	color: #800000
+}
+
+span.preprocessor {
+	color: #806020
+}
+
+span.stringliteral {
+	color: #002080
+}
+
+span.charliteral {
+	color: #008080
+}
+
+span.vhdldigit { 
+	color: #ff00ff 
+}
+
+span.vhdlchar { 
+	color: #000000 
+}
+
+span.vhdlkeyword { 
+	color: #700070 
+}
+
+span.vhdllogic { 
+	color: #ff0000 
+}
+
+blockquote {
+        background-color: #F7F8FB;
+        border-left: 2px solid #9CAFD4;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+	color: #003399;
+	font-weight: bold;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+	background: #EBEFF6;
+	font-weight: bold;
+}
+
+hr {
+	height: 0px;
+	border: none;
+	border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+	background-color: cyan;
+	box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: #F9FAFC;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memItemRight {
+	width: 100%;
+}
+
+.memTemplParams {
+	color: #4665A2;
+        white-space: nowrap;
+	font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+	font-size: 80%;
+	color: #4665A2;
+	font-weight: normal;
+	margin-left: 9px;
+}
+
+.memnav {
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+
+.mempage {
+	width: 100%;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+	margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+        font-weight: bold;
+        margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid #A8B8D9;
+        border-left: 1px solid #A8B8D9;
+        border-right: 1px solid #A8B8D9;
+        padding: 6px 0px 6px 0px;
+        color: #253555;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 4px;
+        -moz-border-radius-topleft: 4px;
+        /* webkit specific markup */
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 4px;
+        -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+        border-bottom: 1px solid #A8B8D9;      
+        border-left: 1px solid #A8B8D9;      
+        border-right: 1px solid #A8B8D9; 
+        padding: 6px 10px 2px 10px;
+        background-color: #FBFCFD;
+        border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
+        /* opera specific markup */
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+        padding: 5px;
+}
+
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+}
+
+.paramname {
+	color: #602020;
+	white-space: nowrap;
+}
+.paramname em {
+	font-style: normal;
+}
+.paramname code {
+        line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+        margin-left: 0px;
+        padding-left: 0px;
+}       
+
+.params .paramname, .retval .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
+
+table.mlabels {
+	border-spacing: 0px;
+}
+
+td.mlabels-left {
+	width: 100%;
+	padding: 0px;
+}
+
+td.mlabels-right {
+	vertical-align: bottom;
+	padding: 0px;
+	white-space: nowrap;
+}
+
+span.mlabels {
+        margin-left: 8px;
+}
+
+span.mlabel {
+        background-color: #728DC1;
+        border-top:1px solid #5373B4;
+        border-left:1px solid #5373B4;
+        border-right:1px solid #C4CFE5;
+        border-bottom:1px solid #C4CFE5;
+	text-shadow: none;
+	color: white;
+	margin-right: 4px;
+	padding: 2px 3px;
+	border-radius: 3px;
+	font-size: 7pt;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid #9CAFD4;
+        border-bottom: 1px solid #9CAFD4;
+        width: 100%;
+}
+
+.directory table {
+        border-collapse:collapse;
+}
+
+.directory td {
+        margin: 0px;
+        padding: 0px;
+	vertical-align: top;
+}
+
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
+	padding-top: 3px;
+}
+
+.directory td.entry a {
+        outline:none;
+}
+
+.directory td.entry a img {
+        border: none;
+}
+
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 3px;
+	border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+	padding-left: 6px;
+	background-color: #F7F8FB;
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
+}
+
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+	color: #3D578C;
+}
+
+.arrow {
+    color: #9CAFD4;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: pointer;
+    font-size: 80%;
+    display: inline-block;
+    width: 16px;
+    height: 22px;
+}
+
+.icon {
+    font-family: Arial, Helvetica;
+    font-weight: bold;
+    font-size: 12px;
+    height: 14px;
+    width: 16px;
+    display: inline-block;
+    background-color: #728DC1;
+    color: white;
+    text-align: center;
+    border-radius: 4px;
+    margin-left: 2px;
+    margin-right: 2px;
+}
+
+.icona {
+    width: 24px;
+    height: 22px;
+    display: inline-block;
+}
+
+.iconfopen {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderopen.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.iconfclosed {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('folderclosed.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+.icondoc {
+    width: 24px;
+    height: 18px;
+    margin-bottom: 4px;
+    background-image:url('doc.png');
+    background-position: 0px -4px;
+    background-repeat: repeat-y;
+    vertical-align:top;
+    display: inline-block;
+}
+
+table.directory {
+    font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+        margin-top: 8px;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+address {
+	font-style: normal;
+	color: #2A3D61;
+}
+
+table.doxtable caption {
+	caption-side: top;
+}
+
+table.doxtable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+table.fieldtable {
+        /*width: 100%;*/
+        margin-bottom: 10px;
+        border: 1px solid #A8B8D9;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+        padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid #A8B8D9;
+        /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+        margin-top: 0px;
+}       
+        
+.fieldtable td.fielddoc p:last-child {
+        margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        font-size: 90%;
+        color: #253555;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+	top: 0px;
+	left: 10px;
+	height: 36px;
+	background-image: url('tab_b.png');
+	z-index: 101;
+	overflow: hidden;
+	font-size: 13px;
+}
+
+.navpath ul
+{
+	font-size: 11px;
+	background-image:url('tab_b.png');
+	background-repeat:repeat-x;
+	background-position: 0 -5px;
+	height:30px;
+	line-height:30px;
+	color:#8AA0CC;
+	border:solid 1px #C2CDE4;
+	overflow:hidden;
+	margin:0px;
+	padding:0px;
+}
+
+.navpath li
+{
+	list-style-type:none;
+	float:left;
+	padding-left:10px;
+	padding-right:15px;
+	background-image:url('bc_s.png');
+	background-repeat:no-repeat;
+	background-position:right;
+	color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+	height:32px;
+	display:block;
+	text-decoration: none;
+	outline: none;
+	color: #283A5D;
+	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+	text-decoration: none;        
+}
+
+.navpath li.navelem a:hover
+{
+	color:#6884BD;
+}
+
+.navpath li.footer
+{
+        list-style-type:none;
+        float:right;
+        padding-left:10px;
+        padding-right:15px;
+        background-image:none;
+        background-repeat:no-repeat;
+        background-position:right;
+        color:#364D7C;
+        font-size: 8pt;
+}
+
+
+div.summary
+{
+	float: right;
+	font-size: 8pt;
+	padding-right: 5px;
+	width: 50%;
+	text-align: right;
+}       
+
+div.summary a
+{
+	white-space: nowrap;
+}
+
+table.classindex
+{
+        margin: 10px;
+        white-space: nowrap;
+        margin-left: 3%;
+        margin-right: 3%;
+        width: 94%;
+        border: 0;
+        border-spacing: 0; 
+        padding: 0;
+}
+
+div.ingroups
+{
+	font-size: 8pt;
+	width: 50%;
+	text-align: left;
+}
+
+div.ingroups a
+{
+	white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+	background-color: #F9FAFC;
+	margin:  0px;
+	border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+	padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+        padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+	margin-left: 0px;
+	padding-left: 0px;
+}
+
+dl.note
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00D000;
+}
+
+dl.deprecated
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #505050;
+}
+
+dl.todo
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00C0E0;
+}
+
+dl.test
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #3030E0;
+}
+
+dl.bug
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #C08050;
+}
+
+dl.section dd {
+	margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+	text-align: center;
+	vertical-align: bottom;
+	border-collapse: separate;
+}
+ 
+#projectlogo img
+{ 
+	border: 0px none;
+}
+ 
+#projectalign
+{
+        vertical-align: middle;
+}
+
+#projectname
+{
+	font: 300% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 2px 0px;
+}
+    
+#projectbrief
+{
+	font: 120% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#projectnumber
+{
+	font: 50% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#titlearea
+{
+	padding: 0px;
+	margin: 0px;
+	width: 100%;
+	border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+        text-align: center;
+}
+
+.dotgraph
+{
+        text-align: center;
+}
+
+.mscgraph
+{
+        text-align: center;
+}
+
+.diagraph
+{
+        text-align: center;
+}
+
+.caption
+{
+	font-weight: bold;
+}
+
+div.zoom
+{
+	border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:#334975;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+}
+
+dl.citelist dd {
+        margin:2px 0;
+        padding:5px 0;
+}
+
+div.toc {
+        padding: 14px 25px;
+        background-color: #F4F6FA;
+        border: 1px solid #D8DFEE;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 8px 10px 10px;
+        width: 200px;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+	color: #4665A2;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+        position: absolute;
+        display: none;
+}
+
+#powerTip {
+	cursor: default;
+	white-space: nowrap;
+	background-color: white;
+	border: 1px solid gray;
+	border-radius: 4px 4px 4px 4px;
+	box-shadow: 1px 1px 7px gray;
+	display: none;
+	font-size: smaller;
+	max-width: 80%;
+	opacity: 0.9;
+	padding: 1ex 1em 1em;
+	position: absolute;
+	z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+        color: grey;
+	font-style: italic;
+}
+
+#powerTip div.ttname a {
+        font-weight: bold;
+}
+
+#powerTip div.ttname {
+        font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+        color: #006318;
+}
+
+#powerTip div {
+        margin: 0px;
+        padding: 0px;
+        font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+	content: "";
+	position: absolute;
+	margin: 0px;
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.w:after,  #powerTip.w:before,
+#powerTip.e:after,  #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	border: solid transparent;
+	content: " ";
+	height: 0;
+	width: 0;
+	position: absolute;
+}
+
+#powerTip.n:after,  #powerTip.s:after,
+#powerTip.w:after,  #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+	border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before,  #powerTip.s:before,
+#powerTip.w:before,  #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+	border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after,  #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+	top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+	border-top-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+#powerTip.n:before {
+	border-top-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+	left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+	right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+	left: 14px;
+}
+
+#powerTip.s:after,  #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+	bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+	border-bottom-color: #ffffff;
+	border-width: 10px;
+	margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+	border-bottom-color: #808080;
+	border-width: 11px;
+	margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+	left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+	right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+	left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+	left: 100%;
+}
+#powerTip.e:after {
+	border-left-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.e:before {
+	border-left-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+	right: 100%;
+}
+#powerTip.w:after {
+	border-right-color: #ffffff;
+	border-width: 10px;
+	top: 50%;
+	margin-top: -10px;
+}
+#powerTip.w:before {
+	border-right-color: #808080;
+	border-width: 11px;
+	top: 50%;
+	margin-top: -11px;
+}
+
+@media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+
Binary file pal/Docs/html/doxygen.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/dynsections.js	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,97 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ } 
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function() {
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+      a.html('&#9660;');
+      $(this).show();
+    } else if (l==level+1) {
+      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+      a.html('&#9658;');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+
+function toggleFolder(id)
+{
+  // the clicked row
+  var currentRow = $('#row_'+id);
+
+  // all rows after the clicked row
+  var rows = currentRow.nextAll("tr");
+
+  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+  // only match elements AFTER this one (can't hide elements before)
+  var childRows = rows.filter(function() { return this.id.match(re); });
+
+  // first row is visible we are HIDING
+  if (childRows.filter(':first').is(':visible')===true) {
+    // replace down arrow by right arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    currentRowSpans.filter(".arrow").html('&#9658;');
+    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+  } else { // we are SHOWING
+    // replace right arrow by down arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+    currentRowSpans.filter(".arrow").html('&#9660;');
+    // replace down arrows by right arrows for child rows
+    var childRowsSpans = childRows.find("span");
+    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    childRowsSpans.filter(".arrow").html('&#9658;');
+    childRows.show(); //show all children
+  }
+  updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/files.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">File List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span><span onclick="javascript:toggleLevel(5);">5</span><span onclick="javascript:toggleLevel(6);">6</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_74389ed8173ad57b461b9d623a1f3867.html" target="_self">Source</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span id="img_0_0_" class="iconfopen" onclick="toggleFolder('0_0_')">&#160;</span><a class="el" href="dir_8a9a67948239eaee56ff05ba80ad2d3c.html" target="_self">PAL-Impl</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">&#9660;</span><span id="img_0_0_0_" class="iconfopen" onclick="toggleFolder('0_0_0_')">&#160;</span><a class="el" href="dir_5097254b22164c5ad71a4eec719a72ee.html" target="_self">Modules</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_0_')">&#9660;</span><span id="img_0_0_0_0_" class="iconfopen" onclick="toggleFolder('0_0_0_0_')">&#160;</span><a class="el" href="dir_59e3d70b06141856a554dd7aab1293ae.html" target="_self">Networking</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_0_0_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="d1/dc4/pal__network_8c.html" target="_self">pal_network.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_0_0_1_" class="arrow" onclick="toggleFolder('0_0_0_1_')">&#9660;</span><span id="img_0_0_0_1_" class="iconfopen" onclick="toggleFolder('0_0_0_1_')">&#160;</span><a class="el" href="dir_0a6b9d10733e8fa4306fa781def1f127.html" target="_self">RTOS</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_1_0_" class="even"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="de/d33/pal__rtos_8c.html" target="_self">pal_rtos.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_1_" class="arrow" onclick="toggleFolder('0_0_1_')">&#9660;</span><span id="img_0_0_1_" class="iconfopen" onclick="toggleFolder('0_0_1_')">&#160;</span><a class="el" href="dir_18cc01a76aedd55acdee1b7ef37dd546.html" target="_self">Services-API</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="d9/d16/pal_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d9/d16/pal_8h.html" target="_self">pal.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_1_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="d2/d87/pal__configuration_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d2/d87/pal__configuration_8h.html" target="_self">pal_configuration.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_2_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="da/dfe/pal__errors_8h_source.html"><span class="icondoc"></span></a><a class="el" href="da/dfe/pal__errors_8h.html" target="_self">pal_errors.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_3_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="db/dcf/pal__macros_8h_source.html"><span class="icondoc"></span></a><a class="el" href="db/dcf/pal__macros_8h.html" target="_self">pal_macros.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_4_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="d9/d17/pal__network_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d9/d17/pal__network_8h.html" target="_self">pal_network.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_5_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="d4/d01/pal__rtos_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d4/d01/pal__rtos_8h.html" target="_self">pal_rtos.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_6_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="d6/dc2/pal__types_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d6/dc2/pal__types_8h.html" target="_self">pal_types.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_2_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="d7/d66/pal__init_8c.html" target="_self">pal_init.c</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">&#9660;</span><span id="img_0_1_" class="iconfopen" onclick="toggleFolder('0_1_')">&#160;</span><a class="el" href="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html" target="_self">Port</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_0_" class="arrow" onclick="toggleFolder('0_1_0_')">&#9660;</span><span id="img_0_1_0_" class="iconfopen" onclick="toggleFolder('0_1_0_')">&#160;</span><a class="el" href="dir_21bbc5adf7d2637a4cb8a3cee979c96f.html" target="_self">Platform-API</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_0_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="d9/d2c/pal__plat__network_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d9/d2c/pal__plat__network_8h.html" target="_self">pal_plat_network.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_0_1_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="d5/d59/pal__plat__rtos_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d5/d59/pal__plat__rtos_8h.html" target="_self">pal_plat_rtos.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_1_1_" class="arrow" onclick="toggleFolder('0_1_1_')">&#9660;</span><span id="img_0_1_1_" class="iconfopen" onclick="toggleFolder('0_1_1_')">&#160;</span><a class="el" href="dir_c08386f3c1aee312ced83a5951d11ed6.html" target="_self">Reference-Impl</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_1_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_1_1_0_" class="arrow" onclick="toggleFolder('0_1_1_0_')">&#9660;</span><span id="img_0_1_1_0_" class="iconfopen" onclick="toggleFolder('0_1_1_0_')">&#160;</span><a class="el" href="dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html" target="_self">mbedOS</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_1_0_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span id="arr_0_1_1_0_0_" class="arrow" onclick="toggleFolder('0_1_1_0_0_')">&#9660;</span><span id="img_0_1_1_0_0_" class="iconfopen" onclick="toggleFolder('0_1_1_0_0_')">&#160;</span><a class="el" href="dir_ddf5611ee10e8b15ebe1664d2c043f4e.html" target="_self">Networking</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_1_0_0_0_"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="d3/dfb/pal__plat__network_8cpp.html" target="_self">pal_plat_network.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_1_0_1_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span id="arr_0_1_1_0_1_" class="arrow" onclick="toggleFolder('0_1_1_0_1_')">&#9660;</span><span id="img_0_1_1_0_1_" class="iconfopen" onclick="toggleFolder('0_1_1_0_1_')">&#160;</span><a class="el" href="dir_1460475e8e667d8c97e1be97dbcd2231.html" target="_self">RTOS</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_1_0_1_0_"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="d4/dc5/pal__plat__rtos_8c.html" target="_self">pal_plat_rtos.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')">&#160;</span><a class="el" href="dir_37618a71d99bdfed5979e976980d5eec.html" target="_self">Test</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_0_" class="arrow" onclick="toggleFolder('1_0_')">&#9660;</span><span id="img_1_0_" class="iconfopen" onclick="toggleFolder('1_0_')">&#160;</span><a class="el" href="dir_f8e9a069a0807d5f7341f9bc5892e16f.html" target="_self">Common</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="d1/dee/pal__rtos__test__utils_8c.html" target="_self">pal_rtos_test_utils.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="d9/d28/pal__rtos__test__utils_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d9/d28/pal__rtos__test__utils_8h.html" target="_self">pal_rtos_test_utils.h</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="d8/d5f/pal__socket__test__utils_8cpp.html" target="_self">pal_socket_test_utils.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_3_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="df/d2a/pal__socket__test__utils_8h_source.html"><span class="icondoc"></span></a><a class="el" href="df/d2a/pal__socket__test__utils_8h.html" target="_self">pal_socket_test_utils.h</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="d0/d51/pal__test__utils_8h_source.html"><span class="icondoc"></span></a><a class="el" href="d0/d51/pal__test__utils_8h.html" target="_self">pal_test_utils.h</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_1_" class="arrow" onclick="toggleFolder('1_1_')">&#9660;</span><span id="img_1_1_" class="iconfopen" onclick="toggleFolder('1_1_')">&#160;</span><a class="el" href="dir_b922272f3c09a4cbb928a2f2eda5adf8.html" target="_self">Unitest</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="d5/de2/pal__all__test_8c.html" target="_self">pal_all_test.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html" target="_self">pal_all_test_main_mbedOS.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="d3/dab/pal__all__test__runner_8c.html" target="_self">pal_all_test_runner.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_3_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="da/d2d/pal__rtos__test_8c.html" target="_self">pal_rtos_test.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html" target="_self">pal_rtos_test_main_mbedOS.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_5_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="dd/df6/pal__rtos__test__runner_8c.html" target="_self">pal_rtos_test_runner.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_6_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="d5/d2a/pal__socket__test_8c.html" target="_self">pal_socket_test.c</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_7_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html" target="_self">pal_socket_test_main_mbedOS.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_8_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="dc/da5/pal__socket__test__runner_8c.html" target="_self">pal_socket_test_runner.c</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
Binary file pal/Docs/html/folderclosed.png has changed
Binary file pal/Docs/html/folderopen.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/functions.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div><ul>
+<li>address
+: <a class="el" href="d9/d16/structpal_net_interface_info.html#affc930af87e8696f63b30b911cf8b03d">palNetInterfaceInfo</a>
+</li>
+<li>addressData
+: <a class="el" href="db/d42/structpal_socket_address.html#a0a5471b518ef60cfa0f28c47a323ec4c">palSocketAddress</a>
+</li>
+<li>addressSize
+: <a class="el" href="d9/d16/structpal_net_interface_info.html#a9b816dd947f25d303e32fca36d04080e">palNetInterfaceInfo</a>
+</li>
+<li>addressType
+: <a class="el" href="db/d42/structpal_socket_address.html#a8bdecffc9afacbdf84fc78d26090c221">palSocketAddress</a>
+</li>
+<li>arg1
+: <a class="el" href="d3/d30/structthreads_argument.html#a9532cb931dee4c326444e7c366019639">threadsArgument</a>
+</li>
+<li>arg2
+: <a class="el" href="d3/d30/structthreads_argument.html#acecc240150225e2786524a2e4b3adf78">threadsArgument</a>
+</li>
+<li>arg3
+: <a class="el" href="d3/d30/structthreads_argument.html#abcba9882b15e3845a7794220a5c9e4f4">threadsArgument</a>
+</li>
+<li>arg4
+: <a class="el" href="d3/d30/structthreads_argument.html#a6fad7cea38d81eb88f9ff01d4baec32a">threadsArgument</a>
+</li>
+<li>arg5
+: <a class="el" href="d3/d30/structthreads_argument.html#a2720a7d49d96277778f83a2488859fe9">threadsArgument</a>
+</li>
+<li>arg6
+: <a class="el" href="d3/d30/structthreads_argument.html#a460c4a55dba6130f386f648138184074">threadsArgument</a>
+</li>
+<li>arg7
+: <a class="el" href="d3/d30/structthreads_argument.html#a200c590896768ffb09f8d90c774f6b74">threadsArgument</a>
+</li>
+<li>buffer
+: <a class="el" href="d8/d19/struct__pal_buffer__t.html#a80fff022df87cf0d4817ae19eb8257bb">_palBuffer_t</a>
+, <a class="el" href="d2/dab/struct__pal_const_buffer__t.html#a3660dfb9336b8d57a3c2223de14646d3">_palConstBuffer_t</a>
+</li>
+<li>bufferLength
+: <a class="el" href="d8/d19/struct__pal_buffer__t.html#a7f87cfadd565637bee1de625d19f3d3a">_palBuffer_t</a>
+, <a class="el" href="d2/dab/struct__pal_const_buffer__t.html#a8d4966dc771ad87628b4bd01ae4ea801">_palConstBuffer_t</a>
+</li>
+<li>interfaceName
+: <a class="el" href="d9/d16/structpal_net_interface_info.html#ad028021cafddc5355dfccfac1345f4f6">palNetInterfaceInfo</a>
+</li>
+<li>maxBufferLength
+: <a class="el" href="d8/d19/struct__pal_buffer__t.html#a27cc969a96cc37cb772a3fd76dd860cd">_palBuffer_t</a>
+, <a class="el" href="d2/dab/struct__pal_const_buffer__t.html#ad411a35599e0f8500f29e5bd2cb66cc7">_palConstBuffer_t</a>
+</li>
+<li>pal_tv_sec
+: <a class="el" href="de/dfc/structpal__time_val.html#a8c0bfa9026d4b23b598f0652aa975fcf">pal_timeVal</a>
+</li>
+<li>pal_tv_usec
+: <a class="el" href="de/dfc/structpal__time_val.html#acf8b8c0480064a16325f94f155db4e1c">pal_timeVal</a>
+</li>
+<li>storeData
+: <a class="el" href="df/d48/structpal__thread_local_store.html#abe68dca8335fc1c9e6da5359117625bc">pal_threadLocalStore</a>
+</li>
+<li>ticksBeforeTimer
+: <a class="el" href="dc/d2c/structtimer_argument.html#a18bf51a6db87346257b34c24fefbd1b1">timerArgument</a>
+</li>
+<li>ticksInFunc1
+: <a class="el" href="dc/d2c/structtimer_argument.html#afe9607363a4b6ae7b835ef129743ec08">timerArgument</a>
+</li>
+<li>ticksInFunc2
+: <a class="el" href="dc/d2c/structtimer_argument.html#af9f23b828a589dfac13cad4cb6e7da34">timerArgument</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/functions_vars.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Data Fields - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;<ul>
+<li>address
+: <a class="el" href="d9/d16/structpal_net_interface_info.html#affc930af87e8696f63b30b911cf8b03d">palNetInterfaceInfo</a>
+</li>
+<li>addressData
+: <a class="el" href="db/d42/structpal_socket_address.html#a0a5471b518ef60cfa0f28c47a323ec4c">palSocketAddress</a>
+</li>
+<li>addressSize
+: <a class="el" href="d9/d16/structpal_net_interface_info.html#a9b816dd947f25d303e32fca36d04080e">palNetInterfaceInfo</a>
+</li>
+<li>addressType
+: <a class="el" href="db/d42/structpal_socket_address.html#a8bdecffc9afacbdf84fc78d26090c221">palSocketAddress</a>
+</li>
+<li>arg1
+: <a class="el" href="d3/d30/structthreads_argument.html#a9532cb931dee4c326444e7c366019639">threadsArgument</a>
+</li>
+<li>arg2
+: <a class="el" href="d3/d30/structthreads_argument.html#acecc240150225e2786524a2e4b3adf78">threadsArgument</a>
+</li>
+<li>arg3
+: <a class="el" href="d3/d30/structthreads_argument.html#abcba9882b15e3845a7794220a5c9e4f4">threadsArgument</a>
+</li>
+<li>arg4
+: <a class="el" href="d3/d30/structthreads_argument.html#a6fad7cea38d81eb88f9ff01d4baec32a">threadsArgument</a>
+</li>
+<li>arg5
+: <a class="el" href="d3/d30/structthreads_argument.html#a2720a7d49d96277778f83a2488859fe9">threadsArgument</a>
+</li>
+<li>arg6
+: <a class="el" href="d3/d30/structthreads_argument.html#a460c4a55dba6130f386f648138184074">threadsArgument</a>
+</li>
+<li>arg7
+: <a class="el" href="d3/d30/structthreads_argument.html#a200c590896768ffb09f8d90c774f6b74">threadsArgument</a>
+</li>
+<li>buffer
+: <a class="el" href="d8/d19/struct__pal_buffer__t.html#a80fff022df87cf0d4817ae19eb8257bb">_palBuffer_t</a>
+, <a class="el" href="d2/dab/struct__pal_const_buffer__t.html#a3660dfb9336b8d57a3c2223de14646d3">_palConstBuffer_t</a>
+</li>
+<li>bufferLength
+: <a class="el" href="d8/d19/struct__pal_buffer__t.html#a7f87cfadd565637bee1de625d19f3d3a">_palBuffer_t</a>
+, <a class="el" href="d2/dab/struct__pal_const_buffer__t.html#a8d4966dc771ad87628b4bd01ae4ea801">_palConstBuffer_t</a>
+</li>
+<li>interfaceName
+: <a class="el" href="d9/d16/structpal_net_interface_info.html#ad028021cafddc5355dfccfac1345f4f6">palNetInterfaceInfo</a>
+</li>
+<li>maxBufferLength
+: <a class="el" href="d8/d19/struct__pal_buffer__t.html#a27cc969a96cc37cb772a3fd76dd860cd">_palBuffer_t</a>
+, <a class="el" href="d2/dab/struct__pal_const_buffer__t.html#ad411a35599e0f8500f29e5bd2cb66cc7">_palConstBuffer_t</a>
+</li>
+<li>pal_tv_sec
+: <a class="el" href="de/dfc/structpal__time_val.html#a8c0bfa9026d4b23b598f0652aa975fcf">pal_timeVal</a>
+</li>
+<li>pal_tv_usec
+: <a class="el" href="de/dfc/structpal__time_val.html#acf8b8c0480064a16325f94f155db4e1c">pal_timeVal</a>
+</li>
+<li>storeData
+: <a class="el" href="df/d48/structpal__thread_local_store.html#abe68dca8335fc1c9e6da5359117625bc">pal_threadLocalStore</a>
+</li>
+<li>ticksBeforeTimer
+: <a class="el" href="dc/d2c/structtimer_argument.html#a18bf51a6db87346257b34c24fefbd1b1">timerArgument</a>
+</li>
+<li>ticksInFunc1
+: <a class="el" href="dc/d2c/structtimer_argument.html#afe9607363a4b6ae7b835ef129743ec08">timerArgument</a>
+</li>
+<li>ticksInFunc2
+: <a class="el" href="dc/d2c/structtimer_argument.html#af9f23b828a589dfac13cad4cb6e7da34">timerArgument</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>button_pressed
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+<li>button_thread()
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_a.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li class="current"><a href="globals_a.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_x.html#index_x"><span>x</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>APP_DEBUG_UART_BAUDRATE
+: <a class="el" href="d2/d3a/pal__rtos__test__main___free_r_t_o_s_8c.html#a37fa0e609ebaa8565ad388e41cc92a43">pal_rtos_test_main_FreeRTOS.c</a>
+, <a class="el" href="d6/d71/pal__socket__test__main___free_r_t_o_s_8c.html#a37fa0e609ebaa8565ad388e41cc92a43">pal_socket_test_main_FreeRTOS.c</a>
+</li>
+<li>APP_DEBUG_UART_CLKSRC_NAME
+: <a class="el" href="d2/d3a/pal__rtos__test__main___free_r_t_o_s_8c.html#a3b196c652283b89130c86ca7bd1559bc">pal_rtos_test_main_FreeRTOS.c</a>
+, <a class="el" href="d6/d71/pal__socket__test__main___free_r_t_o_s_8c.html#a3b196c652283b89130c86ca7bd1559bc">pal_socket_test_main_FreeRTOS.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_b.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li class="current"><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_x.html#index_x"><span>x</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>button_pressed
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">pal_rtos_test_main_mbedosClassic.cpp</a>
+, <a class="el" href="da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">pal_socket_test_main_mbedosClassic.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+<li>button_thread()
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_socket_test_main_mbedosClassic.cpp</a>
+, <a class="el" href="d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_rtos_test_main_mbedosClassic.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_c.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li class="current"><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_x.html#index_x"><span>x</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>configASSERT
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#adeb674dafd926ad4dd27b70ecdc41163">FreeRTOSConfig.h</a>
+</li>
+<li>configCHECK_FOR_STACK_OVERFLOW
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a847511ee433494b1e32c90602c967ae7">FreeRTOSConfig.h</a>
+</li>
+<li>configCPU_CLOCK_HZ
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#aa68082df879e6fc96bcb9b26513639e7">FreeRTOSConfig.h</a>
+</li>
+<li>configGENERATE_RUN_TIME_STATS
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#ad8081822f3ebc7c917b63bd7bdd7bc58">FreeRTOSConfig.h</a>
+</li>
+<li>configIDLE_SHOULD_YIELD
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#ad6a5061a742fee450ac455e4ad0f4b6c">FreeRTOSConfig.h</a>
+</li>
+<li>configKERNEL_INTERRUPT_PRIORITY
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#ac42cff506ad61d4174fa23e952e3225e">FreeRTOSConfig.h</a>
+</li>
+<li>configLIBRARY_LOWEST_INTERRUPT_PRIORITY
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a10da20f180ec9bd131b0052a802dbc39">FreeRTOSConfig.h</a>
+</li>
+<li>configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a2254bd235d882be3061bcad0b1e8be98">FreeRTOSConfig.h</a>
+</li>
+<li>configMAX_CO_ROUTINE_PRIORITIES
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#ae8f3fd645e6e78dfeb8a6e874af6195a">FreeRTOSConfig.h</a>
+</li>
+<li>configMAX_PRIORITIES
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a9a78f5ac61e6cb172dadf2a51f11db38">FreeRTOSConfig.h</a>
+</li>
+<li>configMAX_SYSCALL_INTERRUPT_PRIORITY
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a54bfc31c410ee452577a25a4552c3704">FreeRTOSConfig.h</a>
+</li>
+<li>configMAX_TASK_NAME_LEN
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#ac388dc4041aab6997348828eb27fc1a8">FreeRTOSConfig.h</a>
+</li>
+<li>configMINIMAL_STACK_SIZE
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a6c534a6cf8a00528fe0be42083484f9a">FreeRTOSConfig.h</a>
+</li>
+<li>configPRIO_BITS
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a5796db11ec6f9aa38d017d2ac393c5ba">FreeRTOSConfig.h</a>
+</li>
+<li>configQUEUE_REGISTRY_SIZE
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#aa4b5138c4e42a180f0abd4f2455f90fb">FreeRTOSConfig.h</a>
+</li>
+<li>configTICK_RATE_HZ
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a2f0258dd1e3b877e5bc013be54c2db6a">FreeRTOSConfig.h</a>
+</li>
+<li>configTIMER_QUEUE_LENGTH
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#abb9aa0f31c1f3b14a15083a3c6120918">FreeRTOSConfig.h</a>
+</li>
+<li>configTIMER_TASK_PRIORITY
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a05c75ff9029ba3f0ab5bde9196f1e873">FreeRTOSConfig.h</a>
+</li>
+<li>configTIMER_TASK_STACK_DEPTH
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#aed7c7ebcdee603583a55e8ce04e55841">FreeRTOSConfig.h</a>
+</li>
+<li>configTOTAL_HEAP_SIZE
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a9f213227674effff0122a75d94d87938">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_16_BIT_TICKS
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#aac311ed9b9e5ae4d2d9648b33a24acce">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_APPLICATION_TASK_TAG
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a2eb2a0baf886a7adab15b5735029434b">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_CO_ROUTINES
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a57990715eb06402474b8b47e1d562616">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_COUNTING_SEMAPHORES
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a55778995203c57369d2fbfb10224943d">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_IDLE_HOOK
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#ac637ae45863c19fa2e919db0ed49301f">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_MALLOC_FAILED_HOOK
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#abdf48e7c9cf513f083aa9cbed0dd7cd7">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_MUTEXES
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a543bf3c79008974cc1d36bab51d94fbf">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_PREEMPTION
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#adde83486022745409c40605922b0bdd6">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_RECURSIVE_MUTEXES
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a9fe02d866cb1c4fbaa0c3de79f53d42d">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_TICK_HOOK
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a23c5922c077106fad3f70b54d9071466">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_TIME_SLICING
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a493c5763eb7a39bd80779a1c58de0d82">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_TIMERS
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#ac342ae309b0c53828d2ecad3e6de355b">FreeRTOSConfig.h</a>
+</li>
+<li>configUSE_TRACE_FACILITY
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a27f5ee137dc9f125681a31f0b0a4b3be">FreeRTOSConfig.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_d.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li class="current"><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>dbgPrintf()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a2b4f475c89ea263557d6529c4d9a9353">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a2b4f475c89ea263557d6529c4d9a9353">pal_rtos.h</a>
+</li>
+<li>DEBUG_PRINT
+: <a class="el" href="db/dcf/pal__macros_8h.html#aa1b662a1198e5729d6d0934a7efb02c4">pal_macros.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_defs.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,319 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li class="current"><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="#index_d"><span>d</span></a></li>
+      <li><a href="#index_l"><span>l</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+      <li><a href="#index_n"><span>n</span></a></li>
+      <li><a href="#index_p"><span>p</span></a></li>
+      <li class="current"><a href="#index_t"><span>t</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>DEBUG_PRINT
+: <a class="el" href="db/dcf/pal__macros_8h.html#aa1b662a1198e5729d6d0934a7efb02c4">pal_macros.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>LITTLE__ENDIAN
+: <a class="el" href="db/dcf/pal__macros_8h.html#a1651594dc71abf466bddd0f6393edb8b">pal_macros.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>MEMORY_POOL1_BLOCK_COUNT
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a3c0ce22bdba74fe398c6adefbc7fbbdf">pal_rtos_test_utils.h</a>
+</li>
+<li>MEMORY_POOL1_BLOCK_SIZE
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#ae3c2c737bcf6b45c3bf394dfe8349c4d">pal_rtos_test_utils.h</a>
+</li>
+<li>MEMORY_POOL2_BLOCK_COUNT
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a593d40fc26d9d1664c57988a846a888e">pal_rtos_test_utils.h</a>
+</li>
+<li>MEMORY_POOL2_BLOCK_SIZE
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a3c85d7e7f47d26444477603d8e2fd5d5">pal_rtos_test_utils.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>NULLPTR
+: <a class="el" href="d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab">pal_types.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PAL_DIVIDE_ROUND_UP
+: <a class="el" href="db/dcf/pal__macros_8h.html#a966411fe41e3830553bb1b8cf8baf730">pal_macros.h</a>
+</li>
+<li>PAL_HOST_TO_LITTLE_ENDIAN_16BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#a9bd4f76c3897b4338fe50a8d69830fe5">pal_macros.h</a>
+</li>
+<li>PAL_HOST_TO_LITTLE_ENDIAN_32BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#ab01046a25df49d7fe1d85a8bf722975f">pal_macros.h</a>
+</li>
+<li>PAL_HOST_TO_LITTLE_ENDIAN_64BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#adc0a4752569188800a75e1601a7e11b5">pal_macros.h</a>
+</li>
+<li>PAL_HTONL
+: <a class="el" href="db/dcf/pal__macros_8h.html#a55b1a7d9f939231045521ec4a4817cff">pal_macros.h</a>
+</li>
+<li>PAL_HTONS
+: <a class="el" href="db/dcf/pal__macros_8h.html#a98390512a7c2732f1197b07acf03e226">pal_macros.h</a>
+</li>
+<li>PAL_INVERSE_UINT16_BYTES
+: <a class="el" href="db/dcf/pal__macros_8h.html#ad989cc9220df56cd410590fc628e93b7">pal_macros.h</a>
+</li>
+<li>PAL_INVERSE_UINT32_BYTES
+: <a class="el" href="db/dcf/pal__macros_8h.html#a4a0b711e344955017ab60ff37977e18f">pal_macros.h</a>
+</li>
+<li>PAL_INVERSE_UINT64_BYTES
+: <a class="el" href="db/dcf/pal__macros_8h.html#ae376dc7d0682fb2fc8927897fb065c4c">pal_macros.h</a>
+</li>
+<li>PAL_IPV4_ADDRESS_SIZE
+: <a class="el" href="d9/d17/pal__network_8h.html#ad7a3e182cb430da7c139858b0bfbb27f">pal_network.h</a>
+</li>
+<li>PAL_IPV6_ADDRESS_SIZE
+: <a class="el" href="d9/d17/pal__network_8h.html#a9903ebae215b70520c8dcc9f0aa03e24">pal_network.h</a>
+</li>
+<li>PAL_LITTLE_ENDIAN_TO_HOST_16BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#ad1c98870c5eeba8fe649345e371ef866">pal_macros.h</a>
+</li>
+<li>PAL_LITTLE_ENDIAN_TO_HOST_32BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#aa6229ece344478c07677c8b0436b1bb0">pal_macros.h</a>
+</li>
+<li>PAL_LITTLE_ENDIAN_TO_HOST_64BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#a4ae1ca0100a3eee36eb95931cbec633e">pal_macros.h</a>
+</li>
+<li>PAL_MAX
+: <a class="el" href="db/dcf/pal__macros_8h.html#a117c6ce53646b65b4cdcb5da01801675">pal_macros.h</a>
+</li>
+<li>PAL_MAX_INT32
+: <a class="el" href="db/dcf/pal__macros_8h.html#a6ee734c1fc41affa0926797e382fc8d4">pal_macros.h</a>
+</li>
+<li>PAL_MAX_INT64
+: <a class="el" href="db/dcf/pal__macros_8h.html#ada154fcb4b3ef9b641486f30de56c7b7">pal_macros.h</a>
+</li>
+<li>PAL_MAX_NUMBER_OF_THREADS
+: <a class="el" href="d2/d87/pal__configuration_8h.html#abb1ceb83ff6a709614d1394e7e39391d">pal_configuration.h</a>
+</li>
+<li>PAL_MAX_SUPORTED_NET_INTEFACES
+: <a class="el" href="d2/d87/pal__configuration_8h.html#a79ed46284848e83d0dba68933c40f82a">pal_configuration.h</a>
+</li>
+<li>PAL_MAX_UINT16
+: <a class="el" href="db/dcf/pal__macros_8h.html#af8d58ab12b0f655fe922fc40b3e52ca2">pal_macros.h</a>
+</li>
+<li>PAL_MAX_UINT32
+: <a class="el" href="db/dcf/pal__macros_8h.html#ac7e2d509703ff033a302b325aa664f6e">pal_macros.h</a>
+</li>
+<li>PAL_MAX_UINT64
+: <a class="el" href="db/dcf/pal__macros_8h.html#a28a8006d7bca3b64235ca4d0cb39bf2b">pal_macros.h</a>
+</li>
+<li>PAL_MAX_UINT8
+: <a class="el" href="db/dcf/pal__macros_8h.html#a08c56fc189bfb1a6864a7b5d68433e7e">pal_macros.h</a>
+</li>
+<li>PAL_MIN
+: <a class="el" href="db/dcf/pal__macros_8h.html#a29066dd6aaf6aa8fa21f3a88feb6da59">pal_macros.h</a>
+</li>
+<li>PAL_MIN_INT32
+: <a class="el" href="db/dcf/pal__macros_8h.html#ac3a2f334767728e9bc57512139e0bd61">pal_macros.h</a>
+</li>
+<li>PAL_MODULE_DEINIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#aaeb3e06c7119793239368c0fe74cda05">pal_macros.h</a>
+</li>
+<li>PAL_MODULE_INIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#ad2109677fa03720f6ab0df072c755529">pal_macros.h</a>
+</li>
+<li>PAL_MODULE_IS_INIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#ade9a83a9aab96cf50058801afdef4ace">pal_macros.h</a>
+</li>
+<li>PAL_MUTEX_DATA_SIZE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#af12d673085039783ab1d2613eff7e4a4">pal_plat_rtos.c</a>
+</li>
+<li>PAL_NET_ASYNCHRONOUS_SOCKET_API
+: <a class="el" href="d2/d87/pal__configuration_8h.html#a337c171a4cf5d7f04894051002d81eba">pal_configuration.h</a>
+</li>
+<li>PAL_NET_DEFAULT_INTERFACE
+: <a class="el" href="d9/d17/pal__network_8h.html#aefc09884590381a71433c34b3f2e2aa5">pal_network.h</a>
+</li>
+<li>PAL_NET_DNS_SUPPORT
+: <a class="el" href="d2/d87/pal__configuration_8h.html#ad7e2f6ebd028faacc239229cce972fa7">pal_configuration.h</a>
+</li>
+<li>PAL_NET_MAX_ADDR_SIZE
+: <a class="el" href="d9/d17/pal__network_8h.html#ac831e2e5064065e10c741da1003ff039">pal_network.h</a>
+</li>
+<li>PAL_NET_SELECT_IS_ERR
+: <a class="el" href="d9/d17/pal__network_8h.html#ac2b7451d38e150079fbef20b57ee3fe9">pal_network.h</a>
+</li>
+<li>PAL_NET_SELECT_IS_RX
+: <a class="el" href="d9/d17/pal__network_8h.html#a8894a96773018ba6058811087b4b2ac8">pal_network.h</a>
+</li>
+<li>PAL_NET_SELECT_IS_TX
+: <a class="el" href="d9/d17/pal__network_8h.html#a31ca79ac9ae5c2ddd890263a989fc4d8">pal_network.h</a>
+</li>
+<li>PAL_NET_SOCKET_SELECT_ERR_BIT
+: <a class="el" href="d9/d17/pal__network_8h.html#aa66d7131cc6c44ac6c5ab6a9dda3f69a">pal_network.h</a>
+</li>
+<li>PAL_NET_SOCKET_SELECT_MAX_SOCKETS
+: <a class="el" href="d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">pal_network.h</a>
+</li>
+<li>PAL_NET_SOCKET_SELECT_RX_BIT
+: <a class="el" href="d9/d17/pal__network_8h.html#aae14933b48cd31821913f2bfb15e18b2">pal_network.h</a>
+</li>
+<li>PAL_NET_SOCKET_SELECT_TX_BIT
+: <a class="el" href="d9/d17/pal__network_8h.html#ad8ddc879cf2eace65036137660b8b53d">pal_network.h</a>
+</li>
+<li>PAL_NET_SUPPORT_LWIP
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#abc23815d68dafc619e2c2ba210d65bd0">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TCP_AND_TLS_SUPPORT
+: <a class="el" href="d2/d87/pal__configuration_8h.html#a4662be64705952cfa0925001c9d917c3">pal_configuration.h</a>
+</li>
+<li>PAL_NET_TEST_INCOMING_PORT
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#ab1873f5ba58eb802dd808f05a1101670">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TEST_SERVER_HTTP_PORT
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a7c3cef32674c412f87617e87a194e0e3">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TEST_SERVER_IP
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a0570e783c7412d25d0c33817da54c02f">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TEST_SERVER_IP_STRING
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a7175d943793d9a92ebe83d12f2a65063">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TEST_SERVER_NAME
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#abbe7571a0fc631eb43561606f4d5bb0e">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TEST_SERVER_UDP_PORT
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#abc63439a9af70c80b125accdc2afbb12">pal_socket_test.c</a>
+</li>
+<li>PAL_NTOHL
+: <a class="el" href="db/dcf/pal__macros_8h.html#a7cbc81d1fb0dcddb1cc88b59d50c2aa9">pal_macros.h</a>
+</li>
+<li>PAL_NTOHS
+: <a class="el" href="db/dcf/pal__macros_8h.html#a55fbcf7a453813fec69016916802de2c">pal_macros.h</a>
+</li>
+<li>PAL_NUM_OF_THREAD_INSTANCES
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a9b3b50428d7ad199287a291137041c43">pal_plat_rtos.c</a>
+</li>
+<li>PAL_PRINTF
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a2e5b95b90c72b6bdf62897efd58f98fb">pal_rtos.h</a>
+</li>
+<li>PAL_RTOS_64BIT_TICK_SUPPORTED
+: <a class="el" href="d2/d87/pal__configuration_8h.html#a2c7f7687d719d388a67c1f18f200962d">pal_configuration.h</a>
+</li>
+<li>PAL_RTOS_MEMORY_POOL_SIZE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a31d6d9a16b9891d7eb84e2b974c2c92b">pal_plat_rtos.c</a>
+</li>
+<li>PAL_RTOS_MESSAGE_Q_SIZE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aa1b17e5a20a5db09a3a3267f9a4191e0">pal_plat_rtos.c</a>
+</li>
+<li>PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aa25bb23dc9f40c91f9872c585e649723">pal_plat_rtos.c</a>
+</li>
+<li>PAL_RTOS_WAIT_FOREVER
+: <a class="el" href="d4/d01/pal__rtos_8h.html#ad19aa2a408e848a5f86d897ab50500ec">pal_rtos.h</a>
+</li>
+<li>PAL_SEMAPHORE_DATA_SIZE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a66dcd5bd7ca661597fecabb1795fa393">pal_plat_rtos.c</a>
+</li>
+<li>PAL_SOCKET_OPTION_ERROR
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a8c607fcbfa526e4485fcdb55b79b39d6">pal_plat_network.cpp</a>
+</li>
+<li>PAL_SUCCESS
+: <a class="el" href="db/dcf/pal__macros_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">pal_macros.h</a>
+, <a class="el" href="d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">pal_types.h</a>
+</li>
+<li>PAL_TEST_BUFFER_SIZE
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a0010ea5741ae7db441ef09f96eef47be">pal_socket_test.c</a>
+</li>
+<li>PAL_TICK_TO_MILLI_FACTOR
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a78b1f63823e34bc82e272358701cbe67">pal_plat_rtos.c</a>
+</li>
+<li>PAL_TIMER_DATA_SIZE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aba1d833ce13b78f5648ec26cdd25f639">pal_plat_rtos.c</a>
+</li>
+<li>PAL_UNIQUE_THREAD_PRIORITY
+: <a class="el" href="d2/d87/pal__configuration_8h.html#a4d2f5187ecd7e90c094e2f103e5b6839">pal_configuration.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>TEST_PRINTF
+: <a class="el" href="d8/d5f/pal__socket__test__utils_8cpp.html#ac641d6ab2d8d2f23e89e7c36694d85dd">pal_socket_test_utils.cpp</a>
+, <a class="el" href="d0/d51/pal__test__utils_8h.html#a7f0c3a0f2f1c4062d776a7bc64bed815">pal_test_utils.h</a>
+</li>
+<li>THREAD_STACK_SIZE
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a90b7a8cb7bc3fdbd98014a3e15ee6e9a">pal_rtos_test_utils.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_enum.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;<ul>
+<li>pal_osPriority
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535">pal_rtos.h</a>
+</li>
+<li>palError_t
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5">pal_errors.h</a>
+</li>
+<li>palErrorModules_t
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1">pal_errors.h</a>
+</li>
+<li>palSocketDomain_t
+: <a class="el" href="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">pal_network.h</a>
+</li>
+<li>palSocketOptionName_t
+: <a class="el" href="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">pal_network.h</a>
+</li>
+<li>palSocketType_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">pal_network.h</a>
+</li>
+<li>palTimerType
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2">pal_rtos.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_eval.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,301 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li class="current"><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="#index_p"><span>p</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PAL_AF_INET
+: <a class="el" href="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a9420d0656d763eeeb6c97243e0514f4f">pal_network.h</a>
+</li>
+<li>PAL_AF_INET6
+: <a class="el" href="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a7375b598bd48e43e8869594d96b2c0d7">pal_network.h</a>
+</li>
+<li>PAL_AF_UNSPEC
+: <a class="el" href="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7af6e1af9f402ae053ad1ac009b61957c3">pal_network.h</a>
+</li>
+<li>PAL_ERR_BUFFER_TOO_SMALL
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a46dd726962c185841ba6b2a6a51716f9">pal_errors.h</a>
+</li>
+<li>PAL_ERR_CREATION_FAILED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aed6967ecb83464f0d078f210da21c308">pal_errors.h</a>
+</li>
+<li>PAL_ERR_GENERAL_BASE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">pal_errors.h</a>
+</li>
+<li>PAL_ERR_GENERIC_FAILURE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa7f2512e5c7b5a9ac52c061d139bc7d4">pal_errors.h</a>
+</li>
+<li>PAL_ERR_INVALID_ARGUMENT
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a744e1823284f7cc0575234cb7ef00818">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_C
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a393e3aee68a29b56f296410882a61ee1">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_CRYPTO
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a8a27e540ac27fc7fb67c75eeb233b944">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_GENERAL
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_NET
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_PAL
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_RTOS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_TLS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1aa9aff26dbdc5924c6d244d7c0727957d">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_UPDATE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e">pal_errors.h</a>
+</li>
+<li>PAL_ERR_NO_MEMORY
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a12207f367341fdf5946140874b26729c">pal_errors.h</a>
+</li>
+<li>PAL_ERR_NOT_IMPLEMENTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abeb3c1cb1631b2decdf863ba4875f86a">pal_errors.h</a>
+</li>
+<li>PAL_ERR_NOT_INITIALIZED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4d8a84476204387d3b5e720b3e0777c">pal_errors.h</a>
+</li>
+<li>PAL_ERR_NOT_SUPPORTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7b7f0ee07b070ec75d101dfa292b9d94">pal_errors.h</a>
+</li>
+<li>PAL_ERR_NULL_POINTER
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5a632cfd6ad51b23b088ef5bf8a50107">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_ERROR_BASE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_ISR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a81f5a29e0f8f421412636195cd7eafef">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_ISR_RECURSIVE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5791ca907d7d2c5e811c1ff8a79ef3f4">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_NO_MEMORY
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4e823bf084db0abf95f92e644e44413">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_OS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad783bb526712a8fc40b8c7e9e2dcca70">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_PARAMETER
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5af57d1b96cac027006285d3e946f72da7">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_PRIORITY
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa372d184ebea174a9a807a6af5feedbb">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_RESOURCE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ab842a33fc2033095f7526d36e76ffde3">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_TIMEOUT
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4f005aeb7022829339f50e6a1c48f07b">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_VALUE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a166a7c0ad427986e42eee2d7ed5f2690">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_ADDRESS_IN_USE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aef19ff78785fd271b93bec327551f74e">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_ALREADY_CONNECTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a05b82765d558b836fc988283d1d93e20">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_AUTH_ERROR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8f07f3411c26d3107b86d64739b18fd8">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_CONNECTION_ABORTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7027cc594e676d26ade0efcca3d4a8cf">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_CONNECTION_CLOSED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7449190771bd90f1b5dd54f0626c4d50">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_CONNECTION_RESET
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae917d0749e3e541369413c782d6a1f3b">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_DNS_ERROR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aeb186326d561fd71f180d59ab12b0d5f">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_ERROR_BASE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_FAILED_TO_SET_SOCKET_TO_NON_BLOCKING
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a557f240d9723393b246c9d03ad5789cd">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_GENERIC
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abd4cc21a7f65533cf8dfc118b19957fe">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_HDCP_ERROR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a352e14b96bd1489c42728f4da485b577">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_HOST_UNREACHABLE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4d5cc5d96a1f1d23f69cf3fead9291e2">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_IN_PROGRES
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a493871f4bc0b3223df779b89a3b0b829">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_INPUT_OUTPUT_ERROR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae2f7bce589b21231745767161c43349d">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_INVALID_ADDRESS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a033490de59972a46877f230267a070c8">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a3c0172ff8cc391873b83c9a1b7b6bd35">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_INVALID_VALUE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ade5fcfb0a8b3810ef513c25e7722db6e">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_NO_BUFFERS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a25f6affacd34aaf7e734a666b5186f2d">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_NOT_CONNECTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a90f2efed44c1dbb04928d381355ece58">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a9a2d6af2657b5abd81bd38c7c6cf0479">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_WOULD_BLOCK
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a089003c7bd380a8426f211fedfb813ea">pal_errors.h</a>
+</li>
+<li>PAL_ERR_TIMEOUT_EXPIRED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a316210ded62b55ed1bbcc4e3c5ce8a49">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_BUSY
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a123c0937e9046005938c724b7e0c7daf">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_CHUNK_TO_SMALL
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4dffb58d0202d7ca5ac60eff42313ac9">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_END_OF_IMAGE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaacb4fc41bcde230f42aeb05bfaccf42">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_ERROR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a29017351514ed7e0a1fb46d6f1b53cb5">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_ERROR_BASE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_OUT_OF_BOUNDS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a6f29986bcfb1cc0f26c1dfa17fa44cf6">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_PALFROM_API
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ada39f2992787040da527359ce7a25a57">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_PALFROM_IO
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaa9a76afb13586743e21ece5310487e6">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_TIMEOUT
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5afaeb01c79160229de16f8b764224823b">pal_errors.h</a>
+</li>
+<li>PAL_osPriorityAboveNormal
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ac6ad927a77b4275e1da2373f810ee2af">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityBelowNormal
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a23fdf72acf5a9475ca4054d4e1a187a5">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityError
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a94aea8f14f0bc89f7f4540416c08da3e">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityHigh
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a70d584591ab861e247ccfe94e55e35a2">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityIdle
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a62b0350b25146b93c57a71ce65bb017a">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityLow
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ab3b5b218f45b07de8153427c63273fec">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityNormal
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a897a2d3cf2fa39f82141535d0d4e51a1">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityRealtime
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a3c2b8a244cae70bbf23a5a4d033df2ce">pal_rtos.h</a>
+</li>
+<li>PAL_SO_RCVTIMEO
+: <a class="el" href="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a9e1ad5d4670e06bb2a8b110c0ba3e5ca">pal_network.h</a>
+</li>
+<li>PAL_SO_REUSEADDR
+: <a class="el" href="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a352587a3fea85695be1ce478aa3da001">pal_network.h</a>
+</li>
+<li>PAL_SO_SNDTIMEO
+: <a class="el" href="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51aa744f783051825333c23177008d140de">pal_network.h</a>
+</li>
+<li>PAL_SOCK_DGRAM
+: <a class="el" href="d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418a14e907287d0ede1306aa35f5687e0941">pal_network.h</a>
+</li>
+<li>palOsTimerOnce
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2a0f237f01e8978b2dc987ff3b5cde0f30">pal_rtos.h</a>
+</li>
+<li>palOsTimerPeriodic
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2aadcc58d31964426d67650ca958fb80f9">pal_rtos.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_f.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_a.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li class="current"><a href="globals_f.html#index_f"><span>f</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_x.html#index_x"><span>x</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>FIRMWARE_HEADER_MAGIC
+: <a class="el" href="d3/d44/pal__plat__update_8cpp.html#a9762be6170804525a2b45df94fd9293c">pal_plat_update.cpp</a>
+</li>
+<li>FIRMWARE_HEADER_VERSION
+: <a class="el" href="d3/d44/pal__plat__update_8cpp.html#af3abc5e3f32ad8114e385a7b137a602d">pal_plat_update.cpp</a>
+</li>
+<li>FirmwareHeader_t
+: <a class="el" href="d3/d44/pal__plat__update_8cpp.html#ad53f6cbdcb10beae7d1bdf6a79d2a48f">pal_plat_update.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_func.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li class="current"><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>button_thread()
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_func_b.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_a"><span>a</span></a></li>
+      <li class="current"><a href="globals_func_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>button_thread()
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="da/d64/pal__socket__test__main__mbedos_classic_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_socket_test_main_mbedosClassic.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_socket_test_main_mbedOS.cpp</a>
+, <a class="el" href="d4/d68/pal__rtos__test__main__mbedos_classic_8cpp.html#afe6a59684384290b7f8710db5203944a">pal_rtos_test_main_mbedosClassic.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_func_d.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li class="current"><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>dbgPrintf()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a2b4f475c89ea263557d6529c4d9a9353">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a2b4f475c89ea263557d6529c4d9a9353">pal_rtos.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_func_l.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li class="current"><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>led1()
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+<li>led_thread()
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_func_m.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li class="current"><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>main()
+: <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">pal_all_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">pal_socket_test_main_mbedOS.cpp</a>
+, <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">pal_rtos_test_main_mbedOS.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_func_n.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li class="current"><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>NVIC_SystemReset()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a1b47d17e90b6a03e7bd1ec6a0d549b46">pal_plat_rtos.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_func_p.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,560 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li class="current"><a href="globals_func_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>pal_bind()
+: <a class="el" href="d1/dc4/pal__network_8c.html#ac1ff0fb22cbd84e6c7920c095ddbde63">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#ac1ff0fb22cbd84e6c7920c095ddbde63">pal_network.h</a>
+</li>
+<li>pal_close()
+: <a class="el" href="d9/d17/pal__network_8h.html#a18197e0f047f17d2617461594f5ed644">pal_network.h</a>
+, <a class="el" href="d1/dc4/pal__network_8c.html#a18197e0f047f17d2617461594f5ed644">pal_network.c</a>
+</li>
+<li>pal_destroy()
+: <a class="el" href="d7/d66/pal__init_8c.html#a312dfda15122dbd2abff67b580c811ad">pal_init.c</a>
+, <a class="el" href="d9/d16/pal_8h.html#a312dfda15122dbd2abff67b580c811ad">pal.h</a>
+</li>
+<li>pal_getNetInterfaceInfo()
+: <a class="el" href="d9/d17/pal__network_8h.html#a5258efd8b21d9c881df29b29686674d8">pal_network.h</a>
+, <a class="el" href="d1/dc4/pal__network_8c.html#a5258efd8b21d9c881df29b29686674d8">pal_network.c</a>
+</li>
+<li>pal_getNumberOfNetInterfaces()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a65df7c68bcf7a21db5d1a7a3830fd19c">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a65df7c68bcf7a21db5d1a7a3830fd19c">pal_network.h</a>
+</li>
+<li>pal_getSockAddrIPV4Addr()
+: <a class="el" href="d1/dc4/pal__network_8c.html#ade5cf610808db5462666465b648e7724">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#ade5cf610808db5462666465b648e7724">pal_network.h</a>
+</li>
+<li>pal_getSockAddrIPV6Addr()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a153bc6165f64bbf3e6bcc79b0d39138f">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a153bc6165f64bbf3e6bcc79b0d39138f">pal_network.h</a>
+</li>
+<li>pal_getSockAddrPort()
+: <a class="el" href="d9/d17/pal__network_8h.html#a4658c7e8224b536d4fd71fed2602b12e">pal_network.h</a>
+, <a class="el" href="d1/dc4/pal__network_8c.html#a4658c7e8224b536d4fd71fed2602b12e">pal_network.c</a>
+</li>
+<li>pal_getSocketOptions()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a2d9d4e04e43995123efe134c767cd6e1">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a2d9d4e04e43995123efe134c767cd6e1">pal_network.h</a>
+</li>
+<li>pal_init()
+: <a class="el" href="d7/d66/pal__init_8c.html#a28095bec6e2c1c74ad3b08414f44b9d6">pal_init.c</a>
+, <a class="el" href="d9/d16/pal_8h.html#a28095bec6e2c1c74ad3b08414f44b9d6">pal.h</a>
+</li>
+<li>pal_osAtomicIncrement()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a9b33d260ee1022f5b5f6a9dfc3363f2a">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a9b33d260ee1022f5b5f6a9dfc3363f2a">pal_rtos.h</a>
+</li>
+<li>pal_osDelay()
+: <a class="el" href="de/d33/pal__rtos_8c.html#ad6aaee432fd7ea5e35ab500a6278cc25">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#ad6aaee432fd7ea5e35ab500a6278cc25">pal_rtos.h</a>
+</li>
+<li>pal_osKernelSysMilliSecTick()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a59e85747582417a1395ed0f9c140eb8a">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a59e85747582417a1395ed0f9c140eb8a">pal_rtos.h</a>
+</li>
+<li>pal_osKernelSysTick()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a9800b8b9e057fe17e50c4259c809f898">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a9800b8b9e057fe17e50c4259c809f898">pal_rtos.h</a>
+</li>
+<li>pal_osKernelSysTick64()
+: <a class="el" href="de/d33/pal__rtos_8c.html#af88551b6ca24a7a2bb6d94d423eb4401">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#af88551b6ca24a7a2bb6d94d423eb4401">pal_rtos.h</a>
+</li>
+<li>pal_osKernelSysTickFrequency()
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a087214ae87c20fd59f47fe3c96d0eefc">pal_rtos.h</a>
+, <a class="el" href="de/d33/pal__rtos_8c.html#a087214ae87c20fd59f47fe3c96d0eefc">pal_rtos.c</a>
+</li>
+<li>pal_osKernelSysTickMicroSec()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a34375ee82619a4064849daccbdfbc966">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a34375ee82619a4064849daccbdfbc966">pal_rtos.h</a>
+</li>
+<li>pal_osMessageGet()
+: <a class="el" href="de/d33/pal__rtos_8c.html#ab70d0be45514258874c0406c2040372c">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#ab70d0be45514258874c0406c2040372c">pal_rtos.h</a>
+</li>
+<li>pal_osMessagePut()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a966daa5b0bd9282fbffa7c462da1c417">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a966daa5b0bd9282fbffa7c462da1c417">pal_rtos.h</a>
+</li>
+<li>pal_osMessageQueueCreate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a0c7f0003e92b3494089966d53ab24a1b">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a0c7f0003e92b3494089966d53ab24a1b">pal_rtos.h</a>
+</li>
+<li>pal_osMessageQueueDestroy()
+: <a class="el" href="de/d33/pal__rtos_8c.html#adba13212ec060092acdf6165e82be5b6">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#adba13212ec060092acdf6165e82be5b6">pal_rtos.h</a>
+</li>
+<li>pal_osMutexCreate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#af89aab14085207b1a0951f7aad24193c">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#af89aab14085207b1a0951f7aad24193c">pal_rtos.h</a>
+</li>
+<li>pal_osMutexDelete()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a03f43d7e53435d89f316862b48b573c4">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a03f43d7e53435d89f316862b48b573c4">pal_rtos.h</a>
+</li>
+<li>pal_osMutexRelease()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a1d976a616a5c850b2016b2b87d8b47cc">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a1d976a616a5c850b2016b2b87d8b47cc">pal_rtos.h</a>
+</li>
+<li>pal_osMutexWait()
+: <a class="el" href="de/d33/pal__rtos_8c.html#acda0974247325955719b23494d66c622">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#acda0974247325955719b23494d66c622">pal_rtos.h</a>
+</li>
+<li>pal_osPoolAlloc()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a3a2b57685096d16a110ee38f7f29e099">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a3a2b57685096d16a110ee38f7f29e099">pal_rtos.h</a>
+</li>
+<li>pal_osPoolCAlloc()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a5d20661cd387a172450a2fe12993687a">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a5d20661cd387a172450a2fe12993687a">pal_rtos.h</a>
+</li>
+<li>pal_osPoolCreate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a1245f053abb3fdb7ab2ceb5a2899e8c6">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a1245f053abb3fdb7ab2ceb5a2899e8c6">pal_rtos.h</a>
+</li>
+<li>pal_osPoolDestroy()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a1c01464448f8d7bd95bf518d651484c6">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a1c01464448f8d7bd95bf518d651484c6">pal_rtos.h</a>
+</li>
+<li>pal_osPoolFree()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a79f4997069310aa7bbb6ae7995988dd7">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a79f4997069310aa7bbb6ae7995988dd7">pal_rtos.h</a>
+</li>
+<li>pal_osReboot()
+: <a class="el" href="de/d33/pal__rtos_8c.html#ab8ab0f31bbf4258b7684d22e7725a9f8">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#ab8ab0f31bbf4258b7684d22e7725a9f8">pal_rtos.h</a>
+</li>
+<li>pal_osSemaphoreCreate()
+: <a class="el" href="d4/d01/pal__rtos_8h.html#aaa7aee442a5c8cc274d3e52206984037">pal_rtos.h</a>
+, <a class="el" href="de/d33/pal__rtos_8c.html#aaa7aee442a5c8cc274d3e52206984037">pal_rtos.c</a>
+</li>
+<li>pal_osSemaphoreDelete()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a45f071482f8669821b90264e0470b33d">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a45f071482f8669821b90264e0470b33d">pal_rtos.h</a>
+</li>
+<li>pal_osSemaphoreRelease()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a009d0c063119265f9c5c0c9bff379c14">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a009d0c063119265f9c5c0c9bff379c14">pal_rtos.h</a>
+</li>
+<li>pal_osSemaphoreWait()
+: <a class="el" href="de/d33/pal__rtos_8c.html#aa2d998744dbc9504bfe0358f85457fc4">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#aa2d998744dbc9504bfe0358f85457fc4">pal_rtos.h</a>
+</li>
+<li>pal_osThreadCreate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a2dae64d917f644982b893037adf562b4">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a2dae64d917f644982b893037adf562b4">pal_rtos.h</a>
+</li>
+<li>pal_osThreadGetId()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a2993b8f6b5e8d7ccd6121dc18330e4be">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a2993b8f6b5e8d7ccd6121dc18330e4be">pal_rtos.h</a>
+</li>
+<li>pal_osThreadGetLocalStore()
+: <a class="el" href="de/d33/pal__rtos_8c.html#ac94f4efc4bad73969e57c8255c136a0d">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#ac94f4efc4bad73969e57c8255c136a0d">pal_rtos.h</a>
+</li>
+<li>pal_osThreadTerminate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#abcfa47b411929b33d5d9cfaaff28ce18">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#abcfa47b411929b33d5d9cfaaff28ce18">pal_rtos.h</a>
+</li>
+<li>pal_osTimerCreate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#aa4da36fbbba744a14d1bdfe2a26d1a18">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#aa4da36fbbba744a14d1bdfe2a26d1a18">pal_rtos.h</a>
+</li>
+<li>pal_osTimerDelete()
+: <a class="el" href="de/d33/pal__rtos_8c.html#ac7ca6e7c3c229f4092c9df4b69e7dd59">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#ac7ca6e7c3c229f4092c9df4b69e7dd59">pal_rtos.h</a>
+</li>
+<li>pal_osTimerStart()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a6c60c9e433bc6005bac6b02d5aba7363">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a6c60c9e433bc6005bac6b02d5aba7363">pal_rtos.h</a>
+</li>
+<li>pal_osTimerStop()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a94f4df594102e582cbd2114f6eebb57d">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a94f4df594102e582cbd2114f6eebb57d">pal_rtos.h</a>
+</li>
+<li>pal_plat_bind()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#a53a267fd8ed0b7a5cf988224e95bd47c">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a53a267fd8ed0b7a5cf988224e95bd47c">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_close()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#a071355a0ca4d4eece45f0ed85a9ab1da">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a071355a0ca4d4eece45f0ed85a9ab1da">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_getNetInterfaceInfo()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#a6dc3b4c06e96b29068995809b98a935e">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a6dc3b4c06e96b29068995809b98a935e">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_getNumberOfNetInterfaces()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#af36bf075867e5ed0be7479312469361f">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#af36bf075867e5ed0be7479312469361f">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_getSocketOptions()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#a76c4e2adf95702c4db8f3792ae373bf9">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a76c4e2adf95702c4db8f3792ae373bf9">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_osAtomicIncrement()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ac62a5b36fc159e12670c44a12dc08beb">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ac62a5b36fc159e12670c44a12dc08beb">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osDelay()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a140b31a48ac23c909f1a94ad11b04aac">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a140b31a48ac23c909f1a94ad11b04aac">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osKernelSysMilliSecTick()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a82eade9e7b100bd9dc9ab8312f98f827">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a82eade9e7b100bd9dc9ab8312f98f827">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osKernelSysTick()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ae92f87b121a06e0062ee014025c0ba9e">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ae92f87b121a06e0062ee014025c0ba9e">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osKernelSysTick64()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ad104e06e7b043305fdbfbc37e4ea2826">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osKernelSysTickFrequency()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#aacd58e95c23ad1c8f39b8b12ed2d83dd">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#addc790764a23a3e16344bd830ebe01ef">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osKernelSysTickMicroSec()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a2d18206974bdf17c48b97e2e16505f19">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a2d18206974bdf17c48b97e2e16505f19">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMessageGet()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a67696b86a6116a82da7c26a433280e58">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a67696b86a6116a82da7c26a433280e58">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMessagePut()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#aa80549a557e50e0759991c6b11eb456a">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aa80549a557e50e0759991c6b11eb456a">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMessageQueueCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ad25c8f7cb22985b077e893be5bc27d48">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ad25c8f7cb22985b077e893be5bc27d48">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMessageQueueDestroy()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a0e0e6dc9958a9efd9beb62493bc3f67a">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a0e0e6dc9958a9efd9beb62493bc3f67a">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMutexCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ae2425f958ab7d58eff5c5b3183f40305">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ae2425f958ab7d58eff5c5b3183f40305">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMutexDelete()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a909f4ae03b0acef0b84609d9b76679b4">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a909f4ae03b0acef0b84609d9b76679b4">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMutexRelease()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#add4dbca7b11365e7301db1425c9fdf4d">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#add4dbca7b11365e7301db1425c9fdf4d">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osMutexWait()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#aea4ad5224c43ff0fff2b77798d19748c">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aea4ad5224c43ff0fff2b77798d19748c">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osPoolAlloc()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a5938d16ea0c12594e8f8becd20acf3a7">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a5938d16ea0c12594e8f8becd20acf3a7">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osPoolCAlloc()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a8dff6b49f9798cdd4eed04f3dff30330">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a8dff6b49f9798cdd4eed04f3dff30330">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osPoolCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a7a4fa20255fe38cf183f6c924419fe85">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a7a4fa20255fe38cf183f6c924419fe85">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osPoolDestroy()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a33ca5b5e9d3a80594de4977924e6bc1b">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a33ca5b5e9d3a80594de4977924e6bc1b">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osPoolFree()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a84e2f41a587335de053e0b7f8a4163c2">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a84e2f41a587335de053e0b7f8a4163c2">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osReboot()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a894db4d6fe636ef7a7ebf83d4334adbd">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#abdb6ab5827d588b9c2e908beda4c3154">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osSemaphoreCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a6e7b3c23b094270b4e013c4412f2d3b1">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a6e7b3c23b094270b4e013c4412f2d3b1">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osSemaphoreDelete()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ab37f3153b73dc87ca609c4c2e1bf8d6a">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ab37f3153b73dc87ca609c4c2e1bf8d6a">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osSemaphoreRelease()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a252f210ce8a502891821b5af24b09822">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a252f210ce8a502891821b5af24b09822">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osSemaphoreWait()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ac9231eef550eb7b62a89e7a34b62d014">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ac9231eef550eb7b62a89e7a34b62d014">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osThreadCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a9c965e0fdfd80fc86c901cf2bde88c64">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a9c965e0fdfd80fc86c901cf2bde88c64">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osThreadGetId()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a4c42c35d3d7b375833a51b4670febe92">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a4c42c35d3d7b375833a51b4670febe92">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osThreadGetLocalStore()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#aca6b1b2f34861cf8e3d2dcc076992270">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aca6b1b2f34861cf8e3d2dcc076992270">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osThreadTerminate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a3117f8911b3e83e27031f366aa652a4f">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a3117f8911b3e83e27031f366aa652a4f">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osTimerCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#aee15bcaba1ed33c264bc4c91c1dbb1cf">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aee15bcaba1ed33c264bc4c91c1dbb1cf">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osTimerDelete()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a9723baa43780a1083f43d786fa53a73d">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a9723baa43780a1083f43d786fa53a73d">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osTimerStart()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a80f5ca578197088e4cf84042c9efc2d7">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a80f5ca578197088e4cf84042c9efc2d7">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osTimerStop()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a2f1fdb410c4d6ae382622ef4f1884808">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a2f1fdb410c4d6ae382622ef4f1884808">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_receiveFrom()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#aa869b5eddbf4eb6aebbbb587ece84aac">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#aa869b5eddbf4eb6aebbbb587ece84aac">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_RegisterNetworkInterface()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#ab37f007a0574ca73916b26240ff1126b">pal_plat_network.cpp</a>
+, <a class="el" href="d9/d2c/pal__plat__network_8h.html#a9f6e13112366978741749649356a886c">pal_plat_network.h</a>
+</li>
+<li>pal_plat_RTOSDestroy()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a8a484abc75cf595862459d6ab21c7a0c">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a8a484abc75cf595862459d6ab21c7a0c">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_RTOSInitialize()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a2e7aaf20f2cad3b04061e1c3fd748c42">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a2e7aaf20f2cad3b04061e1c3fd748c42">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_sendTo()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a17365747ed8d29df153a336da3942187">pal_plat_network.cpp</a>
+, <a class="el" href="d9/d2c/pal__plat__network_8h.html#a17365747ed8d29df153a336da3942187">pal_plat_network.h</a>
+</li>
+<li>pal_plat_setSocketOptions()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#a08ea05dacec7f7d9dc892dab0318542d">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a08ea05dacec7f7d9dc892dab0318542d">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_socket()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#a58a25ae30bb6225cc8b5344053fd705c">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a58a25ae30bb6225cc8b5344053fd705c">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_socketMiniSelect()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#aa0c26dfeee80444e58eacab238206d09">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#aa0c26dfeee80444e58eacab238206d09">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_socketsInit()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#ab92cca0e4facf3d62e03c0d0ca0523da">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#ab92cca0e4facf3d62e03c0d0ca0523da">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_socketsTerminate()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd">pal_plat_network.cpp</a>
+</li>
+<li>pal_receiveFrom()
+: <a class="el" href="d9/d17/pal__network_8h.html#a6b5e705be1e7c3c16080f2b05b87ff7d">pal_network.h</a>
+, <a class="el" href="d1/dc4/pal__network_8c.html#a6b5e705be1e7c3c16080f2b05b87ff7d">pal_network.c</a>
+</li>
+<li>pal_registerNetworkInterface()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a081cc2fd09644c41068673487b39f6b8">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a081cc2fd09644c41068673487b39f6b8">pal_network.h</a>
+</li>
+<li>pal_sendTo()
+: <a class="el" href="d1/dc4/pal__network_8c.html#acce808f708e653b6bed317072888ca23">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#acce808f708e653b6bed317072888ca23">pal_network.h</a>
+</li>
+<li>pal_setSockAddrIPV4Addr()
+: <a class="el" href="d1/dc4/pal__network_8c.html#aed02a6f53b88e1d5e81607b1221a3efa">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#aed02a6f53b88e1d5e81607b1221a3efa">pal_network.h</a>
+</li>
+<li>pal_setSockAddrIPV6Addr()
+: <a class="el" href="d9/d17/pal__network_8h.html#a0cc13f7ef9ceb4a75884a8bebf0d831c">pal_network.h</a>
+, <a class="el" href="d1/dc4/pal__network_8c.html#a0cc13f7ef9ceb4a75884a8bebf0d831c">pal_network.c</a>
+</li>
+<li>pal_setSockAddrPort()
+: <a class="el" href="d1/dc4/pal__network_8c.html#abbeb1395896eb79ab564568b9ab8a628">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#abbeb1395896eb79ab564568b9ab8a628">pal_network.h</a>
+</li>
+<li>pal_setSocketOptions()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a2e1bbe81a35a1cb54c351912bb97736f">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a2e1bbe81a35a1cb54c351912bb97736f">pal_network.h</a>
+</li>
+<li>pal_socket()
+: <a class="el" href="d1/dc4/pal__network_8c.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_network.h</a>
+</li>
+<li>pal_socketMiniSelect()
+: <a class="el" href="d9/d17/pal__network_8h.html#a5cab4ea55a3d28cfd8d4dca8376a111c">pal_network.h</a>
+, <a class="el" href="d1/dc4/pal__network_8c.html#a5cab4ea55a3d28cfd8d4dca8376a111c">pal_network.c</a>
+</li>
+<li>palRunThreads()
+: <a class="el" href="da/d2d/pal__rtos__test_8c.html#a393f7a6e534c05e534cfdaf46473db45">pal_rtos_test.c</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a393f7a6e534c05e534cfdaf46473db45">pal_rtos_test_utils.c</a>
+</li>
+<li>palSelectCallback0()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a056dbb70ade63a6ebc47f1f11733b8da">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback1()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a4dcff46004af6c4d300d542de9c7d38e">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback2()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#abe369a2a4de2c8e25ed47166f068918f">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback3()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#aeabad2d66db156a97447f6e22614e78c">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback4()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a521d96ff90d0b417e6749df8ae90bf8b">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback5()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#ae937bf3f397b1642a29a44c6cf9bc075">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback6()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a6b99c0251a9efb7224658c8da6e3ad27">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback7()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a6e102ddea1bd5315a4224c2a1fdddd58">pal_plat_network.cpp</a>
+</li>
+<li>palTestGetNetWorkInterfaceContext()
+: <a class="el" href="d8/d5f/pal__socket__test__utils_8cpp.html#a5e4a39a385159acfd150a2e6098351cf">pal_socket_test_utils.cpp</a>
+, <a class="el" href="df/d2a/pal__socket__test__utils_8h.html#a5e4a39a385159acfd150a2e6098351cf">pal_socket_test_utils.h</a>
+</li>
+<li>palThreadFunc1()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a0a153da028aee8f220377b516ff065c8">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a0a153da028aee8f220377b516ff065c8">pal_rtos_test_utils.c</a>
+</li>
+<li>palThreadFunc2()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a29dc69cbcc48b55d48a5fd668da7fe15">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a29dc69cbcc48b55d48a5fd668da7fe15">pal_rtos_test_utils.c</a>
+</li>
+<li>palThreadFunc3()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#acf68b041960be3c58f516986504fcd0f">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#acf68b041960be3c58f516986504fcd0f">pal_rtos_test_utils.c</a>
+</li>
+<li>palThreadFunc4()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a844c7469189866b502ef85df5063e79c">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a844c7469189866b502ef85df5063e79c">pal_rtos_test_utils.h</a>
+</li>
+<li>palThreadFunc5()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a5be7a07498de9cc847215e6aa8f77914">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a5be7a07498de9cc847215e6aa8f77914">pal_rtos_test_utils.c</a>
+</li>
+<li>palThreadFunc6()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a52dc025f6020b0d456bbbcacc3aa4e3e">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a52dc025f6020b0d456bbbcacc3aa4e3e">pal_rtos_test_utils.h</a>
+</li>
+<li>palThreadFuncCustom1()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a7c8c7a38fca8b62acc6094ba1f072ec7">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a7c8c7a38fca8b62acc6094ba1f072ec7">pal_rtos_test_utils.h</a>
+</li>
+<li>palThreadFuncCustom2()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a663a9130dc598399ec3bd9ab9e6680fa">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a663a9130dc598399ec3bd9ab9e6680fa">pal_rtos_test_utils.h</a>
+</li>
+<li>palThreadFuncCustom3()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a300d95346a90a5f17aa6140647243b64">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a300d95346a90a5f17aa6140647243b64">pal_rtos_test_utils.c</a>
+</li>
+<li>palThreadFuncCustom4()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#aa5b1f9c927c18d821a46d99dfe533cb0">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#aa5b1f9c927c18d821a46d99dfe533cb0">pal_rtos_test_utils.c</a>
+</li>
+<li>palTimerFunc1()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#abac822ed4b356b85117101aa0d8701d6">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#abac822ed4b356b85117101aa0d8701d6">pal_rtos_test_utils.h</a>
+</li>
+<li>palTimerFunc2()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a8581bcb8f9f435a87c3dd651d65e32c8">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a8581bcb8f9f435a87c3dd651d65e32c8">pal_rtos_test_utils.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_func_s.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_p.html#index_p"><span>p</span></a></li>
+      <li class="current"><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>socketCallback()
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#ad62b547b432124475c3f5a94d9befe6d">pal_socket_test.c</a>
+</li>
+<li>sw2()
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+<li>sw2_press()
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_func_t.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li class="current"><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>TEST()
+: <a class="el" href="da/d2d/pal__rtos__test_8c.html#a1e33659cb747282e1869e9f86fe2d33f">pal_rtos_test.c</a>
+, <a class="el" href="d5/d2a/pal__socket__test_8c.html#a89cecd4b07ef1acbb0b40c00189a0f36">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#ab6e3467dab64a1ae60a313f6c004e337">pal_rtos_test.c</a>
+, <a class="el" href="d5/d2a/pal__socket__test_8c.html#a38479981768fb5d46c11768870af9d8e">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a236b8351236670bd5b5a07c92d22df4b">pal_rtos_test.c</a>
+, <a class="el" href="d5/d2a/pal__socket__test_8c.html#ab28ce473e377fbe30049cb41b31dfa4b">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a9286efb458d9a35e4c89e79111bc5b32">pal_rtos_test.c</a>
+, <a class="el" href="d5/d2a/pal__socket__test_8c.html#abbfd14915bd054b23f91a485d4f8fb1e">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a0efc309d0e8eb82d8caf439877959e21">pal_rtos_test.c</a>
+</li>
+<li>TEST_GROUP()
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#ad324fc284dd938317109a9fc47dd1732">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#ab19fea07339238925c3b105637ce92c1">pal_rtos_test.c</a>
+</li>
+<li>TEST_GROUP_RUNNER()
+: <a class="el" href="dd/df6/pal__rtos__test__runner_8c.html#ace47ba1b1706d7b654cdf18e7008b174">pal_rtos_test_runner.c</a>
+, <a class="el" href="dc/da5/pal__socket__test__runner_8c.html#a7d7471d47d062a2bf20410044b712192">pal_socket_test_runner.c</a>
+</li>
+<li>TEST_pal_all_GROUPS_RUNNER()
+: <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#adc9a94aa19f52027390d7b0256a6693c">pal_all_test_main_mbedOS.cpp</a>
+</li>
+<li>TEST_pal_rtos_GROUP_RUNNER()
+: <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc">pal_all_test_main_mbedOS.cpp</a>
+, <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc">pal_rtos_test_main_mbedOS.cpp</a>
+</li>
+<li>TEST_pal_socket_GROUP_RUNNER()
+: <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab">pal_all_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+<li>TEST_pal_update_GROUP_RUNNER()
+: <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a59390bc31498889208cfda7dea51bffa">pal_all_test_main_mbedOS.cpp</a>
+</li>
+<li>TEST_SETUP()
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a26217052dc55731aa82231669a8cf0df">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a8a7c6f6a71607f9dce69207f1f7ed3c1">pal_rtos_test.c</a>
+</li>
+<li>TEST_TEAR_DOWN()
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#ac307640c84843ab78607af150bcbe143">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#ac5fc4009112ba6cadc74ad8cd14c427b">pal_rtos_test.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_func_u.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals_func.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_func_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_func_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_func_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_func_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_func_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_func_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_func_t.html#index_t"><span>t</span></a></li>
+      <li class="current"><a href="globals_func_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>UnityMain()
+: <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">pal_all_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">pal_socket_test_main_mbedOS.cpp</a>
+, <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">pal_rtos_test_main_mbedOS.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_g.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li class="current"><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>g_networkInterface
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a702871d3d9057fa4fc99031298fb425c">pal_socket_test.c</a>
+</li>
+<li>g_threadsArg
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a8f9b1f133f82ce955405d453f0c506d6">pal_rtos_test_utils.h</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a8f9b1f133f82ce955405d453f0c506d6">pal_rtos_test.c</a>
+</li>
+<li>g_threadStorage
+: <a class="el" href="da/d2d/pal__rtos__test_8c.html#a9beaf51023e475986b8b182c80ccc023">pal_rtos_test.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a9beaf51023e475986b8b182c80ccc023">pal_rtos_test_utils.h</a>
+</li>
+<li>g_timerArgs
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a1a09db2f0cd5dd2d0929b34afad51ba1">pal_rtos_test_utils.h</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a1a09db2f0cd5dd2d0929b34afad51ba1">pal_rtos_test.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_i.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li class="current"><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_x.html#index_x"><span>x</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>INCLUDE_uxTaskPriorityGet
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a1279eb797355460aeeec06aa524e91df">FreeRTOSConfig.h</a>
+</li>
+<li>INCLUDE_vTaskCleanUpResources
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a7ee138825e57f243c8ee5fd4207b9e26">FreeRTOSConfig.h</a>
+</li>
+<li>INCLUDE_vTaskDelay
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a24361a6eb816a965f1ee4e2e08e364f8">FreeRTOSConfig.h</a>
+</li>
+<li>INCLUDE_vTaskDelayUntil
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#ae8459bfd5b428319bb10de9f504a53aa">FreeRTOSConfig.h</a>
+</li>
+<li>INCLUDE_vTaskDelete
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a5ae1434fdf995108dc749ff9329f53bd">FreeRTOSConfig.h</a>
+</li>
+<li>INCLUDE_vTaskPrioritySet
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#ad6858ac8aaf726007fd19752956ef1bd">FreeRTOSConfig.h</a>
+</li>
+<li>INCLUDE_vTaskSuspend
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#aef8fbb97819ad3d962f334ac298206d1">FreeRTOSConfig.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_k.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index__"><span>_</span></a></li>
+      <li><a href="globals_a.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li class="current"><a href="globals_k.html#index_k"><span>k</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_x.html#index_x"><span>x</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>KILOBYTE
+: <a class="el" href="d8/ddd/pal__update__test_8c.html#a35721ed2d9f78cd139ea6f6c35432a4a">pal_update_test.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_l.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li class="current"><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>led1()
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+<li>led_thread()
+: <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26">pal_socket_test_main_mbedOS.cpp</a>
+, <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26">pal_rtos_test_main_mbedOS.cpp</a>
+</li>
+<li>LITTLE__ENDIAN
+: <a class="el" href="db/dcf/pal__macros_8h.html#a1651594dc71abf466bddd0f6393edb8b">pal_macros.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_m.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li class="current"><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>main()
+: <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">pal_all_test_main_mbedOS.cpp</a>
+, <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+<li>MEMORY_POOL1_BLOCK_COUNT
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a3c0ce22bdba74fe398c6adefbc7fbbdf">pal_rtos_test_utils.h</a>
+</li>
+<li>MEMORY_POOL1_BLOCK_SIZE
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#ae3c2c737bcf6b45c3bf394dfe8349c4d">pal_rtos_test_utils.h</a>
+</li>
+<li>MEMORY_POOL2_BLOCK_COUNT
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a593d40fc26d9d1664c57988a846a888e">pal_rtos_test_utils.h</a>
+</li>
+<li>MEMORY_POOL2_BLOCK_SIZE
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a3c85d7e7f47d26444477603d8e2fd5d5">pal_rtos_test_utils.h</a>
+</li>
+<li>mutex1
+: <a class="el" href="da/d2d/pal__rtos__test_8c.html#adb164ebbfd2189f434f5e550e2d93bb4">pal_rtos_test.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#adb164ebbfd2189f434f5e550e2d93bb4">pal_rtos_test_utils.h</a>
+</li>
+<li>mutex2
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a8706c6b975e957968f23af2812bbc0cb">pal_rtos_test_utils.h</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a8706c6b975e957968f23af2812bbc0cb">pal_rtos_test.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_n.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li class="current"><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>NULLPTR
+: <a class="el" href="d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab">pal_types.h</a>
+</li>
+<li>NVIC_SystemReset()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a1b47d17e90b6a03e7bd1ec6a0d549b46">pal_plat_rtos.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_p.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1099 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li class="current"><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PAL_AF_INET
+: <a class="el" href="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a9420d0656d763eeeb6c97243e0514f4f">pal_network.h</a>
+</li>
+<li>PAL_AF_INET6
+: <a class="el" href="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a7375b598bd48e43e8869594d96b2c0d7">pal_network.h</a>
+</li>
+<li>PAL_AF_UNSPEC
+: <a class="el" href="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7af6e1af9f402ae053ad1ac009b61957c3">pal_network.h</a>
+</li>
+<li>pal_bind()
+: <a class="el" href="d1/dc4/pal__network_8c.html#ac1ff0fb22cbd84e6c7920c095ddbde63">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#ac1ff0fb22cbd84e6c7920c095ddbde63">pal_network.h</a>
+</li>
+<li>pal_close()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a18197e0f047f17d2617461594f5ed644">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a18197e0f047f17d2617461594f5ed644">pal_network.h</a>
+</li>
+<li>pal_destroy()
+: <a class="el" href="d7/d66/pal__init_8c.html#a312dfda15122dbd2abff67b580c811ad">pal_init.c</a>
+, <a class="el" href="d9/d16/pal_8h.html#a312dfda15122dbd2abff67b580c811ad">pal.h</a>
+</li>
+<li>PAL_DIVIDE_ROUND_UP
+: <a class="el" href="db/dcf/pal__macros_8h.html#a966411fe41e3830553bb1b8cf8baf730">pal_macros.h</a>
+</li>
+<li>PAL_ERR_BUFFER_TOO_SMALL
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a46dd726962c185841ba6b2a6a51716f9">pal_errors.h</a>
+</li>
+<li>PAL_ERR_CREATION_FAILED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aed6967ecb83464f0d078f210da21c308">pal_errors.h</a>
+</li>
+<li>PAL_ERR_GENERAL_BASE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35">pal_errors.h</a>
+</li>
+<li>PAL_ERR_GENERIC_FAILURE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa7f2512e5c7b5a9ac52c061d139bc7d4">pal_errors.h</a>
+</li>
+<li>PAL_ERR_INVALID_ARGUMENT
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a744e1823284f7cc0575234cb7ef00818">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_C
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a393e3aee68a29b56f296410882a61ee1">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_CRYPTO
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a8a27e540ac27fc7fb67c75eeb233b944">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_GENERAL
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_NET
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_PAL
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_RTOS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_TLS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1aa9aff26dbdc5924c6d244d7c0727957d">pal_errors.h</a>
+</li>
+<li>PAL_ERR_MODULE_UPDATE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e">pal_errors.h</a>
+</li>
+<li>PAL_ERR_NO_MEMORY
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a12207f367341fdf5946140874b26729c">pal_errors.h</a>
+</li>
+<li>PAL_ERR_NOT_IMPLEMENTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abeb3c1cb1631b2decdf863ba4875f86a">pal_errors.h</a>
+</li>
+<li>PAL_ERR_NOT_INITIALIZED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4d8a84476204387d3b5e720b3e0777c">pal_errors.h</a>
+</li>
+<li>PAL_ERR_NOT_SUPPORTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7b7f0ee07b070ec75d101dfa292b9d94">pal_errors.h</a>
+</li>
+<li>PAL_ERR_NULL_POINTER
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5a632cfd6ad51b23b088ef5bf8a50107">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_ERROR_BASE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_ISR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a81f5a29e0f8f421412636195cd7eafef">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_ISR_RECURSIVE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5791ca907d7d2c5e811c1ff8a79ef3f4">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_NO_MEMORY
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4e823bf084db0abf95f92e644e44413">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_OS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad783bb526712a8fc40b8c7e9e2dcca70">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_PARAMETER
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5af57d1b96cac027006285d3e946f72da7">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_PRIORITY
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa372d184ebea174a9a807a6af5feedbb">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_RESOURCE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ab842a33fc2033095f7526d36e76ffde3">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_TIMEOUT
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4f005aeb7022829339f50e6a1c48f07b">pal_errors.h</a>
+</li>
+<li>PAL_ERR_RTOS_VALUE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a166a7c0ad427986e42eee2d7ed5f2690">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_ADDRESS_IN_USE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aef19ff78785fd271b93bec327551f74e">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_ALREADY_CONNECTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a05b82765d558b836fc988283d1d93e20">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_AUTH_ERROR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8f07f3411c26d3107b86d64739b18fd8">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_CONNECTION_ABORTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7027cc594e676d26ade0efcca3d4a8cf">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_CONNECTION_CLOSED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7449190771bd90f1b5dd54f0626c4d50">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_CONNECTION_RESET
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae917d0749e3e541369413c782d6a1f3b">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_DNS_ERROR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aeb186326d561fd71f180d59ab12b0d5f">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_ERROR_BASE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_FAILED_TO_SET_SOCKET_TO_NON_BLOCKING
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a557f240d9723393b246c9d03ad5789cd">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_GENERIC
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abd4cc21a7f65533cf8dfc118b19957fe">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_HDCP_ERROR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a352e14b96bd1489c42728f4da485b577">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_HOST_UNREACHABLE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4d5cc5d96a1f1d23f69cf3fead9291e2">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_IN_PROGRES
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a493871f4bc0b3223df779b89a3b0b829">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_INPUT_OUTPUT_ERROR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae2f7bce589b21231745767161c43349d">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_INVALID_ADDRESS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a033490de59972a46877f230267a070c8">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a3c0172ff8cc391873b83c9a1b7b6bd35">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_INVALID_VALUE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ade5fcfb0a8b3810ef513c25e7722db6e">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_NO_BUFFERS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a25f6affacd34aaf7e734a666b5186f2d">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_NOT_CONNECTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a90f2efed44c1dbb04928d381355ece58">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a9a2d6af2657b5abd81bd38c7c6cf0479">pal_errors.h</a>
+</li>
+<li>PAL_ERR_SOCKET_WOULD_BLOCK
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a089003c7bd380a8426f211fedfb813ea">pal_errors.h</a>
+</li>
+<li>PAL_ERR_TIMEOUT_EXPIRED
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a316210ded62b55ed1bbcc4e3c5ce8a49">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_BUSY
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a123c0937e9046005938c724b7e0c7daf">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_CHUNK_TO_SMALL
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4dffb58d0202d7ca5ac60eff42313ac9">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_END_OF_IMAGE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaacb4fc41bcde230f42aeb05bfaccf42">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_ERROR
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a29017351514ed7e0a1fb46d6f1b53cb5">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_ERROR_BASE
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_OUT_OF_BOUNDS
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a6f29986bcfb1cc0f26c1dfa17fa44cf6">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_PALFROM_API
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ada39f2992787040da527359ce7a25a57">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_PALFROM_IO
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaa9a76afb13586743e21ece5310487e6">pal_errors.h</a>
+</li>
+<li>PAL_ERR_UPDATE_TIMEOUT
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5afaeb01c79160229de16f8b764224823b">pal_errors.h</a>
+</li>
+<li>pal_getNetInterfaceInfo()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a5258efd8b21d9c881df29b29686674d8">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a5258efd8b21d9c881df29b29686674d8">pal_network.h</a>
+</li>
+<li>pal_getNumberOfNetInterfaces()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a65df7c68bcf7a21db5d1a7a3830fd19c">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a65df7c68bcf7a21db5d1a7a3830fd19c">pal_network.h</a>
+</li>
+<li>pal_getSockAddrIPV4Addr()
+: <a class="el" href="d1/dc4/pal__network_8c.html#ade5cf610808db5462666465b648e7724">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#ade5cf610808db5462666465b648e7724">pal_network.h</a>
+</li>
+<li>pal_getSockAddrIPV6Addr()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a153bc6165f64bbf3e6bcc79b0d39138f">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a153bc6165f64bbf3e6bcc79b0d39138f">pal_network.h</a>
+</li>
+<li>pal_getSockAddrPort()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a4658c7e8224b536d4fd71fed2602b12e">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a4658c7e8224b536d4fd71fed2602b12e">pal_network.h</a>
+</li>
+<li>pal_getSocketOptions()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a2d9d4e04e43995123efe134c767cd6e1">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a2d9d4e04e43995123efe134c767cd6e1">pal_network.h</a>
+</li>
+<li>PAL_HOST_TO_LITTLE_ENDIAN_16BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#a9bd4f76c3897b4338fe50a8d69830fe5">pal_macros.h</a>
+</li>
+<li>PAL_HOST_TO_LITTLE_ENDIAN_32BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#ab01046a25df49d7fe1d85a8bf722975f">pal_macros.h</a>
+</li>
+<li>PAL_HOST_TO_LITTLE_ENDIAN_64BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#adc0a4752569188800a75e1601a7e11b5">pal_macros.h</a>
+</li>
+<li>PAL_HTONL
+: <a class="el" href="db/dcf/pal__macros_8h.html#a55b1a7d9f939231045521ec4a4817cff">pal_macros.h</a>
+</li>
+<li>PAL_HTONS
+: <a class="el" href="db/dcf/pal__macros_8h.html#a98390512a7c2732f1197b07acf03e226">pal_macros.h</a>
+</li>
+<li>pal_in_addr_t
+: <a class="el" href="d1/dc4/pal__network_8c.html#abd4e26912e35fc58e5bc0172765bdc6e">pal_network.c</a>
+</li>
+<li>pal_init()
+: <a class="el" href="d7/d66/pal__init_8c.html#a28095bec6e2c1c74ad3b08414f44b9d6">pal_init.c</a>
+, <a class="el" href="d9/d16/pal_8h.html#a28095bec6e2c1c74ad3b08414f44b9d6">pal.h</a>
+</li>
+<li>PAL_INVERSE_UINT16_BYTES
+: <a class="el" href="db/dcf/pal__macros_8h.html#ad989cc9220df56cd410590fc628e93b7">pal_macros.h</a>
+</li>
+<li>PAL_INVERSE_UINT32_BYTES
+: <a class="el" href="db/dcf/pal__macros_8h.html#a4a0b711e344955017ab60ff37977e18f">pal_macros.h</a>
+</li>
+<li>PAL_INVERSE_UINT64_BYTES
+: <a class="el" href="db/dcf/pal__macros_8h.html#ae376dc7d0682fb2fc8927897fb065c4c">pal_macros.h</a>
+</li>
+<li>PAL_IPV4_ADDRESS_SIZE
+: <a class="el" href="d9/d17/pal__network_8h.html#ad7a3e182cb430da7c139858b0bfbb27f">pal_network.h</a>
+</li>
+<li>PAL_IPV6_ADDRESS_SIZE
+: <a class="el" href="d9/d17/pal__network_8h.html#a9903ebae215b70520c8dcc9f0aa03e24">pal_network.h</a>
+</li>
+<li>PAL_LITTLE_ENDIAN_TO_HOST_16BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#ad1c98870c5eeba8fe649345e371ef866">pal_macros.h</a>
+</li>
+<li>PAL_LITTLE_ENDIAN_TO_HOST_32BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#aa6229ece344478c07677c8b0436b1bb0">pal_macros.h</a>
+</li>
+<li>PAL_LITTLE_ENDIAN_TO_HOST_64BIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#a4ae1ca0100a3eee36eb95931cbec633e">pal_macros.h</a>
+</li>
+<li>PAL_MAX
+: <a class="el" href="db/dcf/pal__macros_8h.html#a117c6ce53646b65b4cdcb5da01801675">pal_macros.h</a>
+</li>
+<li>PAL_MAX_INT32
+: <a class="el" href="db/dcf/pal__macros_8h.html#a6ee734c1fc41affa0926797e382fc8d4">pal_macros.h</a>
+</li>
+<li>PAL_MAX_INT64
+: <a class="el" href="db/dcf/pal__macros_8h.html#ada154fcb4b3ef9b641486f30de56c7b7">pal_macros.h</a>
+</li>
+<li>PAL_MAX_NUMBER_OF_THREADS
+: <a class="el" href="d2/d87/pal__configuration_8h.html#abb1ceb83ff6a709614d1394e7e39391d">pal_configuration.h</a>
+</li>
+<li>PAL_MAX_SUPORTED_NET_INTEFACES
+: <a class="el" href="d2/d87/pal__configuration_8h.html#a79ed46284848e83d0dba68933c40f82a">pal_configuration.h</a>
+</li>
+<li>PAL_MAX_UINT16
+: <a class="el" href="db/dcf/pal__macros_8h.html#af8d58ab12b0f655fe922fc40b3e52ca2">pal_macros.h</a>
+</li>
+<li>PAL_MAX_UINT32
+: <a class="el" href="db/dcf/pal__macros_8h.html#ac7e2d509703ff033a302b325aa664f6e">pal_macros.h</a>
+</li>
+<li>PAL_MAX_UINT64
+: <a class="el" href="db/dcf/pal__macros_8h.html#a28a8006d7bca3b64235ca4d0cb39bf2b">pal_macros.h</a>
+</li>
+<li>PAL_MAX_UINT8
+: <a class="el" href="db/dcf/pal__macros_8h.html#a08c56fc189bfb1a6864a7b5d68433e7e">pal_macros.h</a>
+</li>
+<li>PAL_MIN
+: <a class="el" href="db/dcf/pal__macros_8h.html#a29066dd6aaf6aa8fa21f3a88feb6da59">pal_macros.h</a>
+</li>
+<li>PAL_MIN_INT32
+: <a class="el" href="db/dcf/pal__macros_8h.html#ac3a2f334767728e9bc57512139e0bd61">pal_macros.h</a>
+</li>
+<li>PAL_MODULE_DEINIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#aaeb3e06c7119793239368c0fe74cda05">pal_macros.h</a>
+</li>
+<li>PAL_MODULE_INIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#ad2109677fa03720f6ab0df072c755529">pal_macros.h</a>
+</li>
+<li>PAL_MODULE_IS_INIT
+: <a class="el" href="db/dcf/pal__macros_8h.html#ade9a83a9aab96cf50058801afdef4ace">pal_macros.h</a>
+</li>
+<li>PAL_MUTEX_DATA_SIZE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#af12d673085039783ab1d2613eff7e4a4">pal_plat_rtos.c</a>
+</li>
+<li>PAL_NET_ASYNCHRONOUS_SOCKET_API
+: <a class="el" href="d2/d87/pal__configuration_8h.html#a337c171a4cf5d7f04894051002d81eba">pal_configuration.h</a>
+</li>
+<li>PAL_NET_DEFAULT_INTERFACE
+: <a class="el" href="d9/d17/pal__network_8h.html#aefc09884590381a71433c34b3f2e2aa5">pal_network.h</a>
+</li>
+<li>PAL_NET_DNS_SUPPORT
+: <a class="el" href="d2/d87/pal__configuration_8h.html#ad7e2f6ebd028faacc239229cce972fa7">pal_configuration.h</a>
+</li>
+<li>PAL_NET_MAX_ADDR_SIZE
+: <a class="el" href="d9/d17/pal__network_8h.html#ac831e2e5064065e10c741da1003ff039">pal_network.h</a>
+</li>
+<li>PAL_NET_SELECT_IS_ERR
+: <a class="el" href="d9/d17/pal__network_8h.html#ac2b7451d38e150079fbef20b57ee3fe9">pal_network.h</a>
+</li>
+<li>PAL_NET_SELECT_IS_RX
+: <a class="el" href="d9/d17/pal__network_8h.html#a8894a96773018ba6058811087b4b2ac8">pal_network.h</a>
+</li>
+<li>PAL_NET_SELECT_IS_TX
+: <a class="el" href="d9/d17/pal__network_8h.html#a31ca79ac9ae5c2ddd890263a989fc4d8">pal_network.h</a>
+</li>
+<li>PAL_NET_SOCKET_SELECT_ERR_BIT
+: <a class="el" href="d9/d17/pal__network_8h.html#aa66d7131cc6c44ac6c5ab6a9dda3f69a">pal_network.h</a>
+</li>
+<li>PAL_NET_SOCKET_SELECT_MAX_SOCKETS
+: <a class="el" href="d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31">pal_network.h</a>
+</li>
+<li>PAL_NET_SOCKET_SELECT_RX_BIT
+: <a class="el" href="d9/d17/pal__network_8h.html#aae14933b48cd31821913f2bfb15e18b2">pal_network.h</a>
+</li>
+<li>PAL_NET_SOCKET_SELECT_TX_BIT
+: <a class="el" href="d9/d17/pal__network_8h.html#ad8ddc879cf2eace65036137660b8b53d">pal_network.h</a>
+</li>
+<li>PAL_NET_SUPPORT_LWIP
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#abc23815d68dafc619e2c2ba210d65bd0">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TCP_AND_TLS_SUPPORT
+: <a class="el" href="d2/d87/pal__configuration_8h.html#a4662be64705952cfa0925001c9d917c3">pal_configuration.h</a>
+</li>
+<li>PAL_NET_TEST_INCOMING_PORT
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#ab1873f5ba58eb802dd808f05a1101670">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TEST_SERVER_HTTP_PORT
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a7c3cef32674c412f87617e87a194e0e3">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TEST_SERVER_IP
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a0570e783c7412d25d0c33817da54c02f">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TEST_SERVER_IP_STRING
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a7175d943793d9a92ebe83d12f2a65063">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TEST_SERVER_NAME
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#abbe7571a0fc631eb43561606f4d5bb0e">pal_socket_test.c</a>
+</li>
+<li>PAL_NET_TEST_SERVER_UDP_PORT
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#abc63439a9af70c80b125accdc2afbb12">pal_socket_test.c</a>
+</li>
+<li>PAL_NTOHL
+: <a class="el" href="db/dcf/pal__macros_8h.html#a7cbc81d1fb0dcddb1cc88b59d50c2aa9">pal_macros.h</a>
+</li>
+<li>PAL_NTOHS
+: <a class="el" href="db/dcf/pal__macros_8h.html#a55fbcf7a453813fec69016916802de2c">pal_macros.h</a>
+</li>
+<li>PAL_NUM_OF_THREAD_INSTANCES
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a9b3b50428d7ad199287a291137041c43">pal_plat_rtos.c</a>
+</li>
+<li>pal_osAtomicIncrement()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a9b33d260ee1022f5b5f6a9dfc3363f2a">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a9b33d260ee1022f5b5f6a9dfc3363f2a">pal_rtos.h</a>
+</li>
+<li>pal_osDelay()
+: <a class="el" href="de/d33/pal__rtos_8c.html#ad6aaee432fd7ea5e35ab500a6278cc25">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#ad6aaee432fd7ea5e35ab500a6278cc25">pal_rtos.h</a>
+</li>
+<li>pal_osKernelSysMilliSecTick()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a59e85747582417a1395ed0f9c140eb8a">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a59e85747582417a1395ed0f9c140eb8a">pal_rtos.h</a>
+</li>
+<li>pal_osKernelSysTick()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a9800b8b9e057fe17e50c4259c809f898">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a9800b8b9e057fe17e50c4259c809f898">pal_rtos.h</a>
+</li>
+<li>pal_osKernelSysTick64()
+: <a class="el" href="de/d33/pal__rtos_8c.html#af88551b6ca24a7a2bb6d94d423eb4401">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#af88551b6ca24a7a2bb6d94d423eb4401">pal_rtos.h</a>
+</li>
+<li>pal_osKernelSysTickFrequency()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a087214ae87c20fd59f47fe3c96d0eefc">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a087214ae87c20fd59f47fe3c96d0eefc">pal_rtos.h</a>
+</li>
+<li>pal_osKernelSysTickMicroSec()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a34375ee82619a4064849daccbdfbc966">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a34375ee82619a4064849daccbdfbc966">pal_rtos.h</a>
+</li>
+<li>pal_osMessageGet()
+: <a class="el" href="de/d33/pal__rtos_8c.html#ab70d0be45514258874c0406c2040372c">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#ab70d0be45514258874c0406c2040372c">pal_rtos.h</a>
+</li>
+<li>pal_osMessagePut()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a966daa5b0bd9282fbffa7c462da1c417">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a966daa5b0bd9282fbffa7c462da1c417">pal_rtos.h</a>
+</li>
+<li>pal_osMessageQueueCreate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a0c7f0003e92b3494089966d53ab24a1b">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a0c7f0003e92b3494089966d53ab24a1b">pal_rtos.h</a>
+</li>
+<li>pal_osMessageQueueDestroy()
+: <a class="el" href="de/d33/pal__rtos_8c.html#adba13212ec060092acdf6165e82be5b6">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#adba13212ec060092acdf6165e82be5b6">pal_rtos.h</a>
+</li>
+<li>pal_osMutexCreate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#af89aab14085207b1a0951f7aad24193c">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#af89aab14085207b1a0951f7aad24193c">pal_rtos.h</a>
+</li>
+<li>pal_osMutexDelete()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a03f43d7e53435d89f316862b48b573c4">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a03f43d7e53435d89f316862b48b573c4">pal_rtos.h</a>
+</li>
+<li>pal_osMutexRelease()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a1d976a616a5c850b2016b2b87d8b47cc">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a1d976a616a5c850b2016b2b87d8b47cc">pal_rtos.h</a>
+</li>
+<li>pal_osMutexWait()
+: <a class="el" href="de/d33/pal__rtos_8c.html#acda0974247325955719b23494d66c622">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#acda0974247325955719b23494d66c622">pal_rtos.h</a>
+</li>
+<li>pal_osPoolAlloc()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a3a2b57685096d16a110ee38f7f29e099">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a3a2b57685096d16a110ee38f7f29e099">pal_rtos.h</a>
+</li>
+<li>pal_osPoolCAlloc()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a5d20661cd387a172450a2fe12993687a">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a5d20661cd387a172450a2fe12993687a">pal_rtos.h</a>
+</li>
+<li>pal_osPoolCreate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a1245f053abb3fdb7ab2ceb5a2899e8c6">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a1245f053abb3fdb7ab2ceb5a2899e8c6">pal_rtos.h</a>
+</li>
+<li>pal_osPoolDestroy()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a1c01464448f8d7bd95bf518d651484c6">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a1c01464448f8d7bd95bf518d651484c6">pal_rtos.h</a>
+</li>
+<li>pal_osPoolFree()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a79f4997069310aa7bbb6ae7995988dd7">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a79f4997069310aa7bbb6ae7995988dd7">pal_rtos.h</a>
+</li>
+<li>pal_osPriority
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityAboveNormal
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ac6ad927a77b4275e1da2373f810ee2af">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityBelowNormal
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a23fdf72acf5a9475ca4054d4e1a187a5">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityError
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a94aea8f14f0bc89f7f4540416c08da3e">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityHigh
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a70d584591ab861e247ccfe94e55e35a2">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityIdle
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a62b0350b25146b93c57a71ce65bb017a">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityLow
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ab3b5b218f45b07de8153427c63273fec">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityNormal
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a897a2d3cf2fa39f82141535d0d4e51a1">pal_rtos.h</a>
+</li>
+<li>PAL_osPriorityRealtime
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a3c2b8a244cae70bbf23a5a4d033df2ce">pal_rtos.h</a>
+</li>
+<li>pal_osReboot()
+: <a class="el" href="de/d33/pal__rtos_8c.html#ab8ab0f31bbf4258b7684d22e7725a9f8">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#ab8ab0f31bbf4258b7684d22e7725a9f8">pal_rtos.h</a>
+</li>
+<li>pal_osSemaphoreCreate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#aaa7aee442a5c8cc274d3e52206984037">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#aaa7aee442a5c8cc274d3e52206984037">pal_rtos.h</a>
+</li>
+<li>pal_osSemaphoreDelete()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a45f071482f8669821b90264e0470b33d">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a45f071482f8669821b90264e0470b33d">pal_rtos.h</a>
+</li>
+<li>pal_osSemaphoreRelease()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a009d0c063119265f9c5c0c9bff379c14">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a009d0c063119265f9c5c0c9bff379c14">pal_rtos.h</a>
+</li>
+<li>pal_osSemaphoreWait()
+: <a class="el" href="de/d33/pal__rtos_8c.html#aa2d998744dbc9504bfe0358f85457fc4">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#aa2d998744dbc9504bfe0358f85457fc4">pal_rtos.h</a>
+</li>
+<li>pal_osThreadCreate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a2dae64d917f644982b893037adf562b4">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a2dae64d917f644982b893037adf562b4">pal_rtos.h</a>
+</li>
+<li>pal_osThreadGetId()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a2993b8f6b5e8d7ccd6121dc18330e4be">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a2993b8f6b5e8d7ccd6121dc18330e4be">pal_rtos.h</a>
+</li>
+<li>pal_osThreadGetLocalStore()
+: <a class="el" href="de/d33/pal__rtos_8c.html#ac94f4efc4bad73969e57c8255c136a0d">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#ac94f4efc4bad73969e57c8255c136a0d">pal_rtos.h</a>
+</li>
+<li>pal_osThreadTerminate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#abcfa47b411929b33d5d9cfaaff28ce18">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#abcfa47b411929b33d5d9cfaaff28ce18">pal_rtos.h</a>
+</li>
+<li>pal_osTimerCreate()
+: <a class="el" href="de/d33/pal__rtos_8c.html#aa4da36fbbba744a14d1bdfe2a26d1a18">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#aa4da36fbbba744a14d1bdfe2a26d1a18">pal_rtos.h</a>
+</li>
+<li>pal_osTimerDelete()
+: <a class="el" href="de/d33/pal__rtos_8c.html#ac7ca6e7c3c229f4092c9df4b69e7dd59">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#ac7ca6e7c3c229f4092c9df4b69e7dd59">pal_rtos.h</a>
+</li>
+<li>pal_osTimerStart()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a6c60c9e433bc6005bac6b02d5aba7363">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a6c60c9e433bc6005bac6b02d5aba7363">pal_rtos.h</a>
+</li>
+<li>pal_osTimerStop()
+: <a class="el" href="de/d33/pal__rtos_8c.html#a94f4df594102e582cbd2114f6eebb57d">pal_rtos.c</a>
+, <a class="el" href="d4/d01/pal__rtos_8h.html#a94f4df594102e582cbd2114f6eebb57d">pal_rtos.h</a>
+</li>
+<li>pal_plat_bind()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#a53a267fd8ed0b7a5cf988224e95bd47c">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a53a267fd8ed0b7a5cf988224e95bd47c">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_close()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#a071355a0ca4d4eece45f0ed85a9ab1da">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a071355a0ca4d4eece45f0ed85a9ab1da">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_getNetInterfaceInfo()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a6dc3b4c06e96b29068995809b98a935e">pal_plat_network.cpp</a>
+, <a class="el" href="d9/d2c/pal__plat__network_8h.html#a6dc3b4c06e96b29068995809b98a935e">pal_plat_network.h</a>
+</li>
+<li>pal_plat_getNumberOfNetInterfaces()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#af36bf075867e5ed0be7479312469361f">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#af36bf075867e5ed0be7479312469361f">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_getSocketOptions()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a76c4e2adf95702c4db8f3792ae373bf9">pal_plat_network.cpp</a>
+, <a class="el" href="d9/d2c/pal__plat__network_8h.html#a76c4e2adf95702c4db8f3792ae373bf9">pal_plat_network.h</a>
+</li>
+<li>pal_plat_osAtomicIncrement()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ac62a5b36fc159e12670c44a12dc08beb">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ac62a5b36fc159e12670c44a12dc08beb">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osDelay()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a140b31a48ac23c909f1a94ad11b04aac">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a140b31a48ac23c909f1a94ad11b04aac">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osKernelSysMilliSecTick()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a82eade9e7b100bd9dc9ab8312f98f827">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a82eade9e7b100bd9dc9ab8312f98f827">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osKernelSysTick()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ae92f87b121a06e0062ee014025c0ba9e">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ae92f87b121a06e0062ee014025c0ba9e">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osKernelSysTick64()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ad104e06e7b043305fdbfbc37e4ea2826">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osKernelSysTickFrequency()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#aacd58e95c23ad1c8f39b8b12ed2d83dd">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#addc790764a23a3e16344bd830ebe01ef">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osKernelSysTickMicroSec()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a2d18206974bdf17c48b97e2e16505f19">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a2d18206974bdf17c48b97e2e16505f19">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMessageGet()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a67696b86a6116a82da7c26a433280e58">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a67696b86a6116a82da7c26a433280e58">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMessagePut()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#aa80549a557e50e0759991c6b11eb456a">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aa80549a557e50e0759991c6b11eb456a">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMessageQueueCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ad25c8f7cb22985b077e893be5bc27d48">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ad25c8f7cb22985b077e893be5bc27d48">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMessageQueueDestroy()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a0e0e6dc9958a9efd9beb62493bc3f67a">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a0e0e6dc9958a9efd9beb62493bc3f67a">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMutexCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ae2425f958ab7d58eff5c5b3183f40305">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ae2425f958ab7d58eff5c5b3183f40305">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMutexDelete()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a909f4ae03b0acef0b84609d9b76679b4">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a909f4ae03b0acef0b84609d9b76679b4">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMutexRelease()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#add4dbca7b11365e7301db1425c9fdf4d">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#add4dbca7b11365e7301db1425c9fdf4d">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osMutexWait()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#aea4ad5224c43ff0fff2b77798d19748c">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aea4ad5224c43ff0fff2b77798d19748c">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osPoolAlloc()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a5938d16ea0c12594e8f8becd20acf3a7">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a5938d16ea0c12594e8f8becd20acf3a7">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osPoolCAlloc()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a8dff6b49f9798cdd4eed04f3dff30330">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a8dff6b49f9798cdd4eed04f3dff30330">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osPoolCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a7a4fa20255fe38cf183f6c924419fe85">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a7a4fa20255fe38cf183f6c924419fe85">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osPoolDestroy()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a33ca5b5e9d3a80594de4977924e6bc1b">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a33ca5b5e9d3a80594de4977924e6bc1b">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osPoolFree()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a84e2f41a587335de053e0b7f8a4163c2">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a84e2f41a587335de053e0b7f8a4163c2">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osReboot()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a894db4d6fe636ef7a7ebf83d4334adbd">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#abdb6ab5827d588b9c2e908beda4c3154">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osSemaphoreCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a6e7b3c23b094270b4e013c4412f2d3b1">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a6e7b3c23b094270b4e013c4412f2d3b1">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osSemaphoreDelete()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ab37f3153b73dc87ca609c4c2e1bf8d6a">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ab37f3153b73dc87ca609c4c2e1bf8d6a">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osSemaphoreRelease()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a252f210ce8a502891821b5af24b09822">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a252f210ce8a502891821b5af24b09822">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osSemaphoreWait()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#ac9231eef550eb7b62a89e7a34b62d014">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#ac9231eef550eb7b62a89e7a34b62d014">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osThreadCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a9c965e0fdfd80fc86c901cf2bde88c64">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a9c965e0fdfd80fc86c901cf2bde88c64">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osThreadGetId()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a4c42c35d3d7b375833a51b4670febe92">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a4c42c35d3d7b375833a51b4670febe92">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osThreadGetLocalStore()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#aca6b1b2f34861cf8e3d2dcc076992270">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aca6b1b2f34861cf8e3d2dcc076992270">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osThreadTerminate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a3117f8911b3e83e27031f366aa652a4f">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a3117f8911b3e83e27031f366aa652a4f">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osTimerCreate()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#aee15bcaba1ed33c264bc4c91c1dbb1cf">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aee15bcaba1ed33c264bc4c91c1dbb1cf">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_osTimerDelete()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a9723baa43780a1083f43d786fa53a73d">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a9723baa43780a1083f43d786fa53a73d">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osTimerStart()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a80f5ca578197088e4cf84042c9efc2d7">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a80f5ca578197088e4cf84042c9efc2d7">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_osTimerStop()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a2f1fdb410c4d6ae382622ef4f1884808">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a2f1fdb410c4d6ae382622ef4f1884808">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_receiveFrom()
+: <a class="el" href="d9/d2c/pal__plat__network_8h.html#aa869b5eddbf4eb6aebbbb587ece84aac">pal_plat_network.h</a>
+, <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#aa869b5eddbf4eb6aebbbb587ece84aac">pal_plat_network.cpp</a>
+</li>
+<li>pal_plat_RegisterNetworkInterface()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#ab37f007a0574ca73916b26240ff1126b">pal_plat_network.cpp</a>
+, <a class="el" href="d9/d2c/pal__plat__network_8h.html#a9f6e13112366978741749649356a886c">pal_plat_network.h</a>
+</li>
+<li>pal_plat_RTOSDestroy()
+: <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a8a484abc75cf595862459d6ab21c7a0c">pal_plat_rtos.h</a>
+, <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a8a484abc75cf595862459d6ab21c7a0c">pal_plat_rtos.c</a>
+</li>
+<li>pal_plat_RTOSInitialize()
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a2e7aaf20f2cad3b04061e1c3fd748c42">pal_plat_rtos.c</a>
+, <a class="el" href="d5/d59/pal__plat__rtos_8h.html#a2e7aaf20f2cad3b04061e1c3fd748c42">pal_plat_rtos.h</a>
+</li>
+<li>pal_plat_sendTo()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a17365747ed8d29df153a336da3942187">pal_plat_network.cpp</a>
+, <a class="el" href="d9/d2c/pal__plat__network_8h.html#a17365747ed8d29df153a336da3942187">pal_plat_network.h</a>
+</li>
+<li>pal_plat_setSocketOptions()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a08ea05dacec7f7d9dc892dab0318542d">pal_plat_network.cpp</a>
+, <a class="el" href="d9/d2c/pal__plat__network_8h.html#a08ea05dacec7f7d9dc892dab0318542d">pal_plat_network.h</a>
+</li>
+<li>pal_plat_socket()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a58a25ae30bb6225cc8b5344053fd705c">pal_plat_network.cpp</a>
+, <a class="el" href="d9/d2c/pal__plat__network_8h.html#a58a25ae30bb6225cc8b5344053fd705c">pal_plat_network.h</a>
+</li>
+<li>pal_plat_socketMiniSelect()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#aa0c26dfeee80444e58eacab238206d09">pal_plat_network.cpp</a>
+, <a class="el" href="d9/d2c/pal__plat__network_8h.html#aa0c26dfeee80444e58eacab238206d09">pal_plat_network.h</a>
+</li>
+<li>pal_plat_socketsInit()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#ab92cca0e4facf3d62e03c0d0ca0523da">pal_plat_network.cpp</a>
+, <a class="el" href="d9/d2c/pal__plat__network_8h.html#ab92cca0e4facf3d62e03c0d0ca0523da">pal_plat_network.h</a>
+</li>
+<li>pal_plat_socketsTerminate()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd">pal_plat_network.cpp</a>
+, <a class="el" href="d9/d2c/pal__plat__network_8h.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd">pal_plat_network.h</a>
+</li>
+<li>PAL_PRINTF
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a2e5b95b90c72b6bdf62897efd58f98fb">pal_rtos.h</a>
+</li>
+<li>pal_receiveFrom()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a6b5e705be1e7c3c16080f2b05b87ff7d">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a6b5e705be1e7c3c16080f2b05b87ff7d">pal_network.h</a>
+</li>
+<li>pal_registerNetworkInterface()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a081cc2fd09644c41068673487b39f6b8">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a081cc2fd09644c41068673487b39f6b8">pal_network.h</a>
+</li>
+<li>PAL_RTOS_64BIT_TICK_SUPPORTED
+: <a class="el" href="d2/d87/pal__configuration_8h.html#a2c7f7687d719d388a67c1f18f200962d">pal_configuration.h</a>
+</li>
+<li>PAL_RTOS_MEMORY_POOL_SIZE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a31d6d9a16b9891d7eb84e2b974c2c92b">pal_plat_rtos.c</a>
+</li>
+<li>PAL_RTOS_MESSAGE_Q_SIZE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aa1b17e5a20a5db09a3a3267f9a4191e0">pal_plat_rtos.c</a>
+</li>
+<li>PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aa25bb23dc9f40c91f9872c585e649723">pal_plat_rtos.c</a>
+</li>
+<li>PAL_RTOS_WAIT_FOREVER
+: <a class="el" href="d4/d01/pal__rtos_8h.html#ad19aa2a408e848a5f86d897ab50500ec">pal_rtos.h</a>
+</li>
+<li>PAL_SEMAPHORE_DATA_SIZE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a66dcd5bd7ca661597fecabb1795fa393">pal_plat_rtos.c</a>
+</li>
+<li>pal_sendTo()
+: <a class="el" href="d1/dc4/pal__network_8c.html#acce808f708e653b6bed317072888ca23">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#acce808f708e653b6bed317072888ca23">pal_network.h</a>
+</li>
+<li>pal_setSockAddrIPV4Addr()
+: <a class="el" href="d1/dc4/pal__network_8c.html#aed02a6f53b88e1d5e81607b1221a3efa">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#aed02a6f53b88e1d5e81607b1221a3efa">pal_network.h</a>
+</li>
+<li>pal_setSockAddrIPV6Addr()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a0cc13f7ef9ceb4a75884a8bebf0d831c">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a0cc13f7ef9ceb4a75884a8bebf0d831c">pal_network.h</a>
+</li>
+<li>pal_setSockAddrPort()
+: <a class="el" href="d1/dc4/pal__network_8c.html#abbeb1395896eb79ab564568b9ab8a628">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#abbeb1395896eb79ab564568b9ab8a628">pal_network.h</a>
+</li>
+<li>pal_setSocketOptions()
+: <a class="el" href="d1/dc4/pal__network_8c.html#a2e1bbe81a35a1cb54c351912bb97736f">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#a2e1bbe81a35a1cb54c351912bb97736f">pal_network.h</a>
+</li>
+<li>PAL_SO_RCVTIMEO
+: <a class="el" href="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a9e1ad5d4670e06bb2a8b110c0ba3e5ca">pal_network.h</a>
+</li>
+<li>PAL_SO_REUSEADDR
+: <a class="el" href="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a352587a3fea85695be1ce478aa3da001">pal_network.h</a>
+</li>
+<li>PAL_SO_SNDTIMEO
+: <a class="el" href="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51aa744f783051825333c23177008d140de">pal_network.h</a>
+</li>
+<li>PAL_SOCK_DGRAM
+: <a class="el" href="d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418a14e907287d0ede1306aa35f5687e0941">pal_network.h</a>
+</li>
+<li>pal_socket()
+: <a class="el" href="d1/dc4/pal__network_8c.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_network.c</a>
+, <a class="el" href="d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a">pal_network.h</a>
+</li>
+<li>PAL_SOCKET_OPTION_ERROR
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a8c607fcbfa526e4485fcdb55b79b39d6">pal_plat_network.cpp</a>
+</li>
+<li>pal_socketAddressInternal6_t
+: <a class="el" href="d1/dc4/pal__network_8c.html#aaf4e46664d7b7f8902c69cb72a65c943">pal_network.c</a>
+</li>
+<li>pal_socketAddressInternal_t
+: <a class="el" href="d1/dc4/pal__network_8c.html#abc2b368e206e7353e31a520fa573cd8a">pal_network.c</a>
+</li>
+<li>pal_socketMiniSelect()
+: <a class="el" href="d9/d17/pal__network_8h.html#a5cab4ea55a3d28cfd8d4dca8376a111c">pal_network.h</a>
+, <a class="el" href="d1/dc4/pal__network_8c.html#a5cab4ea55a3d28cfd8d4dca8376a111c">pal_network.c</a>
+</li>
+<li>PAL_SUCCESS
+: <a class="el" href="d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">pal_types.h</a>
+, <a class="el" href="db/dcf/pal__macros_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5">pal_macros.h</a>
+</li>
+<li>PAL_TEST_BUFFER_SIZE
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a0010ea5741ae7db441ef09f96eef47be">pal_socket_test.c</a>
+</li>
+<li>PAL_TICK_TO_MILLI_FACTOR
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a78b1f63823e34bc82e272358701cbe67">pal_plat_rtos.c</a>
+</li>
+<li>PAL_TIMER_DATA_SIZE
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aba1d833ce13b78f5648ec26cdd25f639">pal_plat_rtos.c</a>
+</li>
+<li>pal_timeVal_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_network.h</a>
+</li>
+<li>PAL_UNIQUE_THREAD_PRIORITY
+: <a class="el" href="d2/d87/pal__configuration_8h.html#a4d2f5187ecd7e90c094e2f103e5b6839">pal_configuration.h</a>
+</li>
+<li>palBuffer_t
+: <a class="el" href="d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">pal_types.h</a>
+</li>
+<li>palConstBuffer_t
+: <a class="el" href="d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">pal_types.h</a>
+</li>
+<li>palError_t
+: <a class="el" href="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5">pal_errors.h</a>
+</li>
+<li>palErrorModules_t
+: <a class="el" href="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1">pal_errors.h</a>
+</li>
+<li>palIpV4Addr_t
+: <a class="el" href="d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">pal_network.h</a>
+</li>
+<li>palIpV6Addr_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">pal_network.h</a>
+</li>
+<li>palMemoryPool_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#afa12596f9e3d06ce0b6fde07eb52d07a">pal_plat_rtos.c</a>
+</li>
+<li>palMemoryPoolID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">pal_rtos.h</a>
+</li>
+<li>palMessageQ_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a550ebbfa0932f76e30a372710bff8f60">pal_plat_rtos.c</a>
+</li>
+<li>palMessageQID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">pal_rtos.h</a>
+</li>
+<li>palMutex_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a366960ed96b6cf998870481300a739d4">pal_plat_rtos.c</a>
+</li>
+<li>palMutexID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">pal_rtos.h</a>
+</li>
+<li>palNetInterfaceInfo_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">pal_network.h</a>
+</li>
+<li>palOsTimerOnce
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2a0f237f01e8978b2dc987ff3b5cde0f30">pal_rtos.h</a>
+</li>
+<li>palOsTimerPeriodic
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2aadcc58d31964426d67650ca958fb80f9">pal_rtos.h</a>
+</li>
+<li>palRunThreads()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a393f7a6e534c05e534cfdaf46473db45">pal_rtos_test_utils.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a393f7a6e534c05e534cfdaf46473db45">pal_rtos_test.c</a>
+</li>
+<li>palSelectCallback0()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a056dbb70ade63a6ebc47f1f11733b8da">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback1()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a4dcff46004af6c4d300d542de9c7d38e">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback2()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#abe369a2a4de2c8e25ed47166f068918f">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback3()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#aeabad2d66db156a97447f6e22614e78c">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback4()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a521d96ff90d0b417e6749df8ae90bf8b">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback5()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#ae937bf3f397b1642a29a44c6cf9bc075">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback6()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a6b99c0251a9efb7224658c8da6e3ad27">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallback7()
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a6e102ddea1bd5315a4224c2a1fdddd58">pal_plat_network.cpp</a>
+</li>
+<li>palSelectCallbackFunction_t
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#abb42afef799c3d7409ba0c29d645cbaf">pal_plat_network.cpp</a>
+</li>
+<li>palSemaphore_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aaab2b2c34911a85e67be94866be7e515">pal_plat_rtos.c</a>
+</li>
+<li>palSemaphoreID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">pal_rtos.h</a>
+</li>
+<li>palSocket_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">pal_network.h</a>
+</li>
+<li>palSocketAddress_t
+: <a class="el" href="d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">pal_network.h</a>
+</li>
+<li>palSocketDomain_t
+: <a class="el" href="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7">pal_network.h</a>
+</li>
+<li>palSocketLength_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">pal_network.h</a>
+</li>
+<li>palSocketOptionName_t
+: <a class="el" href="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51">pal_network.h</a>
+</li>
+<li>palSocketType_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418">pal_network.h</a>
+</li>
+<li>palStatus_t
+: <a class="el" href="d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">pal_types.h</a>
+</li>
+<li>palTestGetNetWorkInterfaceContext()
+: <a class="el" href="d8/d5f/pal__socket__test__utils_8cpp.html#a5e4a39a385159acfd150a2e6098351cf">pal_socket_test_utils.cpp</a>
+, <a class="el" href="df/d2a/pal__socket__test__utils_8h.html#a5e4a39a385159acfd150a2e6098351cf">pal_socket_test_utils.h</a>
+</li>
+<li>palThread_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a06ecfc14d166863199ebfc4372d61127">pal_plat_rtos.c</a>
+</li>
+<li>palThreadFunc1()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a0a153da028aee8f220377b516ff065c8">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a0a153da028aee8f220377b516ff065c8">pal_rtos_test_utils.h</a>
+</li>
+<li>palThreadFunc2()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a29dc69cbcc48b55d48a5fd668da7fe15">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a29dc69cbcc48b55d48a5fd668da7fe15">pal_rtos_test_utils.c</a>
+</li>
+<li>palThreadFunc3()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#acf68b041960be3c58f516986504fcd0f">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#acf68b041960be3c58f516986504fcd0f">pal_rtos_test_utils.h</a>
+</li>
+<li>palThreadFunc4()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a844c7469189866b502ef85df5063e79c">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a844c7469189866b502ef85df5063e79c">pal_rtos_test_utils.c</a>
+</li>
+<li>palThreadFunc5()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a5be7a07498de9cc847215e6aa8f77914">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a5be7a07498de9cc847215e6aa8f77914">pal_rtos_test_utils.c</a>
+</li>
+<li>palThreadFunc6()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a52dc025f6020b0d456bbbcacc3aa4e3e">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a52dc025f6020b0d456bbbcacc3aa4e3e">pal_rtos_test_utils.c</a>
+</li>
+<li>palThreadFuncCustom1()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a7c8c7a38fca8b62acc6094ba1f072ec7">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a7c8c7a38fca8b62acc6094ba1f072ec7">pal_rtos_test_utils.h</a>
+</li>
+<li>palThreadFuncCustom2()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a663a9130dc598399ec3bd9ab9e6680fa">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a663a9130dc598399ec3bd9ab9e6680fa">pal_rtos_test_utils.h</a>
+</li>
+<li>palThreadFuncCustom3()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a300d95346a90a5f17aa6140647243b64">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a300d95346a90a5f17aa6140647243b64">pal_rtos_test_utils.c</a>
+</li>
+<li>palThreadFuncCustom4()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#aa5b1f9c927c18d821a46d99dfe533cb0">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#aa5b1f9c927c18d821a46d99dfe533cb0">pal_rtos_test_utils.h</a>
+</li>
+<li>palThreadFuncPtr
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">pal_rtos.h</a>
+</li>
+<li>palThreadFuncWrapper_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a3b3cdd4235f3b1a26e63840b91c98e18">pal_plat_rtos.c</a>
+</li>
+<li>palThreadID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">pal_rtos.h</a>
+</li>
+<li>palThreadLocalStore_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">pal_rtos.h</a>
+</li>
+<li>palThreadPriority_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">pal_rtos.h</a>
+</li>
+<li>palTimer_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a2976c77ab047a577ddac4d82bfd40f10">pal_plat_rtos.c</a>
+</li>
+<li>palTimerFunc1()
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#abac822ed4b356b85117101aa0d8701d6">pal_rtos_test_utils.h</a>
+, <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#abac822ed4b356b85117101aa0d8701d6">pal_rtos_test_utils.c</a>
+</li>
+<li>palTimerFunc2()
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#a8581bcb8f9f435a87c3dd651d65e32c8">pal_rtos_test_utils.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a8581bcb8f9f435a87c3dd651d65e32c8">pal_rtos_test_utils.h</a>
+</li>
+<li>palTimerFuncPtr
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">pal_rtos.h</a>
+</li>
+<li>palTimerID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">pal_rtos.h</a>
+</li>
+<li>palTimerType
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2">pal_rtos.h</a>
+</li>
+<li>palTimerType_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">pal_rtos.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_s.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li class="current"><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>s_palSelectPalCallbackFunctions
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a4f6fdfaea202b7b50e57e7253705d96e">pal_plat_network.cpp</a>
+</li>
+<li>s_select_event_happened
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a77af6aede7e9f4d41f8c87ebc381b517">pal_plat_network.cpp</a>
+</li>
+<li>semaphore1
+: <a class="el" href="da/d2d/pal__rtos__test_8c.html#a2f8d675e43058c8f8b853b52366abf38">pal_rtos_test.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a2f8d675e43058c8f8b853b52366abf38">pal_rtos_test_utils.h</a>
+</li>
+<li>socketCallback()
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#ad62b547b432124475c3f5a94d9befe6d">pal_socket_test.c</a>
+</li>
+<li>sw2()
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+<li>sw2_press()
+: <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde">pal_socket_test_main_mbedOS.cpp</a>
+, <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde">pal_rtos_test_main_mbedOS.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_t.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li class="current"><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>TEST()
+: <a class="el" href="da/d2d/pal__rtos__test_8c.html#a1e33659cb747282e1869e9f86fe2d33f">pal_rtos_test.c</a>
+, <a class="el" href="d5/d2a/pal__socket__test_8c.html#a89cecd4b07ef1acbb0b40c00189a0f36">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#ab6e3467dab64a1ae60a313f6c004e337">pal_rtos_test.c</a>
+, <a class="el" href="d5/d2a/pal__socket__test_8c.html#a38479981768fb5d46c11768870af9d8e">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a236b8351236670bd5b5a07c92d22df4b">pal_rtos_test.c</a>
+, <a class="el" href="d5/d2a/pal__socket__test_8c.html#ab28ce473e377fbe30049cb41b31dfa4b">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a9286efb458d9a35e4c89e79111bc5b32">pal_rtos_test.c</a>
+, <a class="el" href="d5/d2a/pal__socket__test_8c.html#abbfd14915bd054b23f91a485d4f8fb1e">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a0efc309d0e8eb82d8caf439877959e21">pal_rtos_test.c</a>
+</li>
+<li>TEST_GROUP()
+: <a class="el" href="da/d2d/pal__rtos__test_8c.html#ab19fea07339238925c3b105637ce92c1">pal_rtos_test.c</a>
+, <a class="el" href="d5/d2a/pal__socket__test_8c.html#ad324fc284dd938317109a9fc47dd1732">pal_socket_test.c</a>
+</li>
+<li>TEST_GROUP_RUNNER()
+: <a class="el" href="dd/df6/pal__rtos__test__runner_8c.html#ace47ba1b1706d7b654cdf18e7008b174">pal_rtos_test_runner.c</a>
+, <a class="el" href="dc/da5/pal__socket__test__runner_8c.html#a7d7471d47d062a2bf20410044b712192">pal_socket_test_runner.c</a>
+</li>
+<li>TEST_pal_all_GROUPS_RUNNER()
+: <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#adc9a94aa19f52027390d7b0256a6693c">pal_all_test_main_mbedOS.cpp</a>
+</li>
+<li>TEST_pal_rtos_GROUP_RUNNER()
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc">pal_all_test_main_mbedOS.cpp</a>
+</li>
+<li>TEST_pal_socket_GROUP_RUNNER()
+: <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab">pal_socket_test_main_mbedOS.cpp</a>
+, <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab">pal_all_test_main_mbedOS.cpp</a>
+</li>
+<li>TEST_pal_update_GROUP_RUNNER()
+: <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a59390bc31498889208cfda7dea51bffa">pal_all_test_main_mbedOS.cpp</a>
+</li>
+<li>TEST_PRINTF
+: <a class="el" href="d0/d51/pal__test__utils_8h.html#a7f0c3a0f2f1c4062d776a7bc64bed815">pal_test_utils.h</a>
+, <a class="el" href="d8/d5f/pal__socket__test__utils_8cpp.html#ac641d6ab2d8d2f23e89e7c36694d85dd">pal_socket_test_utils.cpp</a>
+</li>
+<li>TEST_SETUP()
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a26217052dc55731aa82231669a8cf0df">pal_socket_test.c</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a8a7c6f6a71607f9dce69207f1f7ed3c1">pal_rtos_test.c</a>
+</li>
+<li>TEST_TEAR_DOWN()
+: <a class="el" href="da/d2d/pal__rtos__test_8c.html#ac5fc4009112ba6cadc74ad8cd14c427b">pal_rtos_test.c</a>
+, <a class="el" href="d5/d2a/pal__socket__test_8c.html#ac307640c84843ab78607af150bcbe143">pal_socket_test.c</a>
+</li>
+<li>thread2
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+<li>THREAD_STACK_SIZE
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a90b7a8cb7bc3fdbd98014a3e15ee6e9a">pal_rtos_test_utils.h</a>
+</li>
+<li>threadsArg
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#aecb21b545f5a0c542dc82a8ef0b89b3f">pal_rtos_test_utils.c</a>
+</li>
+<li>threadsArgument_t
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">pal_rtos_test_utils.h</a>
+</li>
+<li>timerArgs
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#ad4897778c444c8e8fbcb65c84901ac78">pal_rtos_test_utils.c</a>
+</li>
+<li>timerArgument_t
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">pal_rtos_test_utils.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_type.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,180 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="#index_p"><span>p</span></a></li>
+      <li class="current"><a href="#index_t"><span>t</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>pal_in_addr_t
+: <a class="el" href="d1/dc4/pal__network_8c.html#abd4e26912e35fc58e5bc0172765bdc6e">pal_network.c</a>
+</li>
+<li>pal_socketAddressInternal6_t
+: <a class="el" href="d1/dc4/pal__network_8c.html#aaf4e46664d7b7f8902c69cb72a65c943">pal_network.c</a>
+</li>
+<li>pal_socketAddressInternal_t
+: <a class="el" href="d1/dc4/pal__network_8c.html#abc2b368e206e7353e31a520fa573cd8a">pal_network.c</a>
+</li>
+<li>pal_timeVal_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4">pal_network.h</a>
+</li>
+<li>palBuffer_t
+: <a class="el" href="d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4">pal_types.h</a>
+</li>
+<li>palConstBuffer_t
+: <a class="el" href="d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81">pal_types.h</a>
+</li>
+<li>palIpV4Addr_t
+: <a class="el" href="d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1">pal_network.h</a>
+</li>
+<li>palIpV6Addr_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192">pal_network.h</a>
+</li>
+<li>palMemoryPool_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#afa12596f9e3d06ce0b6fde07eb52d07a">pal_plat_rtos.c</a>
+</li>
+<li>palMemoryPoolID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb">pal_rtos.h</a>
+</li>
+<li>palMessageQ_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a550ebbfa0932f76e30a372710bff8f60">pal_plat_rtos.c</a>
+</li>
+<li>palMessageQID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910">pal_rtos.h</a>
+</li>
+<li>palMutex_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a366960ed96b6cf998870481300a739d4">pal_plat_rtos.c</a>
+</li>
+<li>palMutexID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901">pal_rtos.h</a>
+</li>
+<li>palNetInterfaceInfo_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da">pal_network.h</a>
+</li>
+<li>palSelectCallbackFunction_t
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#abb42afef799c3d7409ba0c29d645cbaf">pal_plat_network.cpp</a>
+</li>
+<li>palSemaphore_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#aaab2b2c34911a85e67be94866be7e515">pal_plat_rtos.c</a>
+</li>
+<li>palSemaphoreID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481">pal_rtos.h</a>
+</li>
+<li>palSocket_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996">pal_network.h</a>
+</li>
+<li>palSocketAddress_t
+: <a class="el" href="d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10">pal_network.h</a>
+</li>
+<li>palSocketLength_t
+: <a class="el" href="d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901">pal_network.h</a>
+</li>
+<li>palStatus_t
+: <a class="el" href="d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d">pal_types.h</a>
+</li>
+<li>palThread_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a06ecfc14d166863199ebfc4372d61127">pal_plat_rtos.c</a>
+</li>
+<li>palThreadFuncPtr
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853">pal_rtos.h</a>
+</li>
+<li>palThreadFuncWrapper_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a3b3cdd4235f3b1a26e63840b91c98e18">pal_plat_rtos.c</a>
+</li>
+<li>palThreadID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5">pal_rtos.h</a>
+</li>
+<li>palThreadLocalStore_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c">pal_rtos.h</a>
+</li>
+<li>palThreadPriority_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be">pal_rtos.h</a>
+</li>
+<li>palTimer_t
+: <a class="el" href="d4/dc5/pal__plat__rtos_8c.html#a2976c77ab047a577ddac4d82bfd40f10">pal_plat_rtos.c</a>
+</li>
+<li>palTimerFuncPtr
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b">pal_rtos.h</a>
+</li>
+<li>palTimerID_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985">pal_rtos.h</a>
+</li>
+<li>palTimerType_t
+: <a class="el" href="d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a">pal_rtos.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>threadsArgument_t
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0">pal_rtos_test_utils.h</a>
+</li>
+<li>timerArgument_t
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76">pal_rtos_test_utils.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_u.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li class="current"><a href="globals_u.html#index_u"><span>u</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>UnityMain()
+: <a class="el" href="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">pal_all_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">pal_socket_test_main_mbedOS.cpp</a>
+, <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5">pal_rtos_test_main_mbedOS.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_v.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li class="current"><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li><a href="globals_x.html#index_x"><span>x</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>vPortSVCHandler
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#ad43047b3ea0a146673e30637488bf754">FreeRTOSConfig.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_vars.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+&#160;<ul>
+<li>button_pressed
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+<li>g_networkInterface
+: <a class="el" href="d5/d2a/pal__socket__test_8c.html#a702871d3d9057fa4fc99031298fb425c">pal_socket_test.c</a>
+</li>
+<li>g_threadsArg
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a8f9b1f133f82ce955405d453f0c506d6">pal_rtos_test_utils.h</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a8f9b1f133f82ce955405d453f0c506d6">pal_rtos_test.c</a>
+</li>
+<li>g_threadStorage
+: <a class="el" href="da/d2d/pal__rtos__test_8c.html#a9beaf51023e475986b8b182c80ccc023">pal_rtos_test.c</a>
+, <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a9beaf51023e475986b8b182c80ccc023">pal_rtos_test_utils.h</a>
+</li>
+<li>g_timerArgs
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a1a09db2f0cd5dd2d0929b34afad51ba1">pal_rtos_test_utils.h</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a1a09db2f0cd5dd2d0929b34afad51ba1">pal_rtos_test.c</a>
+</li>
+<li>mutex1
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#adb164ebbfd2189f434f5e550e2d93bb4">pal_rtos_test_utils.h</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#adb164ebbfd2189f434f5e550e2d93bb4">pal_rtos_test.c</a>
+</li>
+<li>mutex2
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a8706c6b975e957968f23af2812bbc0cb">pal_rtos_test_utils.h</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a8706c6b975e957968f23af2812bbc0cb">pal_rtos_test.c</a>
+</li>
+<li>s_palSelectPalCallbackFunctions
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a4f6fdfaea202b7b50e57e7253705d96e">pal_plat_network.cpp</a>
+</li>
+<li>s_select_event_happened
+: <a class="el" href="d3/dfb/pal__plat__network_8cpp.html#a77af6aede7e9f4d41f8c87ebc381b517">pal_plat_network.cpp</a>
+</li>
+<li>semaphore1
+: <a class="el" href="d9/d28/pal__rtos__test__utils_8h.html#a2f8d675e43058c8f8b853b52366abf38">pal_rtos_test_utils.h</a>
+, <a class="el" href="da/d2d/pal__rtos__test_8c.html#a2f8d675e43058c8f8b853b52366abf38">pal_rtos_test.c</a>
+</li>
+<li>thread2
+: <a class="el" href="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487">pal_rtos_test_main_mbedOS.cpp</a>
+, <a class="el" href="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487">pal_socket_test_main_mbedOS.cpp</a>
+</li>
+<li>threadsArg
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#aecb21b545f5a0c542dc82a8ef0b89b3f">pal_rtos_test_utils.c</a>
+</li>
+<li>timerArgs
+: <a class="el" href="d1/dee/pal__rtos__test__utils_8c.html#ad4897778c444c8e8fbcb65c84901ac78">pal_rtos_test_utils.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/globals_x.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+      <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="globals.html#index_a"><span>a</span></a></li>
+      <li><a href="globals_b.html#index_b"><span>b</span></a></li>
+      <li><a href="globals_c.html#index_c"><span>c</span></a></li>
+      <li><a href="globals_d.html#index_d"><span>d</span></a></li>
+      <li><a href="globals_g.html#index_g"><span>g</span></a></li>
+      <li><a href="globals_i.html#index_i"><span>i</span></a></li>
+      <li><a href="globals_l.html#index_l"><span>l</span></a></li>
+      <li><a href="globals_m.html#index_m"><span>m</span></a></li>
+      <li><a href="globals_n.html#index_n"><span>n</span></a></li>
+      <li><a href="globals_p.html#index_p"><span>p</span></a></li>
+      <li><a href="globals_s.html#index_s"><span>s</span></a></li>
+      <li><a href="globals_t.html#index_t"><span>t</span></a></li>
+      <li><a href="globals_u.html#index_u"><span>u</span></a></li>
+      <li><a href="globals_v.html#index_v"><span>v</span></a></li>
+      <li class="current"><a href="globals_x.html#index_x"><span>x</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>xPortPendSVHandler
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#a6f30022da7d797dd31f1b8a11cae9a35">FreeRTOSConfig.h</a>
+</li>
+<li>xPortSysTickHandler
+: <a class="el" href="de/d33/_free_r_t_o_s_config_8h.html#ae42e6318b5d564e44f97f8c765859448">FreeRTOSConfig.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/index.hhc	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,799 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML><HEAD></HEAD><BODY>
+<OBJECT type="text/site properties">
+<param name="FrameName" value="right">
+</OBJECT>
+<UL>
+<LI><OBJECT type="text/sitemap"><param name="Name" value="Data Structures"><param name="Local" value="annotated.html"><param name="ImageNumber" value="1"></OBJECT>
+  <UL>
+  <LI><OBJECT type="text/sitemap"><param name="Name" value="Data Structures"><param name="Local" value="annotated.html"><param name="ImageNumber" value="1"></OBJECT>
+    <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="_palBuffer_t"><param name="Local" value="d8/d19/struct__pal_buffer__t.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="buffer"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a80fff022df87cf0d4817ae19eb8257bb"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="bufferLength"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a7f87cfadd565637bee1de625d19f3d3a"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="maxBufferLength"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a27cc969a96cc37cb772a3fd76dd860cd"><param name="ImageNumber" value="11"></OBJECT>
+      </UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="_palConstBuffer_t"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="buffer"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#a3660dfb9336b8d57a3c2223de14646d3"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="bufferLength"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#a8d4966dc771ad87628b4bd01ae4ea801"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="maxBufferLength"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#ad411a35599e0f8500f29e5bd2cb66cc7"><param name="ImageNumber" value="11"></OBJECT>
+      </UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_threadLocalStore"><param name="Local" value="df/d48/structpal__thread_local_store.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="storeData"><param name="Local" value="df/d48/structpal__thread_local_store.html#abe68dca8335fc1c9e6da5359117625bc"><param name="ImageNumber" value="11"></OBJECT>
+      </UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_timeVal"><param name="Local" value="de/dfc/structpal__time_val.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_tv_sec"><param name="Local" value="de/dfc/structpal__time_val.html#a8c0bfa9026d4b23b598f0652aa975fcf"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_tv_usec"><param name="Local" value="de/dfc/structpal__time_val.html#acf8b8c0480064a16325f94f155db4e1c"><param name="ImageNumber" value="11"></OBJECT>
+      </UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="palNetInterfaceInfo"><param name="Local" value="d9/d16/structpal_net_interface_info.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="address"><param name="Local" value="d9/d16/structpal_net_interface_info.html#affc930af87e8696f63b30b911cf8b03d"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="addressSize"><param name="Local" value="d9/d16/structpal_net_interface_info.html#a9b816dd947f25d303e32fca36d04080e"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="interfaceName"><param name="Local" value="d9/d16/structpal_net_interface_info.html#ad028021cafddc5355dfccfac1345f4f6"><param name="ImageNumber" value="11"></OBJECT>
+      </UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="palSocketAddress"><param name="Local" value="db/d42/structpal_socket_address.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="addressData"><param name="Local" value="db/d42/structpal_socket_address.html#a0a5471b518ef60cfa0f28c47a323ec4c"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="addressType"><param name="Local" value="db/d42/structpal_socket_address.html#a8bdecffc9afacbdf84fc78d26090c221"><param name="ImageNumber" value="11"></OBJECT>
+      </UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="threadsArgument"><param name="Local" value="d3/d30/structthreads_argument.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="arg1"><param name="Local" value="d3/d30/structthreads_argument.html#a9532cb931dee4c326444e7c366019639"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="arg2"><param name="Local" value="d3/d30/structthreads_argument.html#acecc240150225e2786524a2e4b3adf78"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="arg3"><param name="Local" value="d3/d30/structthreads_argument.html#abcba9882b15e3845a7794220a5c9e4f4"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="arg4"><param name="Local" value="d3/d30/structthreads_argument.html#a6fad7cea38d81eb88f9ff01d4baec32a"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="arg5"><param name="Local" value="d3/d30/structthreads_argument.html#a2720a7d49d96277778f83a2488859fe9"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="arg6"><param name="Local" value="d3/d30/structthreads_argument.html#a460c4a55dba6130f386f648138184074"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="arg7"><param name="Local" value="d3/d30/structthreads_argument.html#a200c590896768ffb09f8d90c774f6b74"><param name="ImageNumber" value="11"></OBJECT>
+      </UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="timerArgument"><param name="Local" value="dc/d2c/structtimer_argument.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="ticksBeforeTimer"><param name="Local" value="dc/d2c/structtimer_argument.html#a18bf51a6db87346257b34c24fefbd1b1"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="ticksInFunc1"><param name="Local" value="dc/d2c/structtimer_argument.html#afe9607363a4b6ae7b835ef129743ec08"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="ticksInFunc2"><param name="Local" value="dc/d2c/structtimer_argument.html#af9f23b828a589dfac13cad4cb6e7da34"><param name="ImageNumber" value="11"></OBJECT>
+      </UL>
+    </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Name" value="Data Structure Index"><param name="Local" value="classes.html"><param name="ImageNumber" value="11"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Name" value="Data Fields"><param name="Local" value="functions.html"><param name="ImageNumber" value="1"></OBJECT>
+    <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="All"><param name="Local" value="functions.html"><param name="ImageNumber" value="11"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="Variables"><param name="Local" value="functions_vars.html"><param name="ImageNumber" value="11"></OBJECT>
+    </UL>
+  </UL>
+<LI><OBJECT type="text/sitemap"><param name="Name" value="Files"><param name="ImageNumber" value="1"></OBJECT>
+  <UL>
+  <LI><OBJECT type="text/sitemap"><param name="Name" value="File List"><param name="Local" value="files.html"><param name="ImageNumber" value="1"></OBJECT>
+    <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="Source"><param name="Local" value="dir_74389ed8173ad57b461b9d623a1f3867.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL-Impl"><param name="Local" value="dir_8a9a67948239eaee56ff05ba80ad2d3c.html"><param name="ImageNumber" value="1"></OBJECT>
+        <UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="Modules"><param name="Local" value="dir_5097254b22164c5ad71a4eec719a72ee.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="Networking"><param name="Local" value="dir_59e3d70b06141856a554dd7aab1293ae.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_network.c"><param name="Local" value="d1/dc4/pal__network_8c.html"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_in_addr_t"><param name="Local" value="d1/dc4/pal__network_8c.html#abd4e26912e35fc58e5bc0172765bdc6e"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_socketAddressInternal6_t"><param name="Local" value="d1/dc4/pal__network_8c.html#aaf4e46664d7b7f8902c69cb72a65c943"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_socketAddressInternal_t"><param name="Local" value="d1/dc4/pal__network_8c.html#abc2b368e206e7353e31a520fa573cd8a"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_bind"><param name="Local" value="d1/dc4/pal__network_8c.html#ac1ff0fb22cbd84e6c7920c095ddbde63"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_close"><param name="Local" value="d1/dc4/pal__network_8c.html#a18197e0f047f17d2617461594f5ed644"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getNetInterfaceInfo"><param name="Local" value="d1/dc4/pal__network_8c.html#a5258efd8b21d9c881df29b29686674d8"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getNumberOfNetInterfaces"><param name="Local" value="d1/dc4/pal__network_8c.html#a65df7c68bcf7a21db5d1a7a3830fd19c"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getSockAddrIPV4Addr"><param name="Local" value="d1/dc4/pal__network_8c.html#ade5cf610808db5462666465b648e7724"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getSockAddrIPV6Addr"><param name="Local" value="d1/dc4/pal__network_8c.html#a153bc6165f64bbf3e6bcc79b0d39138f"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getSockAddrPort"><param name="Local" value="d1/dc4/pal__network_8c.html#a4658c7e8224b536d4fd71fed2602b12e"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getSocketOptions"><param name="Local" value="d1/dc4/pal__network_8c.html#a2d9d4e04e43995123efe134c767cd6e1"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_receiveFrom"><param name="Local" value="d1/dc4/pal__network_8c.html#a6b5e705be1e7c3c16080f2b05b87ff7d"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_registerNetworkInterface"><param name="Local" value="d1/dc4/pal__network_8c.html#a081cc2fd09644c41068673487b39f6b8"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_sendTo"><param name="Local" value="d1/dc4/pal__network_8c.html#acce808f708e653b6bed317072888ca23"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_setSockAddrIPV4Addr"><param name="Local" value="d1/dc4/pal__network_8c.html#aed02a6f53b88e1d5e81607b1221a3efa"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_setSockAddrIPV6Addr"><param name="Local" value="d1/dc4/pal__network_8c.html#a0cc13f7ef9ceb4a75884a8bebf0d831c"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_setSockAddrPort"><param name="Local" value="d1/dc4/pal__network_8c.html#abbeb1395896eb79ab564568b9ab8a628"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_setSocketOptions"><param name="Local" value="d1/dc4/pal__network_8c.html#a2e1bbe81a35a1cb54c351912bb97736f"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_socket"><param name="Local" value="d1/dc4/pal__network_8c.html#aa852fb6e271fb91efd65e2a1ead93b9a"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_socketMiniSelect"><param name="Local" value="d1/dc4/pal__network_8c.html#a5cab4ea55a3d28cfd8d4dca8376a111c"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            </UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="RTOS"><param name="Local" value="dir_0a6b9d10733e8fa4306fa781def1f127.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_rtos.c"><param name="Local" value="de/d33/pal__rtos_8c.html"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="dbgPrintf"><param name="Local" value="de/d33/pal__rtos_8c.html#a2b4f475c89ea263557d6529c4d9a9353"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osAtomicIncrement"><param name="Local" value="de/d33/pal__rtos_8c.html#a9b33d260ee1022f5b5f6a9dfc3363f2a"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osDelay"><param name="Local" value="de/d33/pal__rtos_8c.html#ad6aaee432fd7ea5e35ab500a6278cc25"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osKernelSysMilliSecTick"><param name="Local" value="de/d33/pal__rtos_8c.html#a59e85747582417a1395ed0f9c140eb8a"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osKernelSysTick"><param name="Local" value="de/d33/pal__rtos_8c.html#a9800b8b9e057fe17e50c4259c809f898"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osKernelSysTick64"><param name="Local" value="de/d33/pal__rtos_8c.html#af88551b6ca24a7a2bb6d94d423eb4401"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osKernelSysTickFrequency"><param name="Local" value="de/d33/pal__rtos_8c.html#a087214ae87c20fd59f47fe3c96d0eefc"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osKernelSysTickMicroSec"><param name="Local" value="de/d33/pal__rtos_8c.html#a34375ee82619a4064849daccbdfbc966"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMessageGet"><param name="Local" value="de/d33/pal__rtos_8c.html#ab70d0be45514258874c0406c2040372c"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMessagePut"><param name="Local" value="de/d33/pal__rtos_8c.html#a966daa5b0bd9282fbffa7c462da1c417"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMessageQueueCreate"><param name="Local" value="de/d33/pal__rtos_8c.html#a0c7f0003e92b3494089966d53ab24a1b"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMessageQueueDestroy"><param name="Local" value="de/d33/pal__rtos_8c.html#adba13212ec060092acdf6165e82be5b6"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMutexCreate"><param name="Local" value="de/d33/pal__rtos_8c.html#af89aab14085207b1a0951f7aad24193c"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMutexDelete"><param name="Local" value="de/d33/pal__rtos_8c.html#a03f43d7e53435d89f316862b48b573c4"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMutexRelease"><param name="Local" value="de/d33/pal__rtos_8c.html#a1d976a616a5c850b2016b2b87d8b47cc"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMutexWait"><param name="Local" value="de/d33/pal__rtos_8c.html#acda0974247325955719b23494d66c622"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osPoolAlloc"><param name="Local" value="de/d33/pal__rtos_8c.html#a3a2b57685096d16a110ee38f7f29e099"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osPoolCAlloc"><param name="Local" value="de/d33/pal__rtos_8c.html#a5d20661cd387a172450a2fe12993687a"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osPoolCreate"><param name="Local" value="de/d33/pal__rtos_8c.html#a1245f053abb3fdb7ab2ceb5a2899e8c6"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osPoolDestroy"><param name="Local" value="de/d33/pal__rtos_8c.html#a1c01464448f8d7bd95bf518d651484c6"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osPoolFree"><param name="Local" value="de/d33/pal__rtos_8c.html#a79f4997069310aa7bbb6ae7995988dd7"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osReboot"><param name="Local" value="de/d33/pal__rtos_8c.html#ab8ab0f31bbf4258b7684d22e7725a9f8"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osSemaphoreCreate"><param name="Local" value="de/d33/pal__rtos_8c.html#aaa7aee442a5c8cc274d3e52206984037"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osSemaphoreDelete"><param name="Local" value="de/d33/pal__rtos_8c.html#a45f071482f8669821b90264e0470b33d"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osSemaphoreRelease"><param name="Local" value="de/d33/pal__rtos_8c.html#a009d0c063119265f9c5c0c9bff379c14"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osSemaphoreWait"><param name="Local" value="de/d33/pal__rtos_8c.html#aa2d998744dbc9504bfe0358f85457fc4"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osThreadCreate"><param name="Local" value="de/d33/pal__rtos_8c.html#a2dae64d917f644982b893037adf562b4"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osThreadGetId"><param name="Local" value="de/d33/pal__rtos_8c.html#a2993b8f6b5e8d7ccd6121dc18330e4be"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osThreadGetLocalStore"><param name="Local" value="de/d33/pal__rtos_8c.html#ac94f4efc4bad73969e57c8255c136a0d"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osThreadTerminate"><param name="Local" value="de/d33/pal__rtos_8c.html#abcfa47b411929b33d5d9cfaaff28ce18"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osTimerCreate"><param name="Local" value="de/d33/pal__rtos_8c.html#aa4da36fbbba744a14d1bdfe2a26d1a18"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osTimerDelete"><param name="Local" value="de/d33/pal__rtos_8c.html#ac7ca6e7c3c229f4092c9df4b69e7dd59"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osTimerStart"><param name="Local" value="de/d33/pal__rtos_8c.html#a6c60c9e433bc6005bac6b02d5aba7363"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osTimerStop"><param name="Local" value="de/d33/pal__rtos_8c.html#a94f4df594102e582cbd2114f6eebb57d"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            </UL>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="Services-API"><param name="Local" value="dir_18cc01a76aedd55acdee1b7ef37dd546.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="pal.h"><param name="Local" value="d9/d16/pal_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_destroy"><param name="Local" value="d9/d16/pal_8h.html#a312dfda15122dbd2abff67b580c811ad"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_init"><param name="Local" value="d9/d16/pal_8h.html#a28095bec6e2c1c74ad3b08414f44b9d6"><param name="ImageNumber" value="11"></OBJECT>
+            </UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_configuration.h"><param name="Local" value="d2/d87/pal__configuration_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MAX_NUMBER_OF_THREADS"><param name="Local" value="d2/d87/pal__configuration_8h.html#abb1ceb83ff6a709614d1394e7e39391d"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MAX_SUPORTED_NET_INTEFACES"><param name="Local" value="d2/d87/pal__configuration_8h.html#a79ed46284848e83d0dba68933c40f82a"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_ASYNCHRONOUS_SOCKET_API"><param name="Local" value="d2/d87/pal__configuration_8h.html#a337c171a4cf5d7f04894051002d81eba"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_DNS_SUPPORT"><param name="Local" value="d2/d87/pal__configuration_8h.html#ad7e2f6ebd028faacc239229cce972fa7"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_TCP_AND_TLS_SUPPORT"><param name="Local" value="d2/d87/pal__configuration_8h.html#a4662be64705952cfa0925001c9d917c3"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_RTOS_64BIT_TICK_SUPPORTED"><param name="Local" value="d2/d87/pal__configuration_8h.html#a2c7f7687d719d388a67c1f18f200962d"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_UNIQUE_THREAD_PRIORITY"><param name="Local" value="d2/d87/pal__configuration_8h.html#a4d2f5187ecd7e90c094e2f103e5b6839"><param name="ImageNumber" value="11"></OBJECT>
+            </UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_errors.h"><param name="Local" value="da/dfe/pal__errors_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palError_t"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_GENERAL_BASE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_GENERIC_FAILURE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa7f2512e5c7b5a9ac52c061d139bc7d4"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_INVALID_ARGUMENT"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a744e1823284f7cc0575234cb7ef00818"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_NO_MEMORY"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a12207f367341fdf5946140874b26729c"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_BUFFER_TOO_SMALL"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a46dd726962c185841ba6b2a6a51716f9"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_NOT_SUPPORTED"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7b7f0ee07b070ec75d101dfa292b9d94"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_TIMEOUT_EXPIRED"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a316210ded62b55ed1bbcc4e3c5ce8a49"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_NOT_INITIALIZED"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4d8a84476204387d3b5e720b3e0777c"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_NULL_POINTER"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5a632cfd6ad51b23b088ef5bf8a50107"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_CREATION_FAILED"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aed6967ecb83464f0d078f210da21c308"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_NOT_IMPLEMENTED"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abeb3c1cb1631b2decdf863ba4875f86a"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_RTOS_ERROR_BASE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_RTOS_PARAMETER"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5af57d1b96cac027006285d3e946f72da7"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_RTOS_RESOURCE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ab842a33fc2033095f7526d36e76ffde3"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_RTOS_TIMEOUT"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4f005aeb7022829339f50e6a1c48f07b"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_RTOS_ISR"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a81f5a29e0f8f421412636195cd7eafef"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_RTOS_ISR_RECURSIVE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5791ca907d7d2c5e811c1ff8a79ef3f4"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_RTOS_PRIORITY"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa372d184ebea174a9a807a6af5feedbb"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_RTOS_NO_MEMORY"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4e823bf084db0abf95f92e644e44413"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_RTOS_VALUE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a166a7c0ad427986e42eee2d7ed5f2690"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_RTOS_OS"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad783bb526712a8fc40b8c7e9e2dcca70"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_ERROR_BASE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_GENERIC"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abd4cc21a7f65533cf8dfc118b19957fe"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_NO_BUFFERS"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a25f6affacd34aaf7e734a666b5186f2d"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_HOST_UNREACHABLE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4d5cc5d96a1f1d23f69cf3fead9291e2"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_IN_PROGRES"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a493871f4bc0b3223df779b89a3b0b829"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_INVALID_VALUE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ade5fcfb0a8b3810ef513c25e7722db6e"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_WOULD_BLOCK"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a089003c7bd380a8426f211fedfb813ea"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_ADDRESS_IN_USE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aef19ff78785fd271b93bec327551f74e"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_ALREADY_CONNECTED"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a05b82765d558b836fc988283d1d93e20"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_CONNECTION_ABORTED"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7027cc594e676d26ade0efcca3d4a8cf"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_CONNECTION_RESET"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae917d0749e3e541369413c782d6a1f3b"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_NOT_CONNECTED"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a90f2efed44c1dbb04928d381355ece58"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_INPUT_OUTPUT_ERROR"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae2f7bce589b21231745767161c43349d"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_CONNECTION_CLOSED"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7449190771bd90f1b5dd54f0626c4d50"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_FAILED_TO_SET_SOCKET_TO_NON_BLOCKING"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a557f240d9723393b246c9d03ad5789cd"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a3c0172ff8cc391873b83c9a1b7b6bd35"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_INVALID_ADDRESS"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a033490de59972a46877f230267a070c8"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_DNS_ERROR"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aeb186326d561fd71f180d59ab12b0d5f"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_HDCP_ERROR"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a352e14b96bd1489c42728f4da485b577"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_AUTH_ERROR"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8f07f3411c26d3107b86d64739b18fd8"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a9a2d6af2657b5abd81bd38c7c6cf0479"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_UPDATE_ERROR_BASE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_UPDATE_ERROR"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a29017351514ed7e0a1fb46d6f1b53cb5"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_UPDATE_BUSY"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a123c0937e9046005938c724b7e0c7daf"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_UPDATE_TIMEOUT"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5afaeb01c79160229de16f8b764224823b"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_UPDATE_OUT_OF_BOUNDS"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a6f29986bcfb1cc0f26c1dfa17fa44cf6"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_UPDATE_PALFROM_API"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ada39f2992787040da527359ce7a25a57"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_UPDATE_PALFROM_IO"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaa9a76afb13586743e21ece5310487e6"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_UPDATE_END_OF_IMAGE"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaacb4fc41bcde230f42aeb05bfaccf42"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_UPDATE_CHUNK_TO_SMALL"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4dffb58d0202d7ca5ac60eff42313ac9"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palErrorModules_t"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_MODULE_GENERAL"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_MODULE_PAL"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_MODULE_C"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a393e3aee68a29b56f296410882a61ee1"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_MODULE_RTOS"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_MODULE_NET"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_MODULE_TLS"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1aa9aff26dbdc5924c6d244d7c0727957d"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_MODULE_CRYPTO"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a8a27e540ac27fc7fb67c75eeb233b944"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_ERR_MODULE_UPDATE"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            </UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_macros.h"><param name="Local" value="db/dcf/pal__macros_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="DEBUG_PRINT"><param name="Local" value="db/dcf/pal__macros_8h.html#aa1b662a1198e5729d6d0934a7efb02c4"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="LITTLE__ENDIAN"><param name="Local" value="db/dcf/pal__macros_8h.html#a1651594dc71abf466bddd0f6393edb8b"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_DIVIDE_ROUND_UP"><param name="Local" value="db/dcf/pal__macros_8h.html#a966411fe41e3830553bb1b8cf8baf730"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_HOST_TO_LITTLE_ENDIAN_16BIT"><param name="Local" value="db/dcf/pal__macros_8h.html#a9bd4f76c3897b4338fe50a8d69830fe5"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_HOST_TO_LITTLE_ENDIAN_32BIT"><param name="Local" value="db/dcf/pal__macros_8h.html#ab01046a25df49d7fe1d85a8bf722975f"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_HOST_TO_LITTLE_ENDIAN_64BIT"><param name="Local" value="db/dcf/pal__macros_8h.html#adc0a4752569188800a75e1601a7e11b5"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_HTONL"><param name="Local" value="db/dcf/pal__macros_8h.html#a55b1a7d9f939231045521ec4a4817cff"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_HTONS"><param name="Local" value="db/dcf/pal__macros_8h.html#a98390512a7c2732f1197b07acf03e226"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_INVERSE_UINT16_BYTES"><param name="Local" value="db/dcf/pal__macros_8h.html#ad989cc9220df56cd410590fc628e93b7"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_INVERSE_UINT32_BYTES"><param name="Local" value="db/dcf/pal__macros_8h.html#a4a0b711e344955017ab60ff37977e18f"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_INVERSE_UINT64_BYTES"><param name="Local" value="db/dcf/pal__macros_8h.html#ae376dc7d0682fb2fc8927897fb065c4c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_LITTLE_ENDIAN_TO_HOST_16BIT"><param name="Local" value="db/dcf/pal__macros_8h.html#ad1c98870c5eeba8fe649345e371ef866"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_LITTLE_ENDIAN_TO_HOST_32BIT"><param name="Local" value="db/dcf/pal__macros_8h.html#aa6229ece344478c07677c8b0436b1bb0"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_LITTLE_ENDIAN_TO_HOST_64BIT"><param name="Local" value="db/dcf/pal__macros_8h.html#a4ae1ca0100a3eee36eb95931cbec633e"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MAX"><param name="Local" value="db/dcf/pal__macros_8h.html#a117c6ce53646b65b4cdcb5da01801675"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MAX_INT32"><param name="Local" value="db/dcf/pal__macros_8h.html#a6ee734c1fc41affa0926797e382fc8d4"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MAX_INT64"><param name="Local" value="db/dcf/pal__macros_8h.html#ada154fcb4b3ef9b641486f30de56c7b7"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MAX_UINT16"><param name="Local" value="db/dcf/pal__macros_8h.html#af8d58ab12b0f655fe922fc40b3e52ca2"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MAX_UINT32"><param name="Local" value="db/dcf/pal__macros_8h.html#ac7e2d509703ff033a302b325aa664f6e"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MAX_UINT64"><param name="Local" value="db/dcf/pal__macros_8h.html#a28a8006d7bca3b64235ca4d0cb39bf2b"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MAX_UINT8"><param name="Local" value="db/dcf/pal__macros_8h.html#a08c56fc189bfb1a6864a7b5d68433e7e"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MIN"><param name="Local" value="db/dcf/pal__macros_8h.html#a29066dd6aaf6aa8fa21f3a88feb6da59"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MIN_INT32"><param name="Local" value="db/dcf/pal__macros_8h.html#ac3a2f334767728e9bc57512139e0bd61"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MODULE_DEINIT"><param name="Local" value="db/dcf/pal__macros_8h.html#aaeb3e06c7119793239368c0fe74cda05"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MODULE_INIT"><param name="Local" value="db/dcf/pal__macros_8h.html#ad2109677fa03720f6ab0df072c755529"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MODULE_IS_INIT"><param name="Local" value="db/dcf/pal__macros_8h.html#ade9a83a9aab96cf50058801afdef4ace"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NTOHL"><param name="Local" value="db/dcf/pal__macros_8h.html#a7cbc81d1fb0dcddb1cc88b59d50c2aa9"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NTOHS"><param name="Local" value="db/dcf/pal__macros_8h.html#a55fbcf7a453813fec69016916802de2c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_SUCCESS"><param name="Local" value="db/dcf/pal__macros_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5"><param name="ImageNumber" value="11"></OBJECT>
+            </UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_network.h"><param name="Local" value="d9/d17/pal__network_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palSocketAddress"><param name="Local" value="db/d42/structpal_socket_address.html"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="addressData"><param name="Local" value="db/d42/structpal_socket_address.html#a0a5471b518ef60cfa0f28c47a323ec4c"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="addressType"><param name="Local" value="db/d42/structpal_socket_address.html#a8bdecffc9afacbdf84fc78d26090c221"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palNetInterfaceInfo"><param name="Local" value="d9/d16/structpal_net_interface_info.html"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="address"><param name="Local" value="d9/d16/structpal_net_interface_info.html#affc930af87e8696f63b30b911cf8b03d"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="addressSize"><param name="Local" value="d9/d16/structpal_net_interface_info.html#a9b816dd947f25d303e32fca36d04080e"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="interfaceName"><param name="Local" value="d9/d16/structpal_net_interface_info.html#ad028021cafddc5355dfccfac1345f4f6"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_timeVal"><param name="Local" value="de/dfc/structpal__time_val.html"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_tv_sec"><param name="Local" value="de/dfc/structpal__time_val.html#a8c0bfa9026d4b23b598f0652aa975fcf"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_tv_usec"><param name="Local" value="de/dfc/structpal__time_val.html#acf8b8c0480064a16325f94f155db4e1c"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_IPV4_ADDRESS_SIZE"><param name="Local" value="d9/d17/pal__network_8h.html#ad7a3e182cb430da7c139858b0bfbb27f"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_IPV6_ADDRESS_SIZE"><param name="Local" value="d9/d17/pal__network_8h.html#a9903ebae215b70520c8dcc9f0aa03e24"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_DEFAULT_INTERFACE"><param name="Local" value="d9/d17/pal__network_8h.html#aefc09884590381a71433c34b3f2e2aa5"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_MAX_ADDR_SIZE"><param name="Local" value="d9/d17/pal__network_8h.html#ac831e2e5064065e10c741da1003ff039"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_SELECT_IS_ERR"><param name="Local" value="d9/d17/pal__network_8h.html#ac2b7451d38e150079fbef20b57ee3fe9"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_SELECT_IS_RX"><param name="Local" value="d9/d17/pal__network_8h.html#a8894a96773018ba6058811087b4b2ac8"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_SELECT_IS_TX"><param name="Local" value="d9/d17/pal__network_8h.html#a31ca79ac9ae5c2ddd890263a989fc4d8"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_SOCKET_SELECT_ERR_BIT"><param name="Local" value="d9/d17/pal__network_8h.html#aa66d7131cc6c44ac6c5ab6a9dda3f69a"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_SOCKET_SELECT_MAX_SOCKETS"><param name="Local" value="d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_SOCKET_SELECT_RX_BIT"><param name="Local" value="d9/d17/pal__network_8h.html#aae14933b48cd31821913f2bfb15e18b2"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_SOCKET_SELECT_TX_BIT"><param name="Local" value="d9/d17/pal__network_8h.html#ad8ddc879cf2eace65036137660b8b53d"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_timeVal_t"><param name="Local" value="d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palIpV4Addr_t"><param name="Local" value="d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palIpV6Addr_t"><param name="Local" value="d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palNetInterfaceInfo_t"><param name="Local" value="d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palSocket_t"><param name="Local" value="d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palSocketAddress_t"><param name="Local" value="d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palSocketLength_t"><param name="Local" value="d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palSocketDomain_t"><param name="Local" value="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_AF_UNSPEC"><param name="Local" value="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7af6e1af9f402ae053ad1ac009b61957c3"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_AF_INET"><param name="Local" value="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a9420d0656d763eeeb6c97243e0514f4f"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_AF_INET6"><param name="Local" value="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a7375b598bd48e43e8869594d96b2c0d7"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palSocketOptionName_t"><param name="Local" value="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_SO_REUSEADDR"><param name="Local" value="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a352587a3fea85695be1ce478aa3da001"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_SO_SNDTIMEO"><param name="Local" value="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51aa744f783051825333c23177008d140de"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_SO_RCVTIMEO"><param name="Local" value="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a9e1ad5d4670e06bb2a8b110c0ba3e5ca"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palSocketType_t"><param name="Local" value="d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_SOCK_DGRAM"><param name="Local" value="d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418a14e907287d0ede1306aa35f5687e0941"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_bind"><param name="Local" value="d9/d17/pal__network_8h.html#ac1ff0fb22cbd84e6c7920c095ddbde63"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_close"><param name="Local" value="d9/d17/pal__network_8h.html#a18197e0f047f17d2617461594f5ed644"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getNetInterfaceInfo"><param name="Local" value="d9/d17/pal__network_8h.html#a5258efd8b21d9c881df29b29686674d8"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getNumberOfNetInterfaces"><param name="Local" value="d9/d17/pal__network_8h.html#a65df7c68bcf7a21db5d1a7a3830fd19c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getSockAddrIPV4Addr"><param name="Local" value="d9/d17/pal__network_8h.html#ade5cf610808db5462666465b648e7724"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getSockAddrIPV6Addr"><param name="Local" value="d9/d17/pal__network_8h.html#a153bc6165f64bbf3e6bcc79b0d39138f"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getSockAddrPort"><param name="Local" value="d9/d17/pal__network_8h.html#a4658c7e8224b536d4fd71fed2602b12e"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_getSocketOptions"><param name="Local" value="d9/d17/pal__network_8h.html#a2d9d4e04e43995123efe134c767cd6e1"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_receiveFrom"><param name="Local" value="d9/d17/pal__network_8h.html#a6b5e705be1e7c3c16080f2b05b87ff7d"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_registerNetworkInterface"><param name="Local" value="d9/d17/pal__network_8h.html#a081cc2fd09644c41068673487b39f6b8"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_sendTo"><param name="Local" value="d9/d17/pal__network_8h.html#acce808f708e653b6bed317072888ca23"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_setSockAddrIPV4Addr"><param name="Local" value="d9/d17/pal__network_8h.html#aed02a6f53b88e1d5e81607b1221a3efa"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_setSockAddrIPV6Addr"><param name="Local" value="d9/d17/pal__network_8h.html#a0cc13f7ef9ceb4a75884a8bebf0d831c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_setSockAddrPort"><param name="Local" value="d9/d17/pal__network_8h.html#abbeb1395896eb79ab564568b9ab8a628"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_setSocketOptions"><param name="Local" value="d9/d17/pal__network_8h.html#a2e1bbe81a35a1cb54c351912bb97736f"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_socket"><param name="Local" value="d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_socketMiniSelect"><param name="Local" value="d9/d17/pal__network_8h.html#a5cab4ea55a3d28cfd8d4dca8376a111c"><param name="ImageNumber" value="11"></OBJECT>
+            </UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_rtos.h"><param name="Local" value="d4/d01/pal__rtos_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_threadLocalStore"><param name="Local" value="df/d48/structpal__thread_local_store.html"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="storeData"><param name="Local" value="df/d48/structpal__thread_local_store.html#abe68dca8335fc1c9e6da5359117625bc"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_PRINTF"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2e5b95b90c72b6bdf62897efd58f98fb"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_RTOS_WAIT_FOREVER"><param name="Local" value="d4/d01/pal__rtos_8h.html#ad19aa2a408e848a5f86d897ab50500ec"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palMemoryPoolID_t"><param name="Local" value="d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palMessageQID_t"><param name="Local" value="d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palMutexID_t"><param name="Local" value="d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palSemaphoreID_t"><param name="Local" value="d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFuncPtr"><param name="Local" value="d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadID_t"><param name="Local" value="d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadLocalStore_t"><param name="Local" value="d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadPriority_t"><param name="Local" value="d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palTimerFuncPtr"><param name="Local" value="d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palTimerID_t"><param name="Local" value="d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palTimerType_t"><param name="Local" value="d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osPriority"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_osPriorityIdle"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a62b0350b25146b93c57a71ce65bb017a"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_osPriorityLow"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ab3b5b218f45b07de8153427c63273fec"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_osPriorityBelowNormal"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a23fdf72acf5a9475ca4054d4e1a187a5"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_osPriorityNormal"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a897a2d3cf2fa39f82141535d0d4e51a1"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_osPriorityAboveNormal"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ac6ad927a77b4275e1da2373f810ee2af"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_osPriorityHigh"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a70d584591ab861e247ccfe94e55e35a2"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_osPriorityRealtime"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a3c2b8a244cae70bbf23a5a4d033df2ce"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_osPriorityError"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a94aea8f14f0bc89f7f4540416c08da3e"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palTimerType"><param name="Local" value="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="palOsTimerOnce"><param name="Local" value="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2a0f237f01e8978b2dc987ff3b5cde0f30"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="palOsTimerPeriodic"><param name="Local" value="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2aadcc58d31964426d67650ca958fb80f9"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="dbgPrintf"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2b4f475c89ea263557d6529c4d9a9353"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osAtomicIncrement"><param name="Local" value="d4/d01/pal__rtos_8h.html#a9b33d260ee1022f5b5f6a9dfc3363f2a"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osDelay"><param name="Local" value="d4/d01/pal__rtos_8h.html#ad6aaee432fd7ea5e35ab500a6278cc25"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osKernelSysMilliSecTick"><param name="Local" value="d4/d01/pal__rtos_8h.html#a59e85747582417a1395ed0f9c140eb8a"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osKernelSysTick"><param name="Local" value="d4/d01/pal__rtos_8h.html#a9800b8b9e057fe17e50c4259c809f898"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osKernelSysTick64"><param name="Local" value="d4/d01/pal__rtos_8h.html#af88551b6ca24a7a2bb6d94d423eb4401"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osKernelSysTickFrequency"><param name="Local" value="d4/d01/pal__rtos_8h.html#a087214ae87c20fd59f47fe3c96d0eefc"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osKernelSysTickMicroSec"><param name="Local" value="d4/d01/pal__rtos_8h.html#a34375ee82619a4064849daccbdfbc966"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMessageGet"><param name="Local" value="d4/d01/pal__rtos_8h.html#ab70d0be45514258874c0406c2040372c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMessagePut"><param name="Local" value="d4/d01/pal__rtos_8h.html#a966daa5b0bd9282fbffa7c462da1c417"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMessageQueueCreate"><param name="Local" value="d4/d01/pal__rtos_8h.html#a0c7f0003e92b3494089966d53ab24a1b"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMessageQueueDestroy"><param name="Local" value="d4/d01/pal__rtos_8h.html#adba13212ec060092acdf6165e82be5b6"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMutexCreate"><param name="Local" value="d4/d01/pal__rtos_8h.html#af89aab14085207b1a0951f7aad24193c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMutexDelete"><param name="Local" value="d4/d01/pal__rtos_8h.html#a03f43d7e53435d89f316862b48b573c4"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMutexRelease"><param name="Local" value="d4/d01/pal__rtos_8h.html#a1d976a616a5c850b2016b2b87d8b47cc"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osMutexWait"><param name="Local" value="d4/d01/pal__rtos_8h.html#acda0974247325955719b23494d66c622"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osPoolAlloc"><param name="Local" value="d4/d01/pal__rtos_8h.html#a3a2b57685096d16a110ee38f7f29e099"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osPoolCAlloc"><param name="Local" value="d4/d01/pal__rtos_8h.html#a5d20661cd387a172450a2fe12993687a"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osPoolCreate"><param name="Local" value="d4/d01/pal__rtos_8h.html#a1245f053abb3fdb7ab2ceb5a2899e8c6"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osPoolDestroy"><param name="Local" value="d4/d01/pal__rtos_8h.html#a1c01464448f8d7bd95bf518d651484c6"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osPoolFree"><param name="Local" value="d4/d01/pal__rtos_8h.html#a79f4997069310aa7bbb6ae7995988dd7"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osReboot"><param name="Local" value="d4/d01/pal__rtos_8h.html#ab8ab0f31bbf4258b7684d22e7725a9f8"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osSemaphoreCreate"><param name="Local" value="d4/d01/pal__rtos_8h.html#aaa7aee442a5c8cc274d3e52206984037"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osSemaphoreDelete"><param name="Local" value="d4/d01/pal__rtos_8h.html#a45f071482f8669821b90264e0470b33d"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osSemaphoreRelease"><param name="Local" value="d4/d01/pal__rtos_8h.html#a009d0c063119265f9c5c0c9bff379c14"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osSemaphoreWait"><param name="Local" value="d4/d01/pal__rtos_8h.html#aa2d998744dbc9504bfe0358f85457fc4"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osThreadCreate"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2dae64d917f644982b893037adf562b4"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osThreadGetId"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2993b8f6b5e8d7ccd6121dc18330e4be"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osThreadGetLocalStore"><param name="Local" value="d4/d01/pal__rtos_8h.html#ac94f4efc4bad73969e57c8255c136a0d"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osThreadTerminate"><param name="Local" value="d4/d01/pal__rtos_8h.html#abcfa47b411929b33d5d9cfaaff28ce18"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osTimerCreate"><param name="Local" value="d4/d01/pal__rtos_8h.html#aa4da36fbbba744a14d1bdfe2a26d1a18"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osTimerDelete"><param name="Local" value="d4/d01/pal__rtos_8h.html#ac7ca6e7c3c229f4092c9df4b69e7dd59"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osTimerStart"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6c60c9e433bc6005bac6b02d5aba7363"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_osTimerStop"><param name="Local" value="d4/d01/pal__rtos_8h.html#a94f4df594102e582cbd2114f6eebb57d"><param name="ImageNumber" value="11"></OBJECT>
+            </UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_types.h"><param name="Local" value="d6/dc2/pal__types_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="_palBuffer_t"><param name="Local" value="d8/d19/struct__pal_buffer__t.html"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="buffer"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a80fff022df87cf0d4817ae19eb8257bb"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="bufferLength"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a7f87cfadd565637bee1de625d19f3d3a"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="maxBufferLength"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a27cc969a96cc37cb772a3fd76dd860cd"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="_palConstBuffer_t"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="buffer"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#a3660dfb9336b8d57a3c2223de14646d3"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="bufferLength"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#a8d4966dc771ad87628b4bd01ae4ea801"><param name="ImageNumber" value="11"></OBJECT>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="maxBufferLength"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#ad411a35599e0f8500f29e5bd2cb66cc7"><param name="ImageNumber" value="11"></OBJECT>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="NULLPTR"><param name="Local" value="d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_SUCCESS"><param name="Local" value="d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palBuffer_t"><param name="Local" value="d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palConstBuffer_t"><param name="Local" value="d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="palStatus_t"><param name="Local" value="d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d"><param name="ImageNumber" value="11"></OBJECT>
+            </UL>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_init.c"><param name="Local" value="d7/d66/pal__init_8c.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_destroy"><param name="Local" value="d7/d66/pal__init_8c.html#a312dfda15122dbd2abff67b580c811ad"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_init"><param name="Local" value="d7/d66/pal__init_8c.html#a28095bec6e2c1c74ad3b08414f44b9d6"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        </UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="Port"><param name="Local" value="dir_0bf78cffa0901bd3b5cb7be7888aabc9.html"><param name="ImageNumber" value="1"></OBJECT>
+        <UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="Platform-API"><param name="Local" value="dir_21bbc5adf7d2637a4cb8a3cee979c96f.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_network.h"><param name="Local" value="d9/d2c/pal__plat__network_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_bind"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a53a267fd8ed0b7a5cf988224e95bd47c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_close"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a071355a0ca4d4eece45f0ed85a9ab1da"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_getNetInterfaceInfo"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a6dc3b4c06e96b29068995809b98a935e"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_getNumberOfNetInterfaces"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#af36bf075867e5ed0be7479312469361f"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_getSocketOptions"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a76c4e2adf95702c4db8f3792ae373bf9"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_receiveFrom"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#aa869b5eddbf4eb6aebbbb587ece84aac"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_RegisterNetworkInterface"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a9f6e13112366978741749649356a886c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_sendTo"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a17365747ed8d29df153a336da3942187"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_setSocketOptions"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a08ea05dacec7f7d9dc892dab0318542d"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_socket"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a58a25ae30bb6225cc8b5344053fd705c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_socketMiniSelect"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#aa0c26dfeee80444e58eacab238206d09"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_socketsInit"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#ab92cca0e4facf3d62e03c0d0ca0523da"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_socketsTerminate"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd"><param name="ImageNumber" value="11"></OBJECT>
+            </UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_rtos.h"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osAtomicIncrement"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ac62a5b36fc159e12670c44a12dc08beb"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osDelay"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a140b31a48ac23c909f1a94ad11b04aac"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osKernelSysMilliSecTick"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a82eade9e7b100bd9dc9ab8312f98f827"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osKernelSysTick"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ae92f87b121a06e0062ee014025c0ba9e"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osKernelSysTick64"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ad104e06e7b043305fdbfbc37e4ea2826"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osKernelSysTickFrequency"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aacd58e95c23ad1c8f39b8b12ed2d83dd"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osKernelSysTickMicroSec"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a2d18206974bdf17c48b97e2e16505f19"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMessageGet"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a67696b86a6116a82da7c26a433280e58"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMessagePut"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aa80549a557e50e0759991c6b11eb456a"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMessageQueueCreate"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ad25c8f7cb22985b077e893be5bc27d48"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMessageQueueDestroy"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a0e0e6dc9958a9efd9beb62493bc3f67a"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMutexCreate"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ae2425f958ab7d58eff5c5b3183f40305"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMutexDelete"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a909f4ae03b0acef0b84609d9b76679b4"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMutexRelease"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#add4dbca7b11365e7301db1425c9fdf4d"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMutexWait"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aea4ad5224c43ff0fff2b77798d19748c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osPoolAlloc"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a5938d16ea0c12594e8f8becd20acf3a7"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osPoolCAlloc"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a8dff6b49f9798cdd4eed04f3dff30330"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osPoolCreate"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a7a4fa20255fe38cf183f6c924419fe85"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osPoolDestroy"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a33ca5b5e9d3a80594de4977924e6bc1b"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osPoolFree"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a84e2f41a587335de053e0b7f8a4163c2"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osReboot"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a894db4d6fe636ef7a7ebf83d4334adbd"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osSemaphoreCreate"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a6e7b3c23b094270b4e013c4412f2d3b1"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osSemaphoreDelete"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ab37f3153b73dc87ca609c4c2e1bf8d6a"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osSemaphoreRelease"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a252f210ce8a502891821b5af24b09822"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osSemaphoreWait"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ac9231eef550eb7b62a89e7a34b62d014"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osThreadCreate"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a9c965e0fdfd80fc86c901cf2bde88c64"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osThreadGetId"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a4c42c35d3d7b375833a51b4670febe92"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osThreadGetLocalStore"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aca6b1b2f34861cf8e3d2dcc076992270"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osThreadTerminate"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a3117f8911b3e83e27031f366aa652a4f"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osTimerCreate"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aee15bcaba1ed33c264bc4c91c1dbb1cf"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osTimerDelete"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a9723baa43780a1083f43d786fa53a73d"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osTimerStart"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a80f5ca578197088e4cf84042c9efc2d7"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osTimerStop"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a2f1fdb410c4d6ae382622ef4f1884808"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_RTOSDestroy"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a8a484abc75cf595862459d6ab21c7a0c"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_RTOSInitialize"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a2e7aaf20f2cad3b04061e1c3fd748c42"><param name="ImageNumber" value="11"></OBJECT>
+            </UL>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="Reference-Impl"><param name="Local" value="dir_c08386f3c1aee312ced83a5951d11ed6.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="mbedOS"><param name="Local" value="dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="Networking"><param name="Local" value="dir_ddf5611ee10e8b15ebe1664d2c043f4e.html"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_network.cpp"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html"><param name="ImageNumber" value="1"></OBJECT>
+                <UL>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_SOCKET_OPTION_ERROR"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a8c607fcbfa526e4485fcdb55b79b39d6"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palSelectCallbackFunction_t"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#abb42afef799c3d7409ba0c29d645cbaf"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_bind"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a53a267fd8ed0b7a5cf988224e95bd47c"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_close"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a071355a0ca4d4eece45f0ed85a9ab1da"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_getNetInterfaceInfo"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6dc3b4c06e96b29068995809b98a935e"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_getNumberOfNetInterfaces"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#af36bf075867e5ed0be7479312469361f"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_getSocketOptions"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a76c4e2adf95702c4db8f3792ae373bf9"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_receiveFrom"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#aa869b5eddbf4eb6aebbbb587ece84aac"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_RegisterNetworkInterface"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#ab37f007a0574ca73916b26240ff1126b"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_sendTo"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a17365747ed8d29df153a336da3942187"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_setSocketOptions"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a08ea05dacec7f7d9dc892dab0318542d"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_socket"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a58a25ae30bb6225cc8b5344053fd705c"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_socketMiniSelect"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#aa0c26dfeee80444e58eacab238206d09"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_socketsInit"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#ab92cca0e4facf3d62e03c0d0ca0523da"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_socketsTerminate"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palSelectCallback0"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a056dbb70ade63a6ebc47f1f11733b8da"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palSelectCallback1"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a4dcff46004af6c4d300d542de9c7d38e"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palSelectCallback2"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#abe369a2a4de2c8e25ed47166f068918f"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palSelectCallback3"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#aeabad2d66db156a97447f6e22614e78c"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palSelectCallback4"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a521d96ff90d0b417e6749df8ae90bf8b"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palSelectCallback5"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#ae937bf3f397b1642a29a44c6cf9bc075"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palSelectCallback6"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6b99c0251a9efb7224658c8da6e3ad27"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palSelectCallback7"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6e102ddea1bd5315a4224c2a1fdddd58"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="s_palSelectPalCallbackFunctions"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a4f6fdfaea202b7b50e57e7253705d96e"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="s_select_event_happened"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a77af6aede7e9f4d41f8c87ebc381b517"><param name="ImageNumber" value="11"></OBJECT>
+                </UL>
+              </UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="RTOS"><param name="Local" value="dir_1460475e8e667d8c97e1be97dbcd2231.html"><param name="ImageNumber" value="1"></OBJECT>
+              <UL>
+              <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_rtos.c"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html"><param name="ImageNumber" value="1"></OBJECT>
+                <UL>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_MUTEX_DATA_SIZE"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#af12d673085039783ab1d2613eff7e4a4"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NUM_OF_THREAD_INSTANCES"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a9b3b50428d7ad199287a291137041c43"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_RTOS_MEMORY_POOL_SIZE"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a31d6d9a16b9891d7eb84e2b974c2c92b"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_RTOS_MESSAGE_Q_SIZE"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aa1b17e5a20a5db09a3a3267f9a4191e0"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aa25bb23dc9f40c91f9872c585e649723"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_SEMAPHORE_DATA_SIZE"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a66dcd5bd7ca661597fecabb1795fa393"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_TICK_TO_MILLI_FACTOR"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a78b1f63823e34bc82e272358701cbe67"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_TIMER_DATA_SIZE"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aba1d833ce13b78f5648ec26cdd25f639"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palMemoryPool_t"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#afa12596f9e3d06ce0b6fde07eb52d07a"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palMessageQ_t"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a550ebbfa0932f76e30a372710bff8f60"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palMutex_t"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a366960ed96b6cf998870481300a739d4"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palSemaphore_t"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aaab2b2c34911a85e67be94866be7e515"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palThread_t"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a06ecfc14d166863199ebfc4372d61127"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFuncWrapper_t"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a3b3cdd4235f3b1a26e63840b91c98e18"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="palTimer_t"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2976c77ab047a577ddac4d82bfd40f10"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="NVIC_SystemReset"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a1b47d17e90b6a03e7bd1ec6a0d549b46"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osAtomicIncrement"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ac62a5b36fc159e12670c44a12dc08beb"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osDelay"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a140b31a48ac23c909f1a94ad11b04aac"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osKernelSysMilliSecTick"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a82eade9e7b100bd9dc9ab8312f98f827"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osKernelSysTick"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ae92f87b121a06e0062ee014025c0ba9e"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osKernelSysTickFrequency"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#addc790764a23a3e16344bd830ebe01ef"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osKernelSysTickMicroSec"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2d18206974bdf17c48b97e2e16505f19"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMessageGet"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a67696b86a6116a82da7c26a433280e58"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMessagePut"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aa80549a557e50e0759991c6b11eb456a"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMessageQueueCreate"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ad25c8f7cb22985b077e893be5bc27d48"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMessageQueueDestroy"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a0e0e6dc9958a9efd9beb62493bc3f67a"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMutexCreate"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ae2425f958ab7d58eff5c5b3183f40305"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMutexDelete"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a909f4ae03b0acef0b84609d9b76679b4"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMutexRelease"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#add4dbca7b11365e7301db1425c9fdf4d"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osMutexWait"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aea4ad5224c43ff0fff2b77798d19748c"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osPoolAlloc"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a5938d16ea0c12594e8f8becd20acf3a7"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osPoolCAlloc"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a8dff6b49f9798cdd4eed04f3dff30330"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osPoolCreate"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a7a4fa20255fe38cf183f6c924419fe85"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osPoolDestroy"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a33ca5b5e9d3a80594de4977924e6bc1b"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osPoolFree"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a84e2f41a587335de053e0b7f8a4163c2"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osReboot"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#abdb6ab5827d588b9c2e908beda4c3154"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osSemaphoreCreate"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a6e7b3c23b094270b4e013c4412f2d3b1"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osSemaphoreDelete"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ab37f3153b73dc87ca609c4c2e1bf8d6a"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osSemaphoreRelease"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a252f210ce8a502891821b5af24b09822"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osSemaphoreWait"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ac9231eef550eb7b62a89e7a34b62d014"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osThreadCreate"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a9c965e0fdfd80fc86c901cf2bde88c64"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osThreadGetId"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a4c42c35d3d7b375833a51b4670febe92"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osThreadGetLocalStore"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aca6b1b2f34861cf8e3d2dcc076992270"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osThreadTerminate"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a3117f8911b3e83e27031f366aa652a4f"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osTimerCreate"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aee15bcaba1ed33c264bc4c91c1dbb1cf"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osTimerDelete"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a9723baa43780a1083f43d786fa53a73d"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osTimerStart"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a80f5ca578197088e4cf84042c9efc2d7"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_osTimerStop"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2f1fdb410c4d6ae382622ef4f1884808"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_RTOSDestroy"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a8a484abc75cf595862459d6ab21c7a0c"><param name="ImageNumber" value="11"></OBJECT>
+                <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_plat_RTOSInitialize"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2e7aaf20f2cad3b04061e1c3fd748c42"><param name="ImageNumber" value="11"></OBJECT>
+                </UL>
+              </UL>
+            </UL>
+          </UL>
+        </UL>
+      </UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="Test"><param name="Local" value="dir_37618a71d99bdfed5979e976980d5eec.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="Common"><param name="Local" value="dir_f8e9a069a0807d5f7341f9bc5892e16f.html"><param name="ImageNumber" value="1"></OBJECT>
+        <UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_rtos_test_utils.c"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palRunThreads"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a393f7a6e534c05e534cfdaf46473db45"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc1"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a0a153da028aee8f220377b516ff065c8"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc2"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a29dc69cbcc48b55d48a5fd668da7fe15"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc3"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#acf68b041960be3c58f516986504fcd0f"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc4"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a844c7469189866b502ef85df5063e79c"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc5"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a5be7a07498de9cc847215e6aa8f77914"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc6"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a52dc025f6020b0d456bbbcacc3aa4e3e"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFuncCustom1"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a7c8c7a38fca8b62acc6094ba1f072ec7"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFuncCustom2"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a663a9130dc598399ec3bd9ab9e6680fa"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFuncCustom3"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a300d95346a90a5f17aa6140647243b64"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFuncCustom4"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#aa5b1f9c927c18d821a46d99dfe533cb0"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palTimerFunc1"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#abac822ed4b356b85117101aa0d8701d6"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palTimerFunc2"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a8581bcb8f9f435a87c3dd651d65e32c8"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="threadsArg"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#aecb21b545f5a0c542dc82a8ef0b89b3f"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="timerArgs"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#ad4897778c444c8e8fbcb65c84901ac78"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_rtos_test_utils.h"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="threadsArgument"><param name="Local" value="d3/d30/structthreads_argument.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="arg1"><param name="Local" value="d3/d30/structthreads_argument.html#a9532cb931dee4c326444e7c366019639"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="arg2"><param name="Local" value="d3/d30/structthreads_argument.html#acecc240150225e2786524a2e4b3adf78"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="arg3"><param name="Local" value="d3/d30/structthreads_argument.html#abcba9882b15e3845a7794220a5c9e4f4"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="arg4"><param name="Local" value="d3/d30/structthreads_argument.html#a6fad7cea38d81eb88f9ff01d4baec32a"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="arg5"><param name="Local" value="d3/d30/structthreads_argument.html#a2720a7d49d96277778f83a2488859fe9"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="arg6"><param name="Local" value="d3/d30/structthreads_argument.html#a460c4a55dba6130f386f648138184074"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="arg7"><param name="Local" value="d3/d30/structthreads_argument.html#a200c590896768ffb09f8d90c774f6b74"><param name="ImageNumber" value="11"></OBJECT>
+            </UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="timerArgument"><param name="Local" value="dc/d2c/structtimer_argument.html"><param name="ImageNumber" value="1"></OBJECT>
+            <UL>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="ticksBeforeTimer"><param name="Local" value="dc/d2c/structtimer_argument.html#a18bf51a6db87346257b34c24fefbd1b1"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="ticksInFunc1"><param name="Local" value="dc/d2c/structtimer_argument.html#afe9607363a4b6ae7b835ef129743ec08"><param name="ImageNumber" value="11"></OBJECT>
+            <LI><OBJECT type="text/sitemap"><param name="Name" value="ticksInFunc2"><param name="Local" value="dc/d2c/structtimer_argument.html#af9f23b828a589dfac13cad4cb6e7da34"><param name="ImageNumber" value="11"></OBJECT>
+            </UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="MEMORY_POOL1_BLOCK_COUNT"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a3c0ce22bdba74fe398c6adefbc7fbbdf"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="MEMORY_POOL1_BLOCK_SIZE"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#ae3c2c737bcf6b45c3bf394dfe8349c4d"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="MEMORY_POOL2_BLOCK_COUNT"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a593d40fc26d9d1664c57988a846a888e"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="MEMORY_POOL2_BLOCK_SIZE"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a3c85d7e7f47d26444477603d8e2fd5d5"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="THREAD_STACK_SIZE"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a90b7a8cb7bc3fdbd98014a3e15ee6e9a"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="threadsArgument_t"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="timerArgument_t"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc1"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a0a153da028aee8f220377b516ff065c8"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc2"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a29dc69cbcc48b55d48a5fd668da7fe15"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc3"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#acf68b041960be3c58f516986504fcd0f"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc4"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a844c7469189866b502ef85df5063e79c"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc5"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a5be7a07498de9cc847215e6aa8f77914"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFunc6"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a52dc025f6020b0d456bbbcacc3aa4e3e"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFuncCustom1"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a7c8c7a38fca8b62acc6094ba1f072ec7"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFuncCustom2"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a663a9130dc598399ec3bd9ab9e6680fa"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFuncCustom3"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a300d95346a90a5f17aa6140647243b64"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palThreadFuncCustom4"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#aa5b1f9c927c18d821a46d99dfe533cb0"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palTimerFunc1"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#abac822ed4b356b85117101aa0d8701d6"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palTimerFunc2"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8581bcb8f9f435a87c3dd651d65e32c8"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="g_threadsArg"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8f9b1f133f82ce955405d453f0c506d6"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="g_threadStorage"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a9beaf51023e475986b8b182c80ccc023"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="g_timerArgs"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a1a09db2f0cd5dd2d0929b34afad51ba1"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="mutex1"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#adb164ebbfd2189f434f5e550e2d93bb4"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="mutex2"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8706c6b975e957968f23af2812bbc0cb"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="semaphore1"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a2f8d675e43058c8f8b853b52366abf38"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_socket_test_utils.cpp"><param name="Local" value="d8/d5f/pal__socket__test__utils_8cpp.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_PRINTF"><param name="Local" value="d8/d5f/pal__socket__test__utils_8cpp.html#ac641d6ab2d8d2f23e89e7c36694d85dd"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palTestGetNetWorkInterfaceContext"><param name="Local" value="d8/d5f/pal__socket__test__utils_8cpp.html#a5e4a39a385159acfd150a2e6098351cf"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_socket_test_utils.h"><param name="Local" value="df/d2a/pal__socket__test__utils_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palTestGetNetWorkInterfaceContext"><param name="Local" value="df/d2a/pal__socket__test__utils_8h.html#a5e4a39a385159acfd150a2e6098351cf"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_test_utils.h"><param name="Local" value="d0/d51/pal__test__utils_8h.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_PRINTF"><param name="Local" value="d0/d51/pal__test__utils_8h.html#a7f0c3a0f2f1c4062d776a7bc64bed815"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        </UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="Unitest"><param name="Local" value="dir_b922272f3c09a4cbb928a2f2eda5adf8.html"><param name="ImageNumber" value="1"></OBJECT>
+        <UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_all_test.c"><param name="Local" value="d5/de2/pal__all__test_8c.html"><param name="ImageNumber" value="11"></OBJECT>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_all_test_main_mbedOS.cpp"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="main"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_pal_all_GROUPS_RUNNER"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#adc9a94aa19f52027390d7b0256a6693c"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_pal_rtos_GROUP_RUNNER"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_pal_socket_GROUP_RUNNER"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_pal_update_GROUP_RUNNER"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a59390bc31498889208cfda7dea51bffa"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="UnityMain"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_all_test_runner.c"><param name="Local" value="d3/dab/pal__all__test__runner_8c.html"><param name="ImageNumber" value="11"></OBJECT>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_rtos_test.c"><param name="Local" value="da/d2d/pal__rtos__test_8c.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="palRunThreads"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a393f7a6e534c05e534cfdaf46473db45"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a1e33659cb747282e1869e9f86fe2d33f"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a19f494b1a336e145470aa415d517937f"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a0efc309d0e8eb82d8caf439877959e21"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#af2b06d1978f845fac0eaf4d1d3801629"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a236b8351236670bd5b5a07c92d22df4b"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a4291ec1155d61a686122f5d4d6f6d2c5"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a60d7bdf4675622e4a19f1a5b3a0d8523"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#ad59650144ddde4e89319fea8013711cd"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#ab6e3467dab64a1ae60a313f6c004e337"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a15d1bcdd022e5ac3ded7f4c5c4d77195"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a9286efb458d9a35e4c89e79111bc5b32"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a1ab2135517e3491868d55fd58d1cfc93"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a02ee4db9ce4bddd60ae6af604b0f821f"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a283449eb9014d626632ed99b627e3549"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#aa4eb9db0c81e55785354f57fa97b1e0f"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_GROUP"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#ab19fea07339238925c3b105637ce92c1"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_SETUP"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8a7c6f6a71607f9dce69207f1f7ed3c1"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_TEAR_DOWN"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#ac5fc4009112ba6cadc74ad8cd14c427b"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="g_threadsArg"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8f9b1f133f82ce955405d453f0c506d6"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="g_threadStorage"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a9beaf51023e475986b8b182c80ccc023"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="g_timerArgs"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a1a09db2f0cd5dd2d0929b34afad51ba1"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="mutex1"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#adb164ebbfd2189f434f5e550e2d93bb4"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="mutex2"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8706c6b975e957968f23af2812bbc0cb"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="semaphore1"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a2f8d675e43058c8f8b853b52366abf38"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="button_thread"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="led1"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="led_thread"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="main"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="sw2"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="sw2_press"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_pal_rtos_GROUP_RUNNER"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="UnityMain"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="button_pressed"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="thread2"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_rtos_test_runner.c"><param name="Local" value="dd/df6/pal__rtos__test__runner_8c.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_GROUP_RUNNER"><param name="Local" value="dd/df6/pal__rtos__test__runner_8c.html#ace47ba1b1706d7b654cdf18e7008b174"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_socket_test.c"><param name="Local" value="d5/d2a/pal__socket__test_8c.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_SUPPORT_LWIP"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#abc23815d68dafc619e2c2ba210d65bd0"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_TEST_INCOMING_PORT"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ab1873f5ba58eb802dd808f05a1101670"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_TEST_SERVER_HTTP_PORT"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a7c3cef32674c412f87617e87a194e0e3"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_TEST_SERVER_IP"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a0570e783c7412d25d0c33817da54c02f"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_TEST_SERVER_IP_STRING"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a7175d943793d9a92ebe83d12f2a65063"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_TEST_SERVER_NAME"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#abbe7571a0fc631eb43561606f4d5bb0e"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_NET_TEST_SERVER_UDP_PORT"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#abc63439a9af70c80b125accdc2afbb12"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="PAL_TEST_BUFFER_SIZE"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a0010ea5741ae7db441ef09f96eef47be"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="socketCallback"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ad62b547b432124475c3f5a94d9befe6d"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a89cecd4b07ef1acbb0b40c00189a0f36"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a16068d3b8c2ae529cc46a5eb5b238f44"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a38479981768fb5d46c11768870af9d8e"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ad2dc56bae3cc44082b05728caf3a8948"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ab28ce473e377fbe30049cb41b31dfa4b"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#af5e8d34fc9aaaae9d9e2af143e1320e2"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#abbfd14915bd054b23f91a485d4f8fb1e"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_GROUP"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ad324fc284dd938317109a9fc47dd1732"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_SETUP"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a26217052dc55731aa82231669a8cf0df"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_TEAR_DOWN"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ac307640c84843ab78607af150bcbe143"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="g_networkInterface"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a702871d3d9057fa4fc99031298fb425c"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="button_thread"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="led1"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="led_thread"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="main"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="sw2"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="sw2_press"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_pal_socket_GROUP_RUNNER"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="UnityMain"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="button_pressed"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb"><param name="ImageNumber" value="11"></OBJECT>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="thread2"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        <LI><OBJECT type="text/sitemap"><param name="Name" value="pal_socket_test_runner.c"><param name="Local" value="dc/da5/pal__socket__test__runner_8c.html"><param name="ImageNumber" value="1"></OBJECT>
+          <UL>
+          <LI><OBJECT type="text/sitemap"><param name="Name" value="TEST_GROUP_RUNNER"><param name="Local" value="dc/da5/pal__socket__test__runner_8c.html#a7d7471d47d062a2bf20410044b712192"><param name="ImageNumber" value="11"></OBJECT>
+          </UL>
+        </UL>
+      </UL>
+    </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Name" value="Globals"><param name="Local" value="globals.html"><param name="ImageNumber" value="11"></OBJECT>
+    <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="All"><param name="Local" value="globals.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="b"><param name="Local" value="globals.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="d"><param name="Local" value="globals_d.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="g"><param name="Local" value="globals_g.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="l"><param name="Local" value="globals_l.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="m"><param name="Local" value="globals_m.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="n"><param name="Local" value="globals_n.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="p"><param name="Local" value="globals_p.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="s"><param name="Local" value="globals_s.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="t"><param name="Local" value="globals_t.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="u"><param name="Local" value="globals_u.html"><param name="ImageNumber" value="11"></OBJECT>
+      </UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="Functions"><param name="Local" value="globals_func.html"><param name="ImageNumber" value="1"></OBJECT>
+      <UL>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="b"><param name="Local" value="globals_func.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="d"><param name="Local" value="globals_func_d.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="l"><param name="Local" value="globals_func_l.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="m"><param name="Local" value="globals_func_m.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="n"><param name="Local" value="globals_func_n.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="p"><param name="Local" value="globals_func_p.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="s"><param name="Local" value="globals_func_s.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="t"><param name="Local" value="globals_func_t.html"><param name="ImageNumber" value="11"></OBJECT>
+      <LI><OBJECT type="text/sitemap"><param name="Name" value="u"><param name="Local" value="globals_func_u.html"><param name="ImageNumber" value="11"></OBJECT>
+      </UL>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="Variables"><param name="Local" value="globals_vars.html"><param name="ImageNumber" value="11"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="Typedefs"><param name="Local" value="globals_type.html"><param name="ImageNumber" value="11"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="Enumerations"><param name="Local" value="globals_enum.html"><param name="ImageNumber" value="11"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="Enumerator"><param name="Local" value="globals_eval.html"><param name="ImageNumber" value="11"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Name" value="Macros"><param name="Local" value="globals_defs.html"><param name="ImageNumber" value="11"></OBJECT>
+    </UL>
+  </UL>
+</UL>
+</BODY>
+</HTML>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/index.hhk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1524 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML><HEAD></HEAD><BODY>
+<OBJECT type="text/site properties">
+<param name="FrameName" value="right">
+</OBJECT>
+<UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d19/struct__pal_buffer__t.html"><param name="Name" value="_palBuffer_t"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a80fff022df87cf0d4817ae19eb8257bb"><param name="Name" value="buffer"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a7f87cfadd565637bee1de625d19f3d3a"><param name="Name" value="bufferLength"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a27cc969a96cc37cb772a3fd76dd860cd"><param name="Name" value="maxBufferLength"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html"><param name="Name" value="_palConstBuffer_t"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#a3660dfb9336b8d57a3c2223de14646d3"><param name="Name" value="buffer"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#a8d4966dc771ad87628b4bd01ae4ea801"><param name="Name" value="bufferLength"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#ad411a35599e0f8500f29e5bd2cb66cc7"><param name="Name" value="maxBufferLength"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/structpal_net_interface_info.html#affc930af87e8696f63b30b911cf8b03d"><param name="Name" value="address"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/d42/structpal_socket_address.html#a0a5471b518ef60cfa0f28c47a323ec4c"><param name="Name" value="addressData"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/structpal_net_interface_info.html#a9b816dd947f25d303e32fca36d04080e"><param name="Name" value="addressSize"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/d42/structpal_socket_address.html#a8bdecffc9afacbdf84fc78d26090c221"><param name="Name" value="addressType"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#a9532cb931dee4c326444e7c366019639"><param name="Name" value="arg1"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#acecc240150225e2786524a2e4b3adf78"><param name="Name" value="arg2"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#abcba9882b15e3845a7794220a5c9e4f4"><param name="Name" value="arg3"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#a6fad7cea38d81eb88f9ff01d4baec32a"><param name="Name" value="arg4"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#a2720a7d49d96277778f83a2488859fe9"><param name="Name" value="arg5"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#a460c4a55dba6130f386f648138184074"><param name="Name" value="arg6"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#a200c590896768ffb09f8d90c774f6b74"><param name="Name" value="arg7"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a80fff022df87cf0d4817ae19eb8257bb"><param name="Name" value="buffer"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a80fff022df87cf0d4817ae19eb8257bb"><param name="Name" value="_palBuffer_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#a3660dfb9336b8d57a3c2223de14646d3"><param name="Name" value="_palConstBuffer_t"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a7f87cfadd565637bee1de625d19f3d3a"><param name="Name" value="bufferLength"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a7f87cfadd565637bee1de625d19f3d3a"><param name="Name" value="_palBuffer_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#a8d4966dc771ad87628b4bd01ae4ea801"><param name="Name" value="_palConstBuffer_t"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb"><param name="Name" value="button_pressed"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a"><param name="Name" value="button_thread"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a2b4f475c89ea263557d6529c4d9a9353"><param name="Name" value="dbgPrintf"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a2b4f475c89ea263557d6529c4d9a9353"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2b4f475c89ea263557d6529c4d9a9353"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#aa1b662a1198e5729d6d0934a7efb02c4"><param name="Name" value="DEBUG_PRINT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a702871d3d9057fa4fc99031298fb425c"><param name="Name" value="g_networkInterface"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8f9b1f133f82ce955405d453f0c506d6"><param name="Name" value="g_threadsArg"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8f9b1f133f82ce955405d453f0c506d6"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8f9b1f133f82ce955405d453f0c506d6"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a9beaf51023e475986b8b182c80ccc023"><param name="Name" value="g_threadStorage"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a9beaf51023e475986b8b182c80ccc023"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a9beaf51023e475986b8b182c80ccc023"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a1a09db2f0cd5dd2d0929b34afad51ba1"><param name="Name" value="g_timerArgs"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a1a09db2f0cd5dd2d0929b34afad51ba1"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a1a09db2f0cd5dd2d0929b34afad51ba1"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/structpal_net_interface_info.html#ad028021cafddc5355dfccfac1345f4f6"><param name="Name" value="interfaceName"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7"><param name="Name" value="led1"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26"><param name="Name" value="led_thread"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a1651594dc71abf466bddd0f6393edb8b"><param name="Name" value="LITTLE__ENDIAN"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c"><param name="Name" value="main"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c"><param name="Name" value="pal_all_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a27cc969a96cc37cb772a3fd76dd860cd"><param name="Name" value="maxBufferLength"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d19/struct__pal_buffer__t.html#a27cc969a96cc37cb772a3fd76dd860cd"><param name="Name" value="_palBuffer_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/dab/struct__pal_const_buffer__t.html#ad411a35599e0f8500f29e5bd2cb66cc7"><param name="Name" value="_palConstBuffer_t"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a3c0ce22bdba74fe398c6adefbc7fbbdf"><param name="Name" value="MEMORY_POOL1_BLOCK_COUNT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#ae3c2c737bcf6b45c3bf394dfe8349c4d"><param name="Name" value="MEMORY_POOL1_BLOCK_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a593d40fc26d9d1664c57988a846a888e"><param name="Name" value="MEMORY_POOL2_BLOCK_COUNT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a3c85d7e7f47d26444477603d8e2fd5d5"><param name="Name" value="MEMORY_POOL2_BLOCK_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#adb164ebbfd2189f434f5e550e2d93bb4"><param name="Name" value="mutex1"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#adb164ebbfd2189f434f5e550e2d93bb4"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#adb164ebbfd2189f434f5e550e2d93bb4"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8706c6b975e957968f23af2812bbc0cb"><param name="Name" value="mutex2"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8706c6b975e957968f23af2812bbc0cb"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8706c6b975e957968f23af2812bbc0cb"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab"><param name="Name" value="NULLPTR"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a1b47d17e90b6a03e7bd1ec6a0d549b46"><param name="Name" value="NVIC_SystemReset"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/pal_8h.html"><param name="Name" value="pal.h"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/pal_8h.html#a312dfda15122dbd2abff67b580c811ad"><param name="Name" value="pal_destroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/pal_8h.html#a28095bec6e2c1c74ad3b08414f44b9d6"><param name="Name" value="pal_init"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a7375b598bd48e43e8869594d96b2c0d7"><param name="Name" value="PAL_AF_INET6"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a9420d0656d763eeeb6c97243e0514f4f"><param name="Name" value="PAL_AF_INET"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7af6e1af9f402ae053ad1ac009b61957c3"><param name="Name" value="PAL_AF_UNSPEC"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html"><param name="Name" value="pal_all_test_main_mbedOS.cpp"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c"><param name="Name" value="main"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#adc9a94aa19f52027390d7b0256a6693c"><param name="Name" value="TEST_pal_all_GROUPS_RUNNER"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc"><param name="Name" value="TEST_pal_rtos_GROUP_RUNNER"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab"><param name="Name" value="TEST_pal_socket_GROUP_RUNNER"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a59390bc31498889208cfda7dea51bffa"><param name="Name" value="TEST_pal_update_GROUP_RUNNER"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5"><param name="Name" value="UnityMain"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#ac1ff0fb22cbd84e6c7920c095ddbde63"><param name="Name" value="pal_bind"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#ac1ff0fb22cbd84e6c7920c095ddbde63"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ac1ff0fb22cbd84e6c7920c095ddbde63"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a18197e0f047f17d2617461594f5ed644"><param name="Name" value="pal_close"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a18197e0f047f17d2617461594f5ed644"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a18197e0f047f17d2617461594f5ed644"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html"><param name="Name" value="pal_configuration.h"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#abb1ceb83ff6a709614d1394e7e39391d"><param name="Name" value="PAL_MAX_NUMBER_OF_THREADS"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#a79ed46284848e83d0dba68933c40f82a"><param name="Name" value="PAL_MAX_SUPORTED_NET_INTEFACES"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#a337c171a4cf5d7f04894051002d81eba"><param name="Name" value="PAL_NET_ASYNCHRONOUS_SOCKET_API"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#ad7e2f6ebd028faacc239229cce972fa7"><param name="Name" value="PAL_NET_DNS_SUPPORT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#a4662be64705952cfa0925001c9d917c3"><param name="Name" value="PAL_NET_TCP_AND_TLS_SUPPORT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#a2c7f7687d719d388a67c1f18f200962d"><param name="Name" value="PAL_RTOS_64BIT_TICK_SUPPORTED"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#a4d2f5187ecd7e90c094e2f103e5b6839"><param name="Name" value="PAL_UNIQUE_THREAD_PRIORITY"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/pal_8h.html#a312dfda15122dbd2abff67b580c811ad"><param name="Name" value="pal_destroy"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/pal_8h.html#a312dfda15122dbd2abff67b580c811ad"><param name="Name" value="pal.h"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d7/d66/pal__init_8c.html#a312dfda15122dbd2abff67b580c811ad"><param name="Name" value="pal_init.c"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a966411fe41e3830553bb1b8cf8baf730"><param name="Name" value="PAL_DIVIDE_ROUND_UP"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a46dd726962c185841ba6b2a6a51716f9"><param name="Name" value="PAL_ERR_BUFFER_TOO_SMALL"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aed6967ecb83464f0d078f210da21c308"><param name="Name" value="PAL_ERR_CREATION_FAILED"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35"><param name="Name" value="PAL_ERR_GENERAL_BASE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa7f2512e5c7b5a9ac52c061d139bc7d4"><param name="Name" value="PAL_ERR_GENERIC_FAILURE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a744e1823284f7cc0575234cb7ef00818"><param name="Name" value="PAL_ERR_INVALID_ARGUMENT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a393e3aee68a29b56f296410882a61ee1"><param name="Name" value="PAL_ERR_MODULE_C"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a8a27e540ac27fc7fb67c75eeb233b944"><param name="Name" value="PAL_ERR_MODULE_CRYPTO"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091"><param name="Name" value="PAL_ERR_MODULE_GENERAL"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b"><param name="Name" value="PAL_ERR_MODULE_NET"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9"><param name="Name" value="PAL_ERR_MODULE_PAL"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73"><param name="Name" value="PAL_ERR_MODULE_RTOS"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1aa9aff26dbdc5924c6d244d7c0727957d"><param name="Name" value="PAL_ERR_MODULE_TLS"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e"><param name="Name" value="PAL_ERR_MODULE_UPDATE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a12207f367341fdf5946140874b26729c"><param name="Name" value="PAL_ERR_NO_MEMORY"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abeb3c1cb1631b2decdf863ba4875f86a"><param name="Name" value="PAL_ERR_NOT_IMPLEMENTED"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4d8a84476204387d3b5e720b3e0777c"><param name="Name" value="PAL_ERR_NOT_INITIALIZED"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7b7f0ee07b070ec75d101dfa292b9d94"><param name="Name" value="PAL_ERR_NOT_SUPPORTED"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5a632cfd6ad51b23b088ef5bf8a50107"><param name="Name" value="PAL_ERR_NULL_POINTER"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65"><param name="Name" value="PAL_ERR_RTOS_ERROR_BASE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a81f5a29e0f8f421412636195cd7eafef"><param name="Name" value="PAL_ERR_RTOS_ISR"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5791ca907d7d2c5e811c1ff8a79ef3f4"><param name="Name" value="PAL_ERR_RTOS_ISR_RECURSIVE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4e823bf084db0abf95f92e644e44413"><param name="Name" value="PAL_ERR_RTOS_NO_MEMORY"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad783bb526712a8fc40b8c7e9e2dcca70"><param name="Name" value="PAL_ERR_RTOS_OS"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5af57d1b96cac027006285d3e946f72da7"><param name="Name" value="PAL_ERR_RTOS_PARAMETER"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa372d184ebea174a9a807a6af5feedbb"><param name="Name" value="PAL_ERR_RTOS_PRIORITY"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ab842a33fc2033095f7526d36e76ffde3"><param name="Name" value="PAL_ERR_RTOS_RESOURCE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4f005aeb7022829339f50e6a1c48f07b"><param name="Name" value="PAL_ERR_RTOS_TIMEOUT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a166a7c0ad427986e42eee2d7ed5f2690"><param name="Name" value="PAL_ERR_RTOS_VALUE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aef19ff78785fd271b93bec327551f74e"><param name="Name" value="PAL_ERR_SOCKET_ADDRESS_IN_USE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a05b82765d558b836fc988283d1d93e20"><param name="Name" value="PAL_ERR_SOCKET_ALREADY_CONNECTED"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8f07f3411c26d3107b86d64739b18fd8"><param name="Name" value="PAL_ERR_SOCKET_AUTH_ERROR"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7027cc594e676d26ade0efcca3d4a8cf"><param name="Name" value="PAL_ERR_SOCKET_CONNECTION_ABORTED"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7449190771bd90f1b5dd54f0626c4d50"><param name="Name" value="PAL_ERR_SOCKET_CONNECTION_CLOSED"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae917d0749e3e541369413c782d6a1f3b"><param name="Name" value="PAL_ERR_SOCKET_CONNECTION_RESET"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aeb186326d561fd71f180d59ab12b0d5f"><param name="Name" value="PAL_ERR_SOCKET_DNS_ERROR"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10"><param name="Name" value="PAL_ERR_SOCKET_ERROR_BASE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a557f240d9723393b246c9d03ad5789cd"><param name="Name" value="PAL_ERR_SOCKET_FAILED_TO_SET_SOCKET_TO_NON_BLOCKING"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abd4cc21a7f65533cf8dfc118b19957fe"><param name="Name" value="PAL_ERR_SOCKET_GENERIC"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a352e14b96bd1489c42728f4da485b577"><param name="Name" value="PAL_ERR_SOCKET_HDCP_ERROR"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4d5cc5d96a1f1d23f69cf3fead9291e2"><param name="Name" value="PAL_ERR_SOCKET_HOST_UNREACHABLE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a493871f4bc0b3223df779b89a3b0b829"><param name="Name" value="PAL_ERR_SOCKET_IN_PROGRES"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae2f7bce589b21231745767161c43349d"><param name="Name" value="PAL_ERR_SOCKET_INPUT_OUTPUT_ERROR"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a033490de59972a46877f230267a070c8"><param name="Name" value="PAL_ERR_SOCKET_INVALID_ADDRESS"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a3c0172ff8cc391873b83c9a1b7b6bd35"><param name="Name" value="PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ade5fcfb0a8b3810ef513c25e7722db6e"><param name="Name" value="PAL_ERR_SOCKET_INVALID_VALUE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a25f6affacd34aaf7e734a666b5186f2d"><param name="Name" value="PAL_ERR_SOCKET_NO_BUFFERS"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a90f2efed44c1dbb04928d381355ece58"><param name="Name" value="PAL_ERR_SOCKET_NOT_CONNECTED"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a9a2d6af2657b5abd81bd38c7c6cf0479"><param name="Name" value="PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a089003c7bd380a8426f211fedfb813ea"><param name="Name" value="PAL_ERR_SOCKET_WOULD_BLOCK"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a316210ded62b55ed1bbcc4e3c5ce8a49"><param name="Name" value="PAL_ERR_TIMEOUT_EXPIRED"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a123c0937e9046005938c724b7e0c7daf"><param name="Name" value="PAL_ERR_UPDATE_BUSY"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4dffb58d0202d7ca5ac60eff42313ac9"><param name="Name" value="PAL_ERR_UPDATE_CHUNK_TO_SMALL"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaacb4fc41bcde230f42aeb05bfaccf42"><param name="Name" value="PAL_ERR_UPDATE_END_OF_IMAGE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a29017351514ed7e0a1fb46d6f1b53cb5"><param name="Name" value="PAL_ERR_UPDATE_ERROR"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b"><param name="Name" value="PAL_ERR_UPDATE_ERROR_BASE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a6f29986bcfb1cc0f26c1dfa17fa44cf6"><param name="Name" value="PAL_ERR_UPDATE_OUT_OF_BOUNDS"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ada39f2992787040da527359ce7a25a57"><param name="Name" value="PAL_ERR_UPDATE_PALFROM_API"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaa9a76afb13586743e21ece5310487e6"><param name="Name" value="PAL_ERR_UPDATE_PALFROM_IO"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5afaeb01c79160229de16f8b764224823b"><param name="Name" value="PAL_ERR_UPDATE_TIMEOUT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html"><param name="Name" value="pal_errors.h"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a46dd726962c185841ba6b2a6a51716f9"><param name="Name" value="PAL_ERR_BUFFER_TOO_SMALL"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aed6967ecb83464f0d078f210da21c308"><param name="Name" value="PAL_ERR_CREATION_FAILED"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad147e6a77995779cf9cd4bc996816f35"><param name="Name" value="PAL_ERR_GENERAL_BASE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa7f2512e5c7b5a9ac52c061d139bc7d4"><param name="Name" value="PAL_ERR_GENERIC_FAILURE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a744e1823284f7cc0575234cb7ef00818"><param name="Name" value="PAL_ERR_INVALID_ARGUMENT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a393e3aee68a29b56f296410882a61ee1"><param name="Name" value="PAL_ERR_MODULE_C"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a8a27e540ac27fc7fb67c75eeb233b944"><param name="Name" value="PAL_ERR_MODULE_CRYPTO"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a1daf9a88891fbb0bbe33c617a8958091"><param name="Name" value="PAL_ERR_MODULE_GENERAL"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a04a1e6438edc955995d01b752026dd9b"><param name="Name" value="PAL_ERR_MODULE_NET"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a16c89c0872bc1336fa7f3c59ee962ac9"><param name="Name" value="PAL_ERR_MODULE_PAL"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a6a6bce2cba25a0aa0afc4575825eca73"><param name="Name" value="PAL_ERR_MODULE_RTOS"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1aa9aff26dbdc5924c6d244d7c0727957d"><param name="Name" value="PAL_ERR_MODULE_TLS"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a1800b4754588cdf0f544d1a7194168d1a73ed4010871e4e635d42af5db55b565e"><param name="Name" value="PAL_ERR_MODULE_UPDATE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a12207f367341fdf5946140874b26729c"><param name="Name" value="PAL_ERR_NO_MEMORY"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abeb3c1cb1631b2decdf863ba4875f86a"><param name="Name" value="PAL_ERR_NOT_IMPLEMENTED"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4d8a84476204387d3b5e720b3e0777c"><param name="Name" value="PAL_ERR_NOT_INITIALIZED"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7b7f0ee07b070ec75d101dfa292b9d94"><param name="Name" value="PAL_ERR_NOT_SUPPORTED"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5a632cfd6ad51b23b088ef5bf8a50107"><param name="Name" value="PAL_ERR_NULL_POINTER"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4a45604a11c2e6ed03aad942c20fba65"><param name="Name" value="PAL_ERR_RTOS_ERROR_BASE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a81f5a29e0f8f421412636195cd7eafef"><param name="Name" value="PAL_ERR_RTOS_ISR"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a5791ca907d7d2c5e811c1ff8a79ef3f4"><param name="Name" value="PAL_ERR_RTOS_ISR_RECURSIVE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa4e823bf084db0abf95f92e644e44413"><param name="Name" value="PAL_ERR_RTOS_NO_MEMORY"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ad783bb526712a8fc40b8c7e9e2dcca70"><param name="Name" value="PAL_ERR_RTOS_OS"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5af57d1b96cac027006285d3e946f72da7"><param name="Name" value="PAL_ERR_RTOS_PARAMETER"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aa372d184ebea174a9a807a6af5feedbb"><param name="Name" value="PAL_ERR_RTOS_PRIORITY"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ab842a33fc2033095f7526d36e76ffde3"><param name="Name" value="PAL_ERR_RTOS_RESOURCE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4f005aeb7022829339f50e6a1c48f07b"><param name="Name" value="PAL_ERR_RTOS_TIMEOUT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a166a7c0ad427986e42eee2d7ed5f2690"><param name="Name" value="PAL_ERR_RTOS_VALUE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aef19ff78785fd271b93bec327551f74e"><param name="Name" value="PAL_ERR_SOCKET_ADDRESS_IN_USE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a05b82765d558b836fc988283d1d93e20"><param name="Name" value="PAL_ERR_SOCKET_ALREADY_CONNECTED"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8f07f3411c26d3107b86d64739b18fd8"><param name="Name" value="PAL_ERR_SOCKET_AUTH_ERROR"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7027cc594e676d26ade0efcca3d4a8cf"><param name="Name" value="PAL_ERR_SOCKET_CONNECTION_ABORTED"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a7449190771bd90f1b5dd54f0626c4d50"><param name="Name" value="PAL_ERR_SOCKET_CONNECTION_CLOSED"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae917d0749e3e541369413c782d6a1f3b"><param name="Name" value="PAL_ERR_SOCKET_CONNECTION_RESET"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aeb186326d561fd71f180d59ab12b0d5f"><param name="Name" value="PAL_ERR_SOCKET_DNS_ERROR"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a8b42b332534523a5e81162bdb8e2cc10"><param name="Name" value="PAL_ERR_SOCKET_ERROR_BASE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a557f240d9723393b246c9d03ad5789cd"><param name="Name" value="PAL_ERR_SOCKET_FAILED_TO_SET_SOCKET_TO_NON_BLOCKING"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5abd4cc21a7f65533cf8dfc118b19957fe"><param name="Name" value="PAL_ERR_SOCKET_GENERIC"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a352e14b96bd1489c42728f4da485b577"><param name="Name" value="PAL_ERR_SOCKET_HDCP_ERROR"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4d5cc5d96a1f1d23f69cf3fead9291e2"><param name="Name" value="PAL_ERR_SOCKET_HOST_UNREACHABLE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a493871f4bc0b3223df779b89a3b0b829"><param name="Name" value="PAL_ERR_SOCKET_IN_PROGRES"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ae2f7bce589b21231745767161c43349d"><param name="Name" value="PAL_ERR_SOCKET_INPUT_OUTPUT_ERROR"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a033490de59972a46877f230267a070c8"><param name="Name" value="PAL_ERR_SOCKET_INVALID_ADDRESS"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a3c0172ff8cc391873b83c9a1b7b6bd35"><param name="Name" value="PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ade5fcfb0a8b3810ef513c25e7722db6e"><param name="Name" value="PAL_ERR_SOCKET_INVALID_VALUE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a25f6affacd34aaf7e734a666b5186f2d"><param name="Name" value="PAL_ERR_SOCKET_NO_BUFFERS"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a90f2efed44c1dbb04928d381355ece58"><param name="Name" value="PAL_ERR_SOCKET_NOT_CONNECTED"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a9a2d6af2657b5abd81bd38c7c6cf0479"><param name="Name" value="PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a089003c7bd380a8426f211fedfb813ea"><param name="Name" value="PAL_ERR_SOCKET_WOULD_BLOCK"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a316210ded62b55ed1bbcc4e3c5ce8a49"><param name="Name" value="PAL_ERR_TIMEOUT_EXPIRED"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a123c0937e9046005938c724b7e0c7daf"><param name="Name" value="PAL_ERR_UPDATE_BUSY"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a4dffb58d0202d7ca5ac60eff42313ac9"><param name="Name" value="PAL_ERR_UPDATE_CHUNK_TO_SMALL"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaacb4fc41bcde230f42aeb05bfaccf42"><param name="Name" value="PAL_ERR_UPDATE_END_OF_IMAGE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a29017351514ed7e0a1fb46d6f1b53cb5"><param name="Name" value="PAL_ERR_UPDATE_ERROR"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5adbf49b864b46d39640bc1c0ba65b1d2b"><param name="Name" value="PAL_ERR_UPDATE_ERROR_BASE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5a6f29986bcfb1cc0f26c1dfa17fa44cf6"><param name="Name" value="PAL_ERR_UPDATE_OUT_OF_BOUNDS"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5ada39f2992787040da527359ce7a25a57"><param name="Name" value="PAL_ERR_UPDATE_PALFROM_API"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5aaa9a76afb13586743e21ece5310487e6"><param name="Name" value="PAL_ERR_UPDATE_PALFROM_IO"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/dfe/pal__errors_8h.html#a480f42f9c6533ec9a36f3312a285a7d5afaeb01c79160229de16f8b764224823b"><param name="Name" value="PAL_ERR_UPDATE_TIMEOUT"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a5258efd8b21d9c881df29b29686674d8"><param name="Name" value="pal_getNetInterfaceInfo"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a5258efd8b21d9c881df29b29686674d8"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a5258efd8b21d9c881df29b29686674d8"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a65df7c68bcf7a21db5d1a7a3830fd19c"><param name="Name" value="pal_getNumberOfNetInterfaces"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a65df7c68bcf7a21db5d1a7a3830fd19c"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a65df7c68bcf7a21db5d1a7a3830fd19c"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#ade5cf610808db5462666465b648e7724"><param name="Name" value="pal_getSockAddrIPV4Addr"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#ade5cf610808db5462666465b648e7724"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ade5cf610808db5462666465b648e7724"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a153bc6165f64bbf3e6bcc79b0d39138f"><param name="Name" value="pal_getSockAddrIPV6Addr"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a153bc6165f64bbf3e6bcc79b0d39138f"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a153bc6165f64bbf3e6bcc79b0d39138f"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a4658c7e8224b536d4fd71fed2602b12e"><param name="Name" value="pal_getSockAddrPort"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a4658c7e8224b536d4fd71fed2602b12e"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a4658c7e8224b536d4fd71fed2602b12e"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a2d9d4e04e43995123efe134c767cd6e1"><param name="Name" value="pal_getSocketOptions"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a2d9d4e04e43995123efe134c767cd6e1"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a2d9d4e04e43995123efe134c767cd6e1"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a9bd4f76c3897b4338fe50a8d69830fe5"><param name="Name" value="PAL_HOST_TO_LITTLE_ENDIAN_16BIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ab01046a25df49d7fe1d85a8bf722975f"><param name="Name" value="PAL_HOST_TO_LITTLE_ENDIAN_32BIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#adc0a4752569188800a75e1601a7e11b5"><param name="Name" value="PAL_HOST_TO_LITTLE_ENDIAN_64BIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a55b1a7d9f939231045521ec4a4817cff"><param name="Name" value="PAL_HTONL"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a98390512a7c2732f1197b07acf03e226"><param name="Name" value="PAL_HTONS"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#abd4e26912e35fc58e5bc0172765bdc6e"><param name="Name" value="pal_in_addr_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d7/d66/pal__init_8c.html"><param name="Name" value="pal_init.c"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d7/d66/pal__init_8c.html#a312dfda15122dbd2abff67b580c811ad"><param name="Name" value="pal_destroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d7/d66/pal__init_8c.html#a28095bec6e2c1c74ad3b08414f44b9d6"><param name="Name" value="pal_init"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/pal_8h.html#a28095bec6e2c1c74ad3b08414f44b9d6"><param name="Name" value="pal_init"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/pal_8h.html#a28095bec6e2c1c74ad3b08414f44b9d6"><param name="Name" value="pal.h"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d7/d66/pal__init_8c.html#a28095bec6e2c1c74ad3b08414f44b9d6"><param name="Name" value="pal_init.c"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ad989cc9220df56cd410590fc628e93b7"><param name="Name" value="PAL_INVERSE_UINT16_BYTES"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a4a0b711e344955017ab60ff37977e18f"><param name="Name" value="PAL_INVERSE_UINT32_BYTES"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ae376dc7d0682fb2fc8927897fb065c4c"><param name="Name" value="PAL_INVERSE_UINT64_BYTES"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ad7a3e182cb430da7c139858b0bfbb27f"><param name="Name" value="PAL_IPV4_ADDRESS_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a9903ebae215b70520c8dcc9f0aa03e24"><param name="Name" value="PAL_IPV6_ADDRESS_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ad1c98870c5eeba8fe649345e371ef866"><param name="Name" value="PAL_LITTLE_ENDIAN_TO_HOST_16BIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#aa6229ece344478c07677c8b0436b1bb0"><param name="Name" value="PAL_LITTLE_ENDIAN_TO_HOST_32BIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a4ae1ca0100a3eee36eb95931cbec633e"><param name="Name" value="PAL_LITTLE_ENDIAN_TO_HOST_64BIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html"><param name="Name" value="pal_macros.h"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#aa1b662a1198e5729d6d0934a7efb02c4"><param name="Name" value="DEBUG_PRINT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a1651594dc71abf466bddd0f6393edb8b"><param name="Name" value="LITTLE__ENDIAN"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a966411fe41e3830553bb1b8cf8baf730"><param name="Name" value="PAL_DIVIDE_ROUND_UP"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a9bd4f76c3897b4338fe50a8d69830fe5"><param name="Name" value="PAL_HOST_TO_LITTLE_ENDIAN_16BIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ab01046a25df49d7fe1d85a8bf722975f"><param name="Name" value="PAL_HOST_TO_LITTLE_ENDIAN_32BIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#adc0a4752569188800a75e1601a7e11b5"><param name="Name" value="PAL_HOST_TO_LITTLE_ENDIAN_64BIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a55b1a7d9f939231045521ec4a4817cff"><param name="Name" value="PAL_HTONL"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a98390512a7c2732f1197b07acf03e226"><param name="Name" value="PAL_HTONS"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ad989cc9220df56cd410590fc628e93b7"><param name="Name" value="PAL_INVERSE_UINT16_BYTES"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a4a0b711e344955017ab60ff37977e18f"><param name="Name" value="PAL_INVERSE_UINT32_BYTES"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ae376dc7d0682fb2fc8927897fb065c4c"><param name="Name" value="PAL_INVERSE_UINT64_BYTES"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ad1c98870c5eeba8fe649345e371ef866"><param name="Name" value="PAL_LITTLE_ENDIAN_TO_HOST_16BIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#aa6229ece344478c07677c8b0436b1bb0"><param name="Name" value="PAL_LITTLE_ENDIAN_TO_HOST_32BIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a4ae1ca0100a3eee36eb95931cbec633e"><param name="Name" value="PAL_LITTLE_ENDIAN_TO_HOST_64BIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a117c6ce53646b65b4cdcb5da01801675"><param name="Name" value="PAL_MAX"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a6ee734c1fc41affa0926797e382fc8d4"><param name="Name" value="PAL_MAX_INT32"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ada154fcb4b3ef9b641486f30de56c7b7"><param name="Name" value="PAL_MAX_INT64"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#af8d58ab12b0f655fe922fc40b3e52ca2"><param name="Name" value="PAL_MAX_UINT16"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ac7e2d509703ff033a302b325aa664f6e"><param name="Name" value="PAL_MAX_UINT32"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a28a8006d7bca3b64235ca4d0cb39bf2b"><param name="Name" value="PAL_MAX_UINT64"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a08c56fc189bfb1a6864a7b5d68433e7e"><param name="Name" value="PAL_MAX_UINT8"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a29066dd6aaf6aa8fa21f3a88feb6da59"><param name="Name" value="PAL_MIN"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ac3a2f334767728e9bc57512139e0bd61"><param name="Name" value="PAL_MIN_INT32"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#aaeb3e06c7119793239368c0fe74cda05"><param name="Name" value="PAL_MODULE_DEINIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ad2109677fa03720f6ab0df072c755529"><param name="Name" value="PAL_MODULE_INIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ade9a83a9aab96cf50058801afdef4ace"><param name="Name" value="PAL_MODULE_IS_INIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a7cbc81d1fb0dcddb1cc88b59d50c2aa9"><param name="Name" value="PAL_NTOHL"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a55fbcf7a453813fec69016916802de2c"><param name="Name" value="PAL_NTOHS"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5"><param name="Name" value="PAL_SUCCESS"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a117c6ce53646b65b4cdcb5da01801675"><param name="Name" value="PAL_MAX"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a6ee734c1fc41affa0926797e382fc8d4"><param name="Name" value="PAL_MAX_INT32"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ada154fcb4b3ef9b641486f30de56c7b7"><param name="Name" value="PAL_MAX_INT64"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#abb1ceb83ff6a709614d1394e7e39391d"><param name="Name" value="PAL_MAX_NUMBER_OF_THREADS"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#a79ed46284848e83d0dba68933c40f82a"><param name="Name" value="PAL_MAX_SUPORTED_NET_INTEFACES"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#af8d58ab12b0f655fe922fc40b3e52ca2"><param name="Name" value="PAL_MAX_UINT16"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ac7e2d509703ff033a302b325aa664f6e"><param name="Name" value="PAL_MAX_UINT32"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a28a8006d7bca3b64235ca4d0cb39bf2b"><param name="Name" value="PAL_MAX_UINT64"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a08c56fc189bfb1a6864a7b5d68433e7e"><param name="Name" value="PAL_MAX_UINT8"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a29066dd6aaf6aa8fa21f3a88feb6da59"><param name="Name" value="PAL_MIN"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ac3a2f334767728e9bc57512139e0bd61"><param name="Name" value="PAL_MIN_INT32"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#aaeb3e06c7119793239368c0fe74cda05"><param name="Name" value="PAL_MODULE_DEINIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ad2109677fa03720f6ab0df072c755529"><param name="Name" value="PAL_MODULE_INIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#ade9a83a9aab96cf50058801afdef4ace"><param name="Name" value="PAL_MODULE_IS_INIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#af12d673085039783ab1d2613eff7e4a4"><param name="Name" value="PAL_MUTEX_DATA_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#a337c171a4cf5d7f04894051002d81eba"><param name="Name" value="PAL_NET_ASYNCHRONOUS_SOCKET_API"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#aefc09884590381a71433c34b3f2e2aa5"><param name="Name" value="PAL_NET_DEFAULT_INTERFACE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#ad7e2f6ebd028faacc239229cce972fa7"><param name="Name" value="PAL_NET_DNS_SUPPORT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ac831e2e5064065e10c741da1003ff039"><param name="Name" value="PAL_NET_MAX_ADDR_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ac2b7451d38e150079fbef20b57ee3fe9"><param name="Name" value="PAL_NET_SELECT_IS_ERR"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a8894a96773018ba6058811087b4b2ac8"><param name="Name" value="PAL_NET_SELECT_IS_RX"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a31ca79ac9ae5c2ddd890263a989fc4d8"><param name="Name" value="PAL_NET_SELECT_IS_TX"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#aa66d7131cc6c44ac6c5ab6a9dda3f69a"><param name="Name" value="PAL_NET_SOCKET_SELECT_ERR_BIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31"><param name="Name" value="PAL_NET_SOCKET_SELECT_MAX_SOCKETS"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#aae14933b48cd31821913f2bfb15e18b2"><param name="Name" value="PAL_NET_SOCKET_SELECT_RX_BIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ad8ddc879cf2eace65036137660b8b53d"><param name="Name" value="PAL_NET_SOCKET_SELECT_TX_BIT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#abc23815d68dafc619e2c2ba210d65bd0"><param name="Name" value="PAL_NET_SUPPORT_LWIP"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#a4662be64705952cfa0925001c9d917c3"><param name="Name" value="PAL_NET_TCP_AND_TLS_SUPPORT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ab1873f5ba58eb802dd808f05a1101670"><param name="Name" value="PAL_NET_TEST_INCOMING_PORT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a7c3cef32674c412f87617e87a194e0e3"><param name="Name" value="PAL_NET_TEST_SERVER_HTTP_PORT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a0570e783c7412d25d0c33817da54c02f"><param name="Name" value="PAL_NET_TEST_SERVER_IP"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a7175d943793d9a92ebe83d12f2a65063"><param name="Name" value="PAL_NET_TEST_SERVER_IP_STRING"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#abbe7571a0fc631eb43561606f4d5bb0e"><param name="Name" value="PAL_NET_TEST_SERVER_NAME"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#abc63439a9af70c80b125accdc2afbb12"><param name="Name" value="PAL_NET_TEST_SERVER_UDP_PORT"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html"><param name="Name" value="pal_network.c"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#ac1ff0fb22cbd84e6c7920c095ddbde63"><param name="Name" value="pal_bind"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a18197e0f047f17d2617461594f5ed644"><param name="Name" value="pal_close"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a5258efd8b21d9c881df29b29686674d8"><param name="Name" value="pal_getNetInterfaceInfo"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a65df7c68bcf7a21db5d1a7a3830fd19c"><param name="Name" value="pal_getNumberOfNetInterfaces"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#ade5cf610808db5462666465b648e7724"><param name="Name" value="pal_getSockAddrIPV4Addr"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a153bc6165f64bbf3e6bcc79b0d39138f"><param name="Name" value="pal_getSockAddrIPV6Addr"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a4658c7e8224b536d4fd71fed2602b12e"><param name="Name" value="pal_getSockAddrPort"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a2d9d4e04e43995123efe134c767cd6e1"><param name="Name" value="pal_getSocketOptions"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#abd4e26912e35fc58e5bc0172765bdc6e"><param name="Name" value="pal_in_addr_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a6b5e705be1e7c3c16080f2b05b87ff7d"><param name="Name" value="pal_receiveFrom"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a081cc2fd09644c41068673487b39f6b8"><param name="Name" value="pal_registerNetworkInterface"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#acce808f708e653b6bed317072888ca23"><param name="Name" value="pal_sendTo"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#aed02a6f53b88e1d5e81607b1221a3efa"><param name="Name" value="pal_setSockAddrIPV4Addr"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a0cc13f7ef9ceb4a75884a8bebf0d831c"><param name="Name" value="pal_setSockAddrIPV6Addr"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#abbeb1395896eb79ab564568b9ab8a628"><param name="Name" value="pal_setSockAddrPort"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a2e1bbe81a35a1cb54c351912bb97736f"><param name="Name" value="pal_setSocketOptions"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#aa852fb6e271fb91efd65e2a1ead93b9a"><param name="Name" value="pal_socket"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#aaf4e46664d7b7f8902c69cb72a65c943"><param name="Name" value="pal_socketAddressInternal6_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#abc2b368e206e7353e31a520fa573cd8a"><param name="Name" value="pal_socketAddressInternal_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a5cab4ea55a3d28cfd8d4dca8376a111c"><param name="Name" value="pal_socketMiniSelect"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html"><param name="Name" value="pal_network.h"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a9420d0656d763eeeb6c97243e0514f4f"><param name="Name" value="PAL_AF_INET"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7a7375b598bd48e43e8869594d96b2c0d7"><param name="Name" value="PAL_AF_INET6"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a01b7e0ab9c2845885f6a7e012002dba7af6e1af9f402ae053ad1ac009b61957c3"><param name="Name" value="PAL_AF_UNSPEC"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ac1ff0fb22cbd84e6c7920c095ddbde63"><param name="Name" value="pal_bind"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a18197e0f047f17d2617461594f5ed644"><param name="Name" value="pal_close"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a5258efd8b21d9c881df29b29686674d8"><param name="Name" value="pal_getNetInterfaceInfo"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a65df7c68bcf7a21db5d1a7a3830fd19c"><param name="Name" value="pal_getNumberOfNetInterfaces"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ade5cf610808db5462666465b648e7724"><param name="Name" value="pal_getSockAddrIPV4Addr"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a153bc6165f64bbf3e6bcc79b0d39138f"><param name="Name" value="pal_getSockAddrIPV6Addr"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a4658c7e8224b536d4fd71fed2602b12e"><param name="Name" value="pal_getSockAddrPort"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a2d9d4e04e43995123efe134c767cd6e1"><param name="Name" value="pal_getSocketOptions"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ad7a3e182cb430da7c139858b0bfbb27f"><param name="Name" value="PAL_IPV4_ADDRESS_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a9903ebae215b70520c8dcc9f0aa03e24"><param name="Name" value="PAL_IPV6_ADDRESS_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#aefc09884590381a71433c34b3f2e2aa5"><param name="Name" value="PAL_NET_DEFAULT_INTERFACE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ac831e2e5064065e10c741da1003ff039"><param name="Name" value="PAL_NET_MAX_ADDR_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ac2b7451d38e150079fbef20b57ee3fe9"><param name="Name" value="PAL_NET_SELECT_IS_ERR"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a8894a96773018ba6058811087b4b2ac8"><param name="Name" value="PAL_NET_SELECT_IS_RX"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a31ca79ac9ae5c2ddd890263a989fc4d8"><param name="Name" value="PAL_NET_SELECT_IS_TX"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#aa66d7131cc6c44ac6c5ab6a9dda3f69a"><param name="Name" value="PAL_NET_SOCKET_SELECT_ERR_BIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a5607f2af4b642ef0548bd47c891c6d31"><param name="Name" value="PAL_NET_SOCKET_SELECT_MAX_SOCKETS"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#aae14933b48cd31821913f2bfb15e18b2"><param name="Name" value="PAL_NET_SOCKET_SELECT_RX_BIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ad8ddc879cf2eace65036137660b8b53d"><param name="Name" value="PAL_NET_SOCKET_SELECT_TX_BIT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a6b5e705be1e7c3c16080f2b05b87ff7d"><param name="Name" value="pal_receiveFrom"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a081cc2fd09644c41068673487b39f6b8"><param name="Name" value="pal_registerNetworkInterface"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#acce808f708e653b6bed317072888ca23"><param name="Name" value="pal_sendTo"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#aed02a6f53b88e1d5e81607b1221a3efa"><param name="Name" value="pal_setSockAddrIPV4Addr"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a0cc13f7ef9ceb4a75884a8bebf0d831c"><param name="Name" value="pal_setSockAddrIPV6Addr"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#abbeb1395896eb79ab564568b9ab8a628"><param name="Name" value="pal_setSockAddrPort"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a2e1bbe81a35a1cb54c351912bb97736f"><param name="Name" value="pal_setSocketOptions"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a9e1ad5d4670e06bb2a8b110c0ba3e5ca"><param name="Name" value="PAL_SO_RCVTIMEO"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a352587a3fea85695be1ce478aa3da001"><param name="Name" value="PAL_SO_REUSEADDR"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51aa744f783051825333c23177008d140de"><param name="Name" value="PAL_SO_SNDTIMEO"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418a14e907287d0ede1306aa35f5687e0941"><param name="Name" value="PAL_SOCK_DGRAM"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a"><param name="Name" value="pal_socket"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a5cab4ea55a3d28cfd8d4dca8376a111c"><param name="Name" value="pal_socketMiniSelect"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4"><param name="Name" value="pal_timeVal_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1"><param name="Name" value="palIpV4Addr_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192"><param name="Name" value="palIpV6Addr_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da"><param name="Name" value="palNetInterfaceInfo_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996"><param name="Name" value="palSocket_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10"><param name="Name" value="palSocketAddress_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901"><param name="Name" value="palSocketLength_t"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a7cbc81d1fb0dcddb1cc88b59d50c2aa9"><param name="Name" value="PAL_NTOHL"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a55fbcf7a453813fec69016916802de2c"><param name="Name" value="PAL_NTOHS"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a9b3b50428d7ad199287a291137041c43"><param name="Name" value="PAL_NUM_OF_THREAD_INSTANCES"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a9b33d260ee1022f5b5f6a9dfc3363f2a"><param name="Name" value="pal_osAtomicIncrement"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a9b33d260ee1022f5b5f6a9dfc3363f2a"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a9b33d260ee1022f5b5f6a9dfc3363f2a"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ad6aaee432fd7ea5e35ab500a6278cc25"><param name="Name" value="pal_osDelay"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ad6aaee432fd7ea5e35ab500a6278cc25"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ad6aaee432fd7ea5e35ab500a6278cc25"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a59e85747582417a1395ed0f9c140eb8a"><param name="Name" value="pal_osKernelSysMilliSecTick"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a59e85747582417a1395ed0f9c140eb8a"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a59e85747582417a1395ed0f9c140eb8a"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#af88551b6ca24a7a2bb6d94d423eb4401"><param name="Name" value="pal_osKernelSysTick64"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#af88551b6ca24a7a2bb6d94d423eb4401"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#af88551b6ca24a7a2bb6d94d423eb4401"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a9800b8b9e057fe17e50c4259c809f898"><param name="Name" value="pal_osKernelSysTick"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a9800b8b9e057fe17e50c4259c809f898"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a9800b8b9e057fe17e50c4259c809f898"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a087214ae87c20fd59f47fe3c96d0eefc"><param name="Name" value="pal_osKernelSysTickFrequency"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a087214ae87c20fd59f47fe3c96d0eefc"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a087214ae87c20fd59f47fe3c96d0eefc"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a34375ee82619a4064849daccbdfbc966"><param name="Name" value="pal_osKernelSysTickMicroSec"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a34375ee82619a4064849daccbdfbc966"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a34375ee82619a4064849daccbdfbc966"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ab70d0be45514258874c0406c2040372c"><param name="Name" value="pal_osMessageGet"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ab70d0be45514258874c0406c2040372c"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ab70d0be45514258874c0406c2040372c"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a966daa5b0bd9282fbffa7c462da1c417"><param name="Name" value="pal_osMessagePut"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a966daa5b0bd9282fbffa7c462da1c417"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a966daa5b0bd9282fbffa7c462da1c417"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a0c7f0003e92b3494089966d53ab24a1b"><param name="Name" value="pal_osMessageQueueCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a0c7f0003e92b3494089966d53ab24a1b"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a0c7f0003e92b3494089966d53ab24a1b"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#adba13212ec060092acdf6165e82be5b6"><param name="Name" value="pal_osMessageQueueDestroy"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#adba13212ec060092acdf6165e82be5b6"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#adba13212ec060092acdf6165e82be5b6"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#af89aab14085207b1a0951f7aad24193c"><param name="Name" value="pal_osMutexCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#af89aab14085207b1a0951f7aad24193c"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#af89aab14085207b1a0951f7aad24193c"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a03f43d7e53435d89f316862b48b573c4"><param name="Name" value="pal_osMutexDelete"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a03f43d7e53435d89f316862b48b573c4"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a03f43d7e53435d89f316862b48b573c4"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a1d976a616a5c850b2016b2b87d8b47cc"><param name="Name" value="pal_osMutexRelease"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a1d976a616a5c850b2016b2b87d8b47cc"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a1d976a616a5c850b2016b2b87d8b47cc"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#acda0974247325955719b23494d66c622"><param name="Name" value="pal_osMutexWait"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#acda0974247325955719b23494d66c622"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#acda0974247325955719b23494d66c622"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a3a2b57685096d16a110ee38f7f29e099"><param name="Name" value="pal_osPoolAlloc"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a3a2b57685096d16a110ee38f7f29e099"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a3a2b57685096d16a110ee38f7f29e099"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a5d20661cd387a172450a2fe12993687a"><param name="Name" value="pal_osPoolCAlloc"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a5d20661cd387a172450a2fe12993687a"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a5d20661cd387a172450a2fe12993687a"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a1245f053abb3fdb7ab2ceb5a2899e8c6"><param name="Name" value="pal_osPoolCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a1245f053abb3fdb7ab2ceb5a2899e8c6"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a1245f053abb3fdb7ab2ceb5a2899e8c6"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a1c01464448f8d7bd95bf518d651484c6"><param name="Name" value="pal_osPoolDestroy"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a1c01464448f8d7bd95bf518d651484c6"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a1c01464448f8d7bd95bf518d651484c6"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a79f4997069310aa7bbb6ae7995988dd7"><param name="Name" value="pal_osPoolFree"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a79f4997069310aa7bbb6ae7995988dd7"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a79f4997069310aa7bbb6ae7995988dd7"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ac6ad927a77b4275e1da2373f810ee2af"><param name="Name" value="PAL_osPriorityAboveNormal"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a23fdf72acf5a9475ca4054d4e1a187a5"><param name="Name" value="PAL_osPriorityBelowNormal"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a94aea8f14f0bc89f7f4540416c08da3e"><param name="Name" value="PAL_osPriorityError"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a70d584591ab861e247ccfe94e55e35a2"><param name="Name" value="PAL_osPriorityHigh"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a62b0350b25146b93c57a71ce65bb017a"><param name="Name" value="PAL_osPriorityIdle"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ab3b5b218f45b07de8153427c63273fec"><param name="Name" value="PAL_osPriorityLow"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a897a2d3cf2fa39f82141535d0d4e51a1"><param name="Name" value="PAL_osPriorityNormal"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a3c2b8a244cae70bbf23a5a4d033df2ce"><param name="Name" value="PAL_osPriorityRealtime"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ab8ab0f31bbf4258b7684d22e7725a9f8"><param name="Name" value="pal_osReboot"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ab8ab0f31bbf4258b7684d22e7725a9f8"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ab8ab0f31bbf4258b7684d22e7725a9f8"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#aaa7aee442a5c8cc274d3e52206984037"><param name="Name" value="pal_osSemaphoreCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#aaa7aee442a5c8cc274d3e52206984037"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#aaa7aee442a5c8cc274d3e52206984037"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a45f071482f8669821b90264e0470b33d"><param name="Name" value="pal_osSemaphoreDelete"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a45f071482f8669821b90264e0470b33d"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a45f071482f8669821b90264e0470b33d"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a009d0c063119265f9c5c0c9bff379c14"><param name="Name" value="pal_osSemaphoreRelease"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a009d0c063119265f9c5c0c9bff379c14"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a009d0c063119265f9c5c0c9bff379c14"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#aa2d998744dbc9504bfe0358f85457fc4"><param name="Name" value="pal_osSemaphoreWait"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#aa2d998744dbc9504bfe0358f85457fc4"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#aa2d998744dbc9504bfe0358f85457fc4"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a2dae64d917f644982b893037adf562b4"><param name="Name" value="pal_osThreadCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a2dae64d917f644982b893037adf562b4"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2dae64d917f644982b893037adf562b4"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a2993b8f6b5e8d7ccd6121dc18330e4be"><param name="Name" value="pal_osThreadGetId"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a2993b8f6b5e8d7ccd6121dc18330e4be"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2993b8f6b5e8d7ccd6121dc18330e4be"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ac94f4efc4bad73969e57c8255c136a0d"><param name="Name" value="pal_osThreadGetLocalStore"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ac94f4efc4bad73969e57c8255c136a0d"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ac94f4efc4bad73969e57c8255c136a0d"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#abcfa47b411929b33d5d9cfaaff28ce18"><param name="Name" value="pal_osThreadTerminate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#abcfa47b411929b33d5d9cfaaff28ce18"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#abcfa47b411929b33d5d9cfaaff28ce18"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#aa4da36fbbba744a14d1bdfe2a26d1a18"><param name="Name" value="pal_osTimerCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#aa4da36fbbba744a14d1bdfe2a26d1a18"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#aa4da36fbbba744a14d1bdfe2a26d1a18"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ac7ca6e7c3c229f4092c9df4b69e7dd59"><param name="Name" value="pal_osTimerDelete"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ac7ca6e7c3c229f4092c9df4b69e7dd59"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ac7ca6e7c3c229f4092c9df4b69e7dd59"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a6c60c9e433bc6005bac6b02d5aba7363"><param name="Name" value="pal_osTimerStart"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a6c60c9e433bc6005bac6b02d5aba7363"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6c60c9e433bc6005bac6b02d5aba7363"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a94f4df594102e582cbd2114f6eebb57d"><param name="Name" value="pal_osTimerStop"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a94f4df594102e582cbd2114f6eebb57d"><param name="Name" value="pal_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a94f4df594102e582cbd2114f6eebb57d"><param name="Name" value="pal_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a53a267fd8ed0b7a5cf988224e95bd47c"><param name="Name" value="pal_plat_bind"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a53a267fd8ed0b7a5cf988224e95bd47c"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a53a267fd8ed0b7a5cf988224e95bd47c"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a071355a0ca4d4eece45f0ed85a9ab1da"><param name="Name" value="pal_plat_close"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a071355a0ca4d4eece45f0ed85a9ab1da"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a071355a0ca4d4eece45f0ed85a9ab1da"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6dc3b4c06e96b29068995809b98a935e"><param name="Name" value="pal_plat_getNetInterfaceInfo"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6dc3b4c06e96b29068995809b98a935e"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a6dc3b4c06e96b29068995809b98a935e"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#af36bf075867e5ed0be7479312469361f"><param name="Name" value="pal_plat_getNumberOfNetInterfaces"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#af36bf075867e5ed0be7479312469361f"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#af36bf075867e5ed0be7479312469361f"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a76c4e2adf95702c4db8f3792ae373bf9"><param name="Name" value="pal_plat_getSocketOptions"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a76c4e2adf95702c4db8f3792ae373bf9"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a76c4e2adf95702c4db8f3792ae373bf9"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a53a267fd8ed0b7a5cf988224e95bd47c"><param name="Name" value="pal_plat_bind"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a071355a0ca4d4eece45f0ed85a9ab1da"><param name="Name" value="pal_plat_close"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6dc3b4c06e96b29068995809b98a935e"><param name="Name" value="pal_plat_getNetInterfaceInfo"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#af36bf075867e5ed0be7479312469361f"><param name="Name" value="pal_plat_getNumberOfNetInterfaces"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a76c4e2adf95702c4db8f3792ae373bf9"><param name="Name" value="pal_plat_getSocketOptions"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#aa869b5eddbf4eb6aebbbb587ece84aac"><param name="Name" value="pal_plat_receiveFrom"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#ab37f007a0574ca73916b26240ff1126b"><param name="Name" value="pal_plat_RegisterNetworkInterface"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a17365747ed8d29df153a336da3942187"><param name="Name" value="pal_plat_sendTo"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a08ea05dacec7f7d9dc892dab0318542d"><param name="Name" value="pal_plat_setSocketOptions"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a58a25ae30bb6225cc8b5344053fd705c"><param name="Name" value="pal_plat_socket"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#aa0c26dfeee80444e58eacab238206d09"><param name="Name" value="pal_plat_socketMiniSelect"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#ab92cca0e4facf3d62e03c0d0ca0523da"><param name="Name" value="pal_plat_socketsInit"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd"><param name="Name" value="pal_plat_socketsTerminate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a8c607fcbfa526e4485fcdb55b79b39d6"><param name="Name" value="PAL_SOCKET_OPTION_ERROR"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a056dbb70ade63a6ebc47f1f11733b8da"><param name="Name" value="palSelectCallback0"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a4dcff46004af6c4d300d542de9c7d38e"><param name="Name" value="palSelectCallback1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#abe369a2a4de2c8e25ed47166f068918f"><param name="Name" value="palSelectCallback2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#aeabad2d66db156a97447f6e22614e78c"><param name="Name" value="palSelectCallback3"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a521d96ff90d0b417e6749df8ae90bf8b"><param name="Name" value="palSelectCallback4"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#ae937bf3f397b1642a29a44c6cf9bc075"><param name="Name" value="palSelectCallback5"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6b99c0251a9efb7224658c8da6e3ad27"><param name="Name" value="palSelectCallback6"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6e102ddea1bd5315a4224c2a1fdddd58"><param name="Name" value="palSelectCallback7"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#abb42afef799c3d7409ba0c29d645cbaf"><param name="Name" value="palSelectCallbackFunction_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a4f6fdfaea202b7b50e57e7253705d96e"><param name="Name" value="s_palSelectPalCallbackFunctions"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a77af6aede7e9f4d41f8c87ebc381b517"><param name="Name" value="s_select_event_happened"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a53a267fd8ed0b7a5cf988224e95bd47c"><param name="Name" value="pal_plat_bind"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a071355a0ca4d4eece45f0ed85a9ab1da"><param name="Name" value="pal_plat_close"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a6dc3b4c06e96b29068995809b98a935e"><param name="Name" value="pal_plat_getNetInterfaceInfo"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#af36bf075867e5ed0be7479312469361f"><param name="Name" value="pal_plat_getNumberOfNetInterfaces"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a76c4e2adf95702c4db8f3792ae373bf9"><param name="Name" value="pal_plat_getSocketOptions"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#aa869b5eddbf4eb6aebbbb587ece84aac"><param name="Name" value="pal_plat_receiveFrom"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a9f6e13112366978741749649356a886c"><param name="Name" value="pal_plat_RegisterNetworkInterface"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a17365747ed8d29df153a336da3942187"><param name="Name" value="pal_plat_sendTo"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a08ea05dacec7f7d9dc892dab0318542d"><param name="Name" value="pal_plat_setSocketOptions"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a58a25ae30bb6225cc8b5344053fd705c"><param name="Name" value="pal_plat_socket"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#aa0c26dfeee80444e58eacab238206d09"><param name="Name" value="pal_plat_socketMiniSelect"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#ab92cca0e4facf3d62e03c0d0ca0523da"><param name="Name" value="pal_plat_socketsInit"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd"><param name="Name" value="pal_plat_socketsTerminate"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ac62a5b36fc159e12670c44a12dc08beb"><param name="Name" value="pal_plat_osAtomicIncrement"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ac62a5b36fc159e12670c44a12dc08beb"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ac62a5b36fc159e12670c44a12dc08beb"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a140b31a48ac23c909f1a94ad11b04aac"><param name="Name" value="pal_plat_osDelay"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a140b31a48ac23c909f1a94ad11b04aac"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a140b31a48ac23c909f1a94ad11b04aac"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a82eade9e7b100bd9dc9ab8312f98f827"><param name="Name" value="pal_plat_osKernelSysMilliSecTick"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a82eade9e7b100bd9dc9ab8312f98f827"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a82eade9e7b100bd9dc9ab8312f98f827"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ad104e06e7b043305fdbfbc37e4ea2826"><param name="Name" value="pal_plat_osKernelSysTick64"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ae92f87b121a06e0062ee014025c0ba9e"><param name="Name" value="pal_plat_osKernelSysTick"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ae92f87b121a06e0062ee014025c0ba9e"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ae92f87b121a06e0062ee014025c0ba9e"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#addc790764a23a3e16344bd830ebe01ef"><param name="Name" value="pal_plat_osKernelSysTickFrequency"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#addc790764a23a3e16344bd830ebe01ef"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aacd58e95c23ad1c8f39b8b12ed2d83dd"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2d18206974bdf17c48b97e2e16505f19"><param name="Name" value="pal_plat_osKernelSysTickMicroSec"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2d18206974bdf17c48b97e2e16505f19"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a2d18206974bdf17c48b97e2e16505f19"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a67696b86a6116a82da7c26a433280e58"><param name="Name" value="pal_plat_osMessageGet"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a67696b86a6116a82da7c26a433280e58"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a67696b86a6116a82da7c26a433280e58"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aa80549a557e50e0759991c6b11eb456a"><param name="Name" value="pal_plat_osMessagePut"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aa80549a557e50e0759991c6b11eb456a"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aa80549a557e50e0759991c6b11eb456a"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ad25c8f7cb22985b077e893be5bc27d48"><param name="Name" value="pal_plat_osMessageQueueCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ad25c8f7cb22985b077e893be5bc27d48"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ad25c8f7cb22985b077e893be5bc27d48"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a0e0e6dc9958a9efd9beb62493bc3f67a"><param name="Name" value="pal_plat_osMessageQueueDestroy"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a0e0e6dc9958a9efd9beb62493bc3f67a"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a0e0e6dc9958a9efd9beb62493bc3f67a"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ae2425f958ab7d58eff5c5b3183f40305"><param name="Name" value="pal_plat_osMutexCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ae2425f958ab7d58eff5c5b3183f40305"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ae2425f958ab7d58eff5c5b3183f40305"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a909f4ae03b0acef0b84609d9b76679b4"><param name="Name" value="pal_plat_osMutexDelete"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a909f4ae03b0acef0b84609d9b76679b4"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a909f4ae03b0acef0b84609d9b76679b4"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#add4dbca7b11365e7301db1425c9fdf4d"><param name="Name" value="pal_plat_osMutexRelease"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#add4dbca7b11365e7301db1425c9fdf4d"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#add4dbca7b11365e7301db1425c9fdf4d"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aea4ad5224c43ff0fff2b77798d19748c"><param name="Name" value="pal_plat_osMutexWait"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aea4ad5224c43ff0fff2b77798d19748c"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aea4ad5224c43ff0fff2b77798d19748c"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a5938d16ea0c12594e8f8becd20acf3a7"><param name="Name" value="pal_plat_osPoolAlloc"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a5938d16ea0c12594e8f8becd20acf3a7"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a5938d16ea0c12594e8f8becd20acf3a7"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a8dff6b49f9798cdd4eed04f3dff30330"><param name="Name" value="pal_plat_osPoolCAlloc"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a8dff6b49f9798cdd4eed04f3dff30330"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a8dff6b49f9798cdd4eed04f3dff30330"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a7a4fa20255fe38cf183f6c924419fe85"><param name="Name" value="pal_plat_osPoolCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a7a4fa20255fe38cf183f6c924419fe85"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a7a4fa20255fe38cf183f6c924419fe85"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a33ca5b5e9d3a80594de4977924e6bc1b"><param name="Name" value="pal_plat_osPoolDestroy"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a33ca5b5e9d3a80594de4977924e6bc1b"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a33ca5b5e9d3a80594de4977924e6bc1b"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a84e2f41a587335de053e0b7f8a4163c2"><param name="Name" value="pal_plat_osPoolFree"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a84e2f41a587335de053e0b7f8a4163c2"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a84e2f41a587335de053e0b7f8a4163c2"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#abdb6ab5827d588b9c2e908beda4c3154"><param name="Name" value="pal_plat_osReboot"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#abdb6ab5827d588b9c2e908beda4c3154"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a894db4d6fe636ef7a7ebf83d4334adbd"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a6e7b3c23b094270b4e013c4412f2d3b1"><param name="Name" value="pal_plat_osSemaphoreCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a6e7b3c23b094270b4e013c4412f2d3b1"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a6e7b3c23b094270b4e013c4412f2d3b1"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ab37f3153b73dc87ca609c4c2e1bf8d6a"><param name="Name" value="pal_plat_osSemaphoreDelete"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ab37f3153b73dc87ca609c4c2e1bf8d6a"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ab37f3153b73dc87ca609c4c2e1bf8d6a"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a252f210ce8a502891821b5af24b09822"><param name="Name" value="pal_plat_osSemaphoreRelease"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a252f210ce8a502891821b5af24b09822"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a252f210ce8a502891821b5af24b09822"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ac9231eef550eb7b62a89e7a34b62d014"><param name="Name" value="pal_plat_osSemaphoreWait"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ac9231eef550eb7b62a89e7a34b62d014"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ac9231eef550eb7b62a89e7a34b62d014"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a9c965e0fdfd80fc86c901cf2bde88c64"><param name="Name" value="pal_plat_osThreadCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a9c965e0fdfd80fc86c901cf2bde88c64"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a9c965e0fdfd80fc86c901cf2bde88c64"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a4c42c35d3d7b375833a51b4670febe92"><param name="Name" value="pal_plat_osThreadGetId"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a4c42c35d3d7b375833a51b4670febe92"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a4c42c35d3d7b375833a51b4670febe92"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aca6b1b2f34861cf8e3d2dcc076992270"><param name="Name" value="pal_plat_osThreadGetLocalStore"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aca6b1b2f34861cf8e3d2dcc076992270"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aca6b1b2f34861cf8e3d2dcc076992270"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a3117f8911b3e83e27031f366aa652a4f"><param name="Name" value="pal_plat_osThreadTerminate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a3117f8911b3e83e27031f366aa652a4f"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a3117f8911b3e83e27031f366aa652a4f"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aee15bcaba1ed33c264bc4c91c1dbb1cf"><param name="Name" value="pal_plat_osTimerCreate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aee15bcaba1ed33c264bc4c91c1dbb1cf"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aee15bcaba1ed33c264bc4c91c1dbb1cf"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a9723baa43780a1083f43d786fa53a73d"><param name="Name" value="pal_plat_osTimerDelete"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a9723baa43780a1083f43d786fa53a73d"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a9723baa43780a1083f43d786fa53a73d"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a80f5ca578197088e4cf84042c9efc2d7"><param name="Name" value="pal_plat_osTimerStart"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a80f5ca578197088e4cf84042c9efc2d7"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a80f5ca578197088e4cf84042c9efc2d7"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2f1fdb410c4d6ae382622ef4f1884808"><param name="Name" value="pal_plat_osTimerStop"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2f1fdb410c4d6ae382622ef4f1884808"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a2f1fdb410c4d6ae382622ef4f1884808"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#aa869b5eddbf4eb6aebbbb587ece84aac"><param name="Name" value="pal_plat_receiveFrom"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#aa869b5eddbf4eb6aebbbb587ece84aac"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#aa869b5eddbf4eb6aebbbb587ece84aac"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#ab37f007a0574ca73916b26240ff1126b"><param name="Name" value="pal_plat_RegisterNetworkInterface"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#ab37f007a0574ca73916b26240ff1126b"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a9f6e13112366978741749649356a886c"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a1b47d17e90b6a03e7bd1ec6a0d549b46"><param name="Name" value="NVIC_SystemReset"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#af12d673085039783ab1d2613eff7e4a4"><param name="Name" value="PAL_MUTEX_DATA_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a9b3b50428d7ad199287a291137041c43"><param name="Name" value="PAL_NUM_OF_THREAD_INSTANCES"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ac62a5b36fc159e12670c44a12dc08beb"><param name="Name" value="pal_plat_osAtomicIncrement"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a140b31a48ac23c909f1a94ad11b04aac"><param name="Name" value="pal_plat_osDelay"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a82eade9e7b100bd9dc9ab8312f98f827"><param name="Name" value="pal_plat_osKernelSysMilliSecTick"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ae92f87b121a06e0062ee014025c0ba9e"><param name="Name" value="pal_plat_osKernelSysTick"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#addc790764a23a3e16344bd830ebe01ef"><param name="Name" value="pal_plat_osKernelSysTickFrequency"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2d18206974bdf17c48b97e2e16505f19"><param name="Name" value="pal_plat_osKernelSysTickMicroSec"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a67696b86a6116a82da7c26a433280e58"><param name="Name" value="pal_plat_osMessageGet"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aa80549a557e50e0759991c6b11eb456a"><param name="Name" value="pal_plat_osMessagePut"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ad25c8f7cb22985b077e893be5bc27d48"><param name="Name" value="pal_plat_osMessageQueueCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a0e0e6dc9958a9efd9beb62493bc3f67a"><param name="Name" value="pal_plat_osMessageQueueDestroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ae2425f958ab7d58eff5c5b3183f40305"><param name="Name" value="pal_plat_osMutexCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a909f4ae03b0acef0b84609d9b76679b4"><param name="Name" value="pal_plat_osMutexDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#add4dbca7b11365e7301db1425c9fdf4d"><param name="Name" value="pal_plat_osMutexRelease"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aea4ad5224c43ff0fff2b77798d19748c"><param name="Name" value="pal_plat_osMutexWait"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a5938d16ea0c12594e8f8becd20acf3a7"><param name="Name" value="pal_plat_osPoolAlloc"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a8dff6b49f9798cdd4eed04f3dff30330"><param name="Name" value="pal_plat_osPoolCAlloc"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a7a4fa20255fe38cf183f6c924419fe85"><param name="Name" value="pal_plat_osPoolCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a33ca5b5e9d3a80594de4977924e6bc1b"><param name="Name" value="pal_plat_osPoolDestroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a84e2f41a587335de053e0b7f8a4163c2"><param name="Name" value="pal_plat_osPoolFree"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#abdb6ab5827d588b9c2e908beda4c3154"><param name="Name" value="pal_plat_osReboot"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a6e7b3c23b094270b4e013c4412f2d3b1"><param name="Name" value="pal_plat_osSemaphoreCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ab37f3153b73dc87ca609c4c2e1bf8d6a"><param name="Name" value="pal_plat_osSemaphoreDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a252f210ce8a502891821b5af24b09822"><param name="Name" value="pal_plat_osSemaphoreRelease"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#ac9231eef550eb7b62a89e7a34b62d014"><param name="Name" value="pal_plat_osSemaphoreWait"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a9c965e0fdfd80fc86c901cf2bde88c64"><param name="Name" value="pal_plat_osThreadCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a4c42c35d3d7b375833a51b4670febe92"><param name="Name" value="pal_plat_osThreadGetId"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aca6b1b2f34861cf8e3d2dcc076992270"><param name="Name" value="pal_plat_osThreadGetLocalStore"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a3117f8911b3e83e27031f366aa652a4f"><param name="Name" value="pal_plat_osThreadTerminate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aee15bcaba1ed33c264bc4c91c1dbb1cf"><param name="Name" value="pal_plat_osTimerCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a9723baa43780a1083f43d786fa53a73d"><param name="Name" value="pal_plat_osTimerDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a80f5ca578197088e4cf84042c9efc2d7"><param name="Name" value="pal_plat_osTimerStart"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2f1fdb410c4d6ae382622ef4f1884808"><param name="Name" value="pal_plat_osTimerStop"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a8a484abc75cf595862459d6ab21c7a0c"><param name="Name" value="pal_plat_RTOSDestroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2e7aaf20f2cad3b04061e1c3fd748c42"><param name="Name" value="pal_plat_RTOSInitialize"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a31d6d9a16b9891d7eb84e2b974c2c92b"><param name="Name" value="PAL_RTOS_MEMORY_POOL_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aa1b17e5a20a5db09a3a3267f9a4191e0"><param name="Name" value="PAL_RTOS_MESSAGE_Q_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aa25bb23dc9f40c91f9872c585e649723"><param name="Name" value="PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a66dcd5bd7ca661597fecabb1795fa393"><param name="Name" value="PAL_SEMAPHORE_DATA_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a78b1f63823e34bc82e272358701cbe67"><param name="Name" value="PAL_TICK_TO_MILLI_FACTOR"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aba1d833ce13b78f5648ec26cdd25f639"><param name="Name" value="PAL_TIMER_DATA_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#afa12596f9e3d06ce0b6fde07eb52d07a"><param name="Name" value="palMemoryPool_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a550ebbfa0932f76e30a372710bff8f60"><param name="Name" value="palMessageQ_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a366960ed96b6cf998870481300a739d4"><param name="Name" value="palMutex_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aaab2b2c34911a85e67be94866be7e515"><param name="Name" value="palSemaphore_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a06ecfc14d166863199ebfc4372d61127"><param name="Name" value="palThread_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a3b3cdd4235f3b1a26e63840b91c98e18"><param name="Name" value="palThreadFuncWrapper_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2976c77ab047a577ddac4d82bfd40f10"><param name="Name" value="palTimer_t"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ac62a5b36fc159e12670c44a12dc08beb"><param name="Name" value="pal_plat_osAtomicIncrement"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a140b31a48ac23c909f1a94ad11b04aac"><param name="Name" value="pal_plat_osDelay"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a82eade9e7b100bd9dc9ab8312f98f827"><param name="Name" value="pal_plat_osKernelSysMilliSecTick"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ae92f87b121a06e0062ee014025c0ba9e"><param name="Name" value="pal_plat_osKernelSysTick"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ad104e06e7b043305fdbfbc37e4ea2826"><param name="Name" value="pal_plat_osKernelSysTick64"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aacd58e95c23ad1c8f39b8b12ed2d83dd"><param name="Name" value="pal_plat_osKernelSysTickFrequency"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a2d18206974bdf17c48b97e2e16505f19"><param name="Name" value="pal_plat_osKernelSysTickMicroSec"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a67696b86a6116a82da7c26a433280e58"><param name="Name" value="pal_plat_osMessageGet"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aa80549a557e50e0759991c6b11eb456a"><param name="Name" value="pal_plat_osMessagePut"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ad25c8f7cb22985b077e893be5bc27d48"><param name="Name" value="pal_plat_osMessageQueueCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a0e0e6dc9958a9efd9beb62493bc3f67a"><param name="Name" value="pal_plat_osMessageQueueDestroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ae2425f958ab7d58eff5c5b3183f40305"><param name="Name" value="pal_plat_osMutexCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a909f4ae03b0acef0b84609d9b76679b4"><param name="Name" value="pal_plat_osMutexDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#add4dbca7b11365e7301db1425c9fdf4d"><param name="Name" value="pal_plat_osMutexRelease"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aea4ad5224c43ff0fff2b77798d19748c"><param name="Name" value="pal_plat_osMutexWait"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a5938d16ea0c12594e8f8becd20acf3a7"><param name="Name" value="pal_plat_osPoolAlloc"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a8dff6b49f9798cdd4eed04f3dff30330"><param name="Name" value="pal_plat_osPoolCAlloc"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a7a4fa20255fe38cf183f6c924419fe85"><param name="Name" value="pal_plat_osPoolCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a33ca5b5e9d3a80594de4977924e6bc1b"><param name="Name" value="pal_plat_osPoolDestroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a84e2f41a587335de053e0b7f8a4163c2"><param name="Name" value="pal_plat_osPoolFree"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a894db4d6fe636ef7a7ebf83d4334adbd"><param name="Name" value="pal_plat_osReboot"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a6e7b3c23b094270b4e013c4412f2d3b1"><param name="Name" value="pal_plat_osSemaphoreCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ab37f3153b73dc87ca609c4c2e1bf8d6a"><param name="Name" value="pal_plat_osSemaphoreDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a252f210ce8a502891821b5af24b09822"><param name="Name" value="pal_plat_osSemaphoreRelease"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#ac9231eef550eb7b62a89e7a34b62d014"><param name="Name" value="pal_plat_osSemaphoreWait"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a9c965e0fdfd80fc86c901cf2bde88c64"><param name="Name" value="pal_plat_osThreadCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a4c42c35d3d7b375833a51b4670febe92"><param name="Name" value="pal_plat_osThreadGetId"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aca6b1b2f34861cf8e3d2dcc076992270"><param name="Name" value="pal_plat_osThreadGetLocalStore"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a3117f8911b3e83e27031f366aa652a4f"><param name="Name" value="pal_plat_osThreadTerminate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#aee15bcaba1ed33c264bc4c91c1dbb1cf"><param name="Name" value="pal_plat_osTimerCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a9723baa43780a1083f43d786fa53a73d"><param name="Name" value="pal_plat_osTimerDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a80f5ca578197088e4cf84042c9efc2d7"><param name="Name" value="pal_plat_osTimerStart"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a2f1fdb410c4d6ae382622ef4f1884808"><param name="Name" value="pal_plat_osTimerStop"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a8a484abc75cf595862459d6ab21c7a0c"><param name="Name" value="pal_plat_RTOSDestroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a2e7aaf20f2cad3b04061e1c3fd748c42"><param name="Name" value="pal_plat_RTOSInitialize"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a8a484abc75cf595862459d6ab21c7a0c"><param name="Name" value="pal_plat_RTOSDestroy"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a8a484abc75cf595862459d6ab21c7a0c"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a8a484abc75cf595862459d6ab21c7a0c"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2e7aaf20f2cad3b04061e1c3fd748c42"><param name="Name" value="pal_plat_RTOSInitialize"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2e7aaf20f2cad3b04061e1c3fd748c42"><param name="Name" value="pal_plat_rtos.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d59/pal__plat__rtos_8h.html#a2e7aaf20f2cad3b04061e1c3fd748c42"><param name="Name" value="pal_plat_rtos.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a17365747ed8d29df153a336da3942187"><param name="Name" value="pal_plat_sendTo"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a17365747ed8d29df153a336da3942187"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a17365747ed8d29df153a336da3942187"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a08ea05dacec7f7d9dc892dab0318542d"><param name="Name" value="pal_plat_setSocketOptions"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a08ea05dacec7f7d9dc892dab0318542d"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a08ea05dacec7f7d9dc892dab0318542d"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a58a25ae30bb6225cc8b5344053fd705c"><param name="Name" value="pal_plat_socket"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a58a25ae30bb6225cc8b5344053fd705c"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a58a25ae30bb6225cc8b5344053fd705c"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#aa0c26dfeee80444e58eacab238206d09"><param name="Name" value="pal_plat_socketMiniSelect"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#aa0c26dfeee80444e58eacab238206d09"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#aa0c26dfeee80444e58eacab238206d09"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#ab92cca0e4facf3d62e03c0d0ca0523da"><param name="Name" value="pal_plat_socketsInit"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#ab92cca0e4facf3d62e03c0d0ca0523da"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#ab92cca0e4facf3d62e03c0d0ca0523da"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd"><param name="Name" value="pal_plat_socketsTerminate"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd"><param name="Name" value="pal_plat_network.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d2c/pal__plat__network_8h.html#a6a2b36db2bb5d71ade0fe8cb00d3cecd"><param name="Name" value="pal_plat_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2e5b95b90c72b6bdf62897efd58f98fb"><param name="Name" value="PAL_PRINTF"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a6b5e705be1e7c3c16080f2b05b87ff7d"><param name="Name" value="pal_receiveFrom"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a6b5e705be1e7c3c16080f2b05b87ff7d"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a6b5e705be1e7c3c16080f2b05b87ff7d"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a081cc2fd09644c41068673487b39f6b8"><param name="Name" value="pal_registerNetworkInterface"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a081cc2fd09644c41068673487b39f6b8"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a081cc2fd09644c41068673487b39f6b8"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html"><param name="Name" value="pal_rtos.c"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a2b4f475c89ea263557d6529c4d9a9353"><param name="Name" value="dbgPrintf"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a9b33d260ee1022f5b5f6a9dfc3363f2a"><param name="Name" value="pal_osAtomicIncrement"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ad6aaee432fd7ea5e35ab500a6278cc25"><param name="Name" value="pal_osDelay"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a59e85747582417a1395ed0f9c140eb8a"><param name="Name" value="pal_osKernelSysMilliSecTick"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a9800b8b9e057fe17e50c4259c809f898"><param name="Name" value="pal_osKernelSysTick"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#af88551b6ca24a7a2bb6d94d423eb4401"><param name="Name" value="pal_osKernelSysTick64"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a087214ae87c20fd59f47fe3c96d0eefc"><param name="Name" value="pal_osKernelSysTickFrequency"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a34375ee82619a4064849daccbdfbc966"><param name="Name" value="pal_osKernelSysTickMicroSec"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ab70d0be45514258874c0406c2040372c"><param name="Name" value="pal_osMessageGet"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a966daa5b0bd9282fbffa7c462da1c417"><param name="Name" value="pal_osMessagePut"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a0c7f0003e92b3494089966d53ab24a1b"><param name="Name" value="pal_osMessageQueueCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#adba13212ec060092acdf6165e82be5b6"><param name="Name" value="pal_osMessageQueueDestroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#af89aab14085207b1a0951f7aad24193c"><param name="Name" value="pal_osMutexCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a03f43d7e53435d89f316862b48b573c4"><param name="Name" value="pal_osMutexDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a1d976a616a5c850b2016b2b87d8b47cc"><param name="Name" value="pal_osMutexRelease"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#acda0974247325955719b23494d66c622"><param name="Name" value="pal_osMutexWait"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a3a2b57685096d16a110ee38f7f29e099"><param name="Name" value="pal_osPoolAlloc"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a5d20661cd387a172450a2fe12993687a"><param name="Name" value="pal_osPoolCAlloc"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a1245f053abb3fdb7ab2ceb5a2899e8c6"><param name="Name" value="pal_osPoolCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a1c01464448f8d7bd95bf518d651484c6"><param name="Name" value="pal_osPoolDestroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a79f4997069310aa7bbb6ae7995988dd7"><param name="Name" value="pal_osPoolFree"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ab8ab0f31bbf4258b7684d22e7725a9f8"><param name="Name" value="pal_osReboot"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#aaa7aee442a5c8cc274d3e52206984037"><param name="Name" value="pal_osSemaphoreCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a45f071482f8669821b90264e0470b33d"><param name="Name" value="pal_osSemaphoreDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a009d0c063119265f9c5c0c9bff379c14"><param name="Name" value="pal_osSemaphoreRelease"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#aa2d998744dbc9504bfe0358f85457fc4"><param name="Name" value="pal_osSemaphoreWait"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a2dae64d917f644982b893037adf562b4"><param name="Name" value="pal_osThreadCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a2993b8f6b5e8d7ccd6121dc18330e4be"><param name="Name" value="pal_osThreadGetId"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ac94f4efc4bad73969e57c8255c136a0d"><param name="Name" value="pal_osThreadGetLocalStore"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#abcfa47b411929b33d5d9cfaaff28ce18"><param name="Name" value="pal_osThreadTerminate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#aa4da36fbbba744a14d1bdfe2a26d1a18"><param name="Name" value="pal_osTimerCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#ac7ca6e7c3c229f4092c9df4b69e7dd59"><param name="Name" value="pal_osTimerDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a6c60c9e433bc6005bac6b02d5aba7363"><param name="Name" value="pal_osTimerStart"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/d33/pal__rtos_8c.html#a94f4df594102e582cbd2114f6eebb57d"><param name="Name" value="pal_osTimerStop"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html"><param name="Name" value="pal_rtos.h"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2b4f475c89ea263557d6529c4d9a9353"><param name="Name" value="dbgPrintf"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a9b33d260ee1022f5b5f6a9dfc3363f2a"><param name="Name" value="pal_osAtomicIncrement"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ad6aaee432fd7ea5e35ab500a6278cc25"><param name="Name" value="pal_osDelay"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a59e85747582417a1395ed0f9c140eb8a"><param name="Name" value="pal_osKernelSysMilliSecTick"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a9800b8b9e057fe17e50c4259c809f898"><param name="Name" value="pal_osKernelSysTick"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#af88551b6ca24a7a2bb6d94d423eb4401"><param name="Name" value="pal_osKernelSysTick64"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a087214ae87c20fd59f47fe3c96d0eefc"><param name="Name" value="pal_osKernelSysTickFrequency"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a34375ee82619a4064849daccbdfbc966"><param name="Name" value="pal_osKernelSysTickMicroSec"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ab70d0be45514258874c0406c2040372c"><param name="Name" value="pal_osMessageGet"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a966daa5b0bd9282fbffa7c462da1c417"><param name="Name" value="pal_osMessagePut"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a0c7f0003e92b3494089966d53ab24a1b"><param name="Name" value="pal_osMessageQueueCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#adba13212ec060092acdf6165e82be5b6"><param name="Name" value="pal_osMessageQueueDestroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#af89aab14085207b1a0951f7aad24193c"><param name="Name" value="pal_osMutexCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a03f43d7e53435d89f316862b48b573c4"><param name="Name" value="pal_osMutexDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a1d976a616a5c850b2016b2b87d8b47cc"><param name="Name" value="pal_osMutexRelease"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#acda0974247325955719b23494d66c622"><param name="Name" value="pal_osMutexWait"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a3a2b57685096d16a110ee38f7f29e099"><param name="Name" value="pal_osPoolAlloc"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a5d20661cd387a172450a2fe12993687a"><param name="Name" value="pal_osPoolCAlloc"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a1245f053abb3fdb7ab2ceb5a2899e8c6"><param name="Name" value="pal_osPoolCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a1c01464448f8d7bd95bf518d651484c6"><param name="Name" value="pal_osPoolDestroy"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a79f4997069310aa7bbb6ae7995988dd7"><param name="Name" value="pal_osPoolFree"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ac6ad927a77b4275e1da2373f810ee2af"><param name="Name" value="PAL_osPriorityAboveNormal"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a23fdf72acf5a9475ca4054d4e1a187a5"><param name="Name" value="PAL_osPriorityBelowNormal"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a94aea8f14f0bc89f7f4540416c08da3e"><param name="Name" value="PAL_osPriorityError"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a70d584591ab861e247ccfe94e55e35a2"><param name="Name" value="PAL_osPriorityHigh"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a62b0350b25146b93c57a71ce65bb017a"><param name="Name" value="PAL_osPriorityIdle"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535ab3b5b218f45b07de8153427c63273fec"><param name="Name" value="PAL_osPriorityLow"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a897a2d3cf2fa39f82141535d0d4e51a1"><param name="Name" value="PAL_osPriorityNormal"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6f32dbade90ba4bf593f475f51fb6535a3c2b8a244cae70bbf23a5a4d033df2ce"><param name="Name" value="PAL_osPriorityRealtime"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ab8ab0f31bbf4258b7684d22e7725a9f8"><param name="Name" value="pal_osReboot"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#aaa7aee442a5c8cc274d3e52206984037"><param name="Name" value="pal_osSemaphoreCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a45f071482f8669821b90264e0470b33d"><param name="Name" value="pal_osSemaphoreDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a009d0c063119265f9c5c0c9bff379c14"><param name="Name" value="pal_osSemaphoreRelease"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#aa2d998744dbc9504bfe0358f85457fc4"><param name="Name" value="pal_osSemaphoreWait"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2dae64d917f644982b893037adf562b4"><param name="Name" value="pal_osThreadCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2993b8f6b5e8d7ccd6121dc18330e4be"><param name="Name" value="pal_osThreadGetId"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ac94f4efc4bad73969e57c8255c136a0d"><param name="Name" value="pal_osThreadGetLocalStore"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#abcfa47b411929b33d5d9cfaaff28ce18"><param name="Name" value="pal_osThreadTerminate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#aa4da36fbbba744a14d1bdfe2a26d1a18"><param name="Name" value="pal_osTimerCreate"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ac7ca6e7c3c229f4092c9df4b69e7dd59"><param name="Name" value="pal_osTimerDelete"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a6c60c9e433bc6005bac6b02d5aba7363"><param name="Name" value="pal_osTimerStart"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a94f4df594102e582cbd2114f6eebb57d"><param name="Name" value="pal_osTimerStop"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a2e5b95b90c72b6bdf62897efd58f98fb"><param name="Name" value="PAL_PRINTF"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ad19aa2a408e848a5f86d897ab50500ec"><param name="Name" value="PAL_RTOS_WAIT_FOREVER"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb"><param name="Name" value="palMemoryPoolID_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910"><param name="Name" value="palMessageQID_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901"><param name="Name" value="palMutexID_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2a0f237f01e8978b2dc987ff3b5cde0f30"><param name="Name" value="palOsTimerOnce"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2aadcc58d31964426d67650ca958fb80f9"><param name="Name" value="palOsTimerPeriodic"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481"><param name="Name" value="palSemaphoreID_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853"><param name="Name" value="palThreadFuncPtr"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5"><param name="Name" value="palThreadID_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c"><param name="Name" value="palThreadLocalStore_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be"><param name="Name" value="palThreadPriority_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b"><param name="Name" value="palTimerFuncPtr"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985"><param name="Name" value="palTimerID_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a"><param name="Name" value="palTimerType_t"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#a2c7f7687d719d388a67c1f18f200962d"><param name="Name" value="PAL_RTOS_64BIT_TICK_SUPPORTED"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a31d6d9a16b9891d7eb84e2b974c2c92b"><param name="Name" value="PAL_RTOS_MEMORY_POOL_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aa1b17e5a20a5db09a3a3267f9a4191e0"><param name="Name" value="PAL_RTOS_MESSAGE_Q_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8f9b1f133f82ce955405d453f0c506d6"><param name="Name" value="g_threadsArg"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a9beaf51023e475986b8b182c80ccc023"><param name="Name" value="g_threadStorage"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a1a09db2f0cd5dd2d0929b34afad51ba1"><param name="Name" value="g_timerArgs"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#adb164ebbfd2189f434f5e550e2d93bb4"><param name="Name" value="mutex1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8706c6b975e957968f23af2812bbc0cb"><param name="Name" value="mutex2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a393f7a6e534c05e534cfdaf46473db45"><param name="Name" value="palRunThreads"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a2f8d675e43058c8f8b853b52366abf38"><param name="Name" value="semaphore1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a1e33659cb747282e1869e9f86fe2d33f"><param name="Name" value="TEST"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#ab19fea07339238925c3b105637ce92c1"><param name="Name" value="TEST_GROUP"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8a7c6f6a71607f9dce69207f1f7ed3c1"><param name="Name" value="TEST_SETUP"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#ac5fc4009112ba6cadc74ad8cd14c427b"><param name="Name" value="TEST_TEAR_DOWN"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb"><param name="Name" value="button_pressed"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a"><param name="Name" value="button_thread"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7"><param name="Name" value="led1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26"><param name="Name" value="led_thread"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c"><param name="Name" value="main"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8"><param name="Name" value="sw2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde"><param name="Name" value="sw2_press"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc"><param name="Name" value="TEST_pal_rtos_GROUP_RUNNER"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487"><param name="Name" value="thread2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5"><param name="Name" value="UnityMain"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/df6/pal__rtos__test__runner_8c.html"><param name="Name" value="pal_rtos_test_runner.c"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a393f7a6e534c05e534cfdaf46473db45"><param name="Name" value="palRunThreads"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a0a153da028aee8f220377b516ff065c8"><param name="Name" value="palThreadFunc1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a29dc69cbcc48b55d48a5fd668da7fe15"><param name="Name" value="palThreadFunc2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#acf68b041960be3c58f516986504fcd0f"><param name="Name" value="palThreadFunc3"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a844c7469189866b502ef85df5063e79c"><param name="Name" value="palThreadFunc4"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a5be7a07498de9cc847215e6aa8f77914"><param name="Name" value="palThreadFunc5"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a52dc025f6020b0d456bbbcacc3aa4e3e"><param name="Name" value="palThreadFunc6"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a7c8c7a38fca8b62acc6094ba1f072ec7"><param name="Name" value="palThreadFuncCustom1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a663a9130dc598399ec3bd9ab9e6680fa"><param name="Name" value="palThreadFuncCustom2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a300d95346a90a5f17aa6140647243b64"><param name="Name" value="palThreadFuncCustom3"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#aa5b1f9c927c18d821a46d99dfe533cb0"><param name="Name" value="palThreadFuncCustom4"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#abac822ed4b356b85117101aa0d8701d6"><param name="Name" value="palTimerFunc1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a8581bcb8f9f435a87c3dd651d65e32c8"><param name="Name" value="palTimerFunc2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#aecb21b545f5a0c542dc82a8ef0b89b3f"><param name="Name" value="threadsArg"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#ad4897778c444c8e8fbcb65c84901ac78"><param name="Name" value="timerArgs"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8f9b1f133f82ce955405d453f0c506d6"><param name="Name" value="g_threadsArg"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a9beaf51023e475986b8b182c80ccc023"><param name="Name" value="g_threadStorage"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a1a09db2f0cd5dd2d0929b34afad51ba1"><param name="Name" value="g_timerArgs"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a3c0ce22bdba74fe398c6adefbc7fbbdf"><param name="Name" value="MEMORY_POOL1_BLOCK_COUNT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#ae3c2c737bcf6b45c3bf394dfe8349c4d"><param name="Name" value="MEMORY_POOL1_BLOCK_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a593d40fc26d9d1664c57988a846a888e"><param name="Name" value="MEMORY_POOL2_BLOCK_COUNT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a3c85d7e7f47d26444477603d8e2fd5d5"><param name="Name" value="MEMORY_POOL2_BLOCK_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#adb164ebbfd2189f434f5e550e2d93bb4"><param name="Name" value="mutex1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8706c6b975e957968f23af2812bbc0cb"><param name="Name" value="mutex2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a0a153da028aee8f220377b516ff065c8"><param name="Name" value="palThreadFunc1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a29dc69cbcc48b55d48a5fd668da7fe15"><param name="Name" value="palThreadFunc2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#acf68b041960be3c58f516986504fcd0f"><param name="Name" value="palThreadFunc3"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a844c7469189866b502ef85df5063e79c"><param name="Name" value="palThreadFunc4"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a5be7a07498de9cc847215e6aa8f77914"><param name="Name" value="palThreadFunc5"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a52dc025f6020b0d456bbbcacc3aa4e3e"><param name="Name" value="palThreadFunc6"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a7c8c7a38fca8b62acc6094ba1f072ec7"><param name="Name" value="palThreadFuncCustom1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a663a9130dc598399ec3bd9ab9e6680fa"><param name="Name" value="palThreadFuncCustom2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a300d95346a90a5f17aa6140647243b64"><param name="Name" value="palThreadFuncCustom3"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#aa5b1f9c927c18d821a46d99dfe533cb0"><param name="Name" value="palThreadFuncCustom4"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#abac822ed4b356b85117101aa0d8701d6"><param name="Name" value="palTimerFunc1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8581bcb8f9f435a87c3dd651d65e32c8"><param name="Name" value="palTimerFunc2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a2f8d675e43058c8f8b853b52366abf38"><param name="Name" value="semaphore1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a90b7a8cb7bc3fdbd98014a3e15ee6e9a"><param name="Name" value="THREAD_STACK_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0"><param name="Name" value="threadsArgument_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76"><param name="Name" value="timerArgument_t"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aa25bb23dc9f40c91f9872c585e649723"><param name="Name" value="PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ad19aa2a408e848a5f86d897ab50500ec"><param name="Name" value="PAL_RTOS_WAIT_FOREVER"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a66dcd5bd7ca661597fecabb1795fa393"><param name="Name" value="PAL_SEMAPHORE_DATA_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#acce808f708e653b6bed317072888ca23"><param name="Name" value="pal_sendTo"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#acce808f708e653b6bed317072888ca23"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#acce808f708e653b6bed317072888ca23"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#aed02a6f53b88e1d5e81607b1221a3efa"><param name="Name" value="pal_setSockAddrIPV4Addr"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#aed02a6f53b88e1d5e81607b1221a3efa"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#aed02a6f53b88e1d5e81607b1221a3efa"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a0cc13f7ef9ceb4a75884a8bebf0d831c"><param name="Name" value="pal_setSockAddrIPV6Addr"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a0cc13f7ef9ceb4a75884a8bebf0d831c"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a0cc13f7ef9ceb4a75884a8bebf0d831c"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#abbeb1395896eb79ab564568b9ab8a628"><param name="Name" value="pal_setSockAddrPort"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#abbeb1395896eb79ab564568b9ab8a628"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#abbeb1395896eb79ab564568b9ab8a628"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a2e1bbe81a35a1cb54c351912bb97736f"><param name="Name" value="pal_setSocketOptions"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a2e1bbe81a35a1cb54c351912bb97736f"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a2e1bbe81a35a1cb54c351912bb97736f"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a9e1ad5d4670e06bb2a8b110c0ba3e5ca"><param name="Name" value="PAL_SO_RCVTIMEO"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51a352587a3fea85695be1ce478aa3da001"><param name="Name" value="PAL_SO_REUSEADDR"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a2694f5de0fb810ddd7ff249ea1478f51aa744f783051825333c23177008d140de"><param name="Name" value="PAL_SO_SNDTIMEO"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ab5d2c3c0d3b2f0e08afcd0d53ff4c418a14e907287d0ede1306aa35f5687e0941"><param name="Name" value="PAL_SOCK_DGRAM"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#aa852fb6e271fb91efd65e2a1ead93b9a"><param name="Name" value="pal_socket"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#aa852fb6e271fb91efd65e2a1ead93b9a"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#aa852fb6e271fb91efd65e2a1ead93b9a"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a8c607fcbfa526e4485fcdb55b79b39d6"><param name="Name" value="PAL_SOCKET_OPTION_ERROR"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html"><param name="Name" value="pal_socket_test.c"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a702871d3d9057fa4fc99031298fb425c"><param name="Name" value="g_networkInterface"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#abc23815d68dafc619e2c2ba210d65bd0"><param name="Name" value="PAL_NET_SUPPORT_LWIP"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ab1873f5ba58eb802dd808f05a1101670"><param name="Name" value="PAL_NET_TEST_INCOMING_PORT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a7c3cef32674c412f87617e87a194e0e3"><param name="Name" value="PAL_NET_TEST_SERVER_HTTP_PORT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a0570e783c7412d25d0c33817da54c02f"><param name="Name" value="PAL_NET_TEST_SERVER_IP"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a7175d943793d9a92ebe83d12f2a65063"><param name="Name" value="PAL_NET_TEST_SERVER_IP_STRING"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#abbe7571a0fc631eb43561606f4d5bb0e"><param name="Name" value="PAL_NET_TEST_SERVER_NAME"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#abc63439a9af70c80b125accdc2afbb12"><param name="Name" value="PAL_NET_TEST_SERVER_UDP_PORT"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a0010ea5741ae7db441ef09f96eef47be"><param name="Name" value="PAL_TEST_BUFFER_SIZE"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ad62b547b432124475c3f5a94d9befe6d"><param name="Name" value="socketCallback"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a89cecd4b07ef1acbb0b40c00189a0f36"><param name="Name" value="TEST"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ad324fc284dd938317109a9fc47dd1732"><param name="Name" value="TEST_GROUP"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a26217052dc55731aa82231669a8cf0df"><param name="Name" value="TEST_SETUP"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ac307640c84843ab78607af150bcbe143"><param name="Name" value="TEST_TEAR_DOWN"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ae8697e1a75bad4a53dd6d6ec81e486cb"><param name="Name" value="button_pressed"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#afe6a59684384290b7f8710db5203944a"><param name="Name" value="button_thread"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a6b71ffd718e2af00cebeb05560b44be7"><param name="Name" value="led1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a602cc5fb415f60615dbfa0643b3b3e26"><param name="Name" value="led_thread"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#ac0f2228420376f4db7e1274f2b41667c"><param name="Name" value="main"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8"><param name="Name" value="sw2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde"><param name="Name" value="sw2_press"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab"><param name="Name" value="TEST_pal_socket_GROUP_RUNNER"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487"><param name="Name" value="thread2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5"><param name="Name" value="UnityMain"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dc/da5/pal__socket__test__runner_8c.html"><param name="Name" value="pal_socket_test_runner.c"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d5f/pal__socket__test__utils_8cpp.html"><param name="Name" value="pal_socket_test_utils.cpp"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d5f/pal__socket__test__utils_8cpp.html#a5e4a39a385159acfd150a2e6098351cf"><param name="Name" value="palTestGetNetWorkInterfaceContext"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d5f/pal__socket__test__utils_8cpp.html#ac641d6ab2d8d2f23e89e7c36694d85dd"><param name="Name" value="TEST_PRINTF"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d2a/pal__socket__test__utils_8h.html"><param name="Name" value="pal_socket_test_utils.h"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#aaf4e46664d7b7f8902c69cb72a65c943"><param name="Name" value="pal_socketAddressInternal6_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#abc2b368e206e7353e31a520fa573cd8a"><param name="Name" value="pal_socketAddressInternal_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a5cab4ea55a3d28cfd8d4dca8376a111c"><param name="Name" value="pal_socketMiniSelect"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dc4/pal__network_8c.html#a5cab4ea55a3d28cfd8d4dca8376a111c"><param name="Name" value="pal_network.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a5cab4ea55a3d28cfd8d4dca8376a111c"><param name="Name" value="pal_network.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5"><param name="Name" value="PAL_SUCCESS"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/dcf/pal__macros_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5"><param name="Name" value="pal_macros.h"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5"><param name="Name" value="pal_types.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a0010ea5741ae7db441ef09f96eef47be"><param name="Name" value="PAL_TEST_BUFFER_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d0/d51/pal__test__utils_8h.html"><param name="Name" value="pal_test_utils.h"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d48/structpal__thread_local_store.html"><param name="Name" value="pal_threadLocalStore"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d48/structpal__thread_local_store.html#abe68dca8335fc1c9e6da5359117625bc"><param name="Name" value="storeData"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a78b1f63823e34bc82e272358701cbe67"><param name="Name" value="PAL_TICK_TO_MILLI_FACTOR"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aba1d833ce13b78f5648ec26cdd25f639"><param name="Name" value="PAL_TIMER_DATA_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/dfc/structpal__time_val.html"><param name="Name" value="pal_timeVal"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/dfc/structpal__time_val.html#a8c0bfa9026d4b23b598f0652aa975fcf"><param name="Name" value="pal_tv_sec"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="de/dfc/structpal__time_val.html#acf8b8c0480064a16325f94f155db4e1c"><param name="Name" value="pal_tv_usec"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ab8ff1c2207a2f7c219088008fbc99ff4"><param name="Name" value="pal_timeVal_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/dfc/structpal__time_val.html#a8c0bfa9026d4b23b598f0652aa975fcf"><param name="Name" value="pal_tv_sec"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="de/dfc/structpal__time_val.html#acf8b8c0480064a16325f94f155db4e1c"><param name="Name" value="pal_tv_usec"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d6/dc2/pal__types_8h.html"><param name="Name" value="pal_types.h"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d6/dc2/pal__types_8h.html#a3ef7eab8cd0e570b6586628cc9d5ccab"><param name="Name" value="NULLPTR"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d6/dc2/pal__types_8h.html#a92e2ad3a6b8c71818b6a08720fa84ba5"><param name="Name" value="PAL_SUCCESS"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4"><param name="Name" value="palBuffer_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81"><param name="Name" value="palConstBuffer_t"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d"><param name="Name" value="palStatus_t"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d2/d87/pal__configuration_8h.html#a4d2f5187ecd7e90c094e2f103e5b6839"><param name="Name" value="PAL_UNIQUE_THREAD_PRIORITY"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d6/dc2/pal__types_8h.html#a8c90171089db400b392bf0d3b68de0e4"><param name="Name" value="palBuffer_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d6/dc2/pal__types_8h.html#a1fc5fbdbd83764292a7b4252e44e3b81"><param name="Name" value="palConstBuffer_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a03e2ae5a01f21cf32933bf4bdca5e5b1"><param name="Name" value="palIpV4Addr_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ad47edc267b97d7b32e30b45ad4674192"><param name="Name" value="palIpV6Addr_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#afa12596f9e3d06ce0b6fde07eb52d07a"><param name="Name" value="palMemoryPool_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a73ab99198ebc6e6af72064739b05bdcb"><param name="Name" value="palMemoryPoolID_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a550ebbfa0932f76e30a372710bff8f60"><param name="Name" value="palMessageQ_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#acb4162ac097039734d15916d29880910"><param name="Name" value="palMessageQID_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a366960ed96b6cf998870481300a739d4"><param name="Name" value="palMutex_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#ac6b402eec0e5f2ab64c43abffd4d9901"><param name="Name" value="palMutexID_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/structpal_net_interface_info.html"><param name="Name" value="palNetInterfaceInfo"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/structpal_net_interface_info.html#affc930af87e8696f63b30b911cf8b03d"><param name="Name" value="address"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/structpal_net_interface_info.html#a9b816dd947f25d303e32fca36d04080e"><param name="Name" value="addressSize"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d16/structpal_net_interface_info.html#ad028021cafddc5355dfccfac1345f4f6"><param name="Name" value="interfaceName"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ab74987f80f6b9b025ed9f067a2c654da"><param name="Name" value="palNetInterfaceInfo_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2a0f237f01e8978b2dc987ff3b5cde0f30"><param name="Name" value="palOsTimerOnce"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a7ee094f262d03cbc97380f3fcd34c7d2aadcc58d31964426d67650ca958fb80f9"><param name="Name" value="palOsTimerPeriodic"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a393f7a6e534c05e534cfdaf46473db45"><param name="Name" value="palRunThreads"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a393f7a6e534c05e534cfdaf46473db45"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a393f7a6e534c05e534cfdaf46473db45"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a056dbb70ade63a6ebc47f1f11733b8da"><param name="Name" value="palSelectCallback0"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a4dcff46004af6c4d300d542de9c7d38e"><param name="Name" value="palSelectCallback1"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#abe369a2a4de2c8e25ed47166f068918f"><param name="Name" value="palSelectCallback2"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#aeabad2d66db156a97447f6e22614e78c"><param name="Name" value="palSelectCallback3"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a521d96ff90d0b417e6749df8ae90bf8b"><param name="Name" value="palSelectCallback4"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#ae937bf3f397b1642a29a44c6cf9bc075"><param name="Name" value="palSelectCallback5"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6b99c0251a9efb7224658c8da6e3ad27"><param name="Name" value="palSelectCallback6"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a6e102ddea1bd5315a4224c2a1fdddd58"><param name="Name" value="palSelectCallback7"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#abb42afef799c3d7409ba0c29d645cbaf"><param name="Name" value="palSelectCallbackFunction_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#aaab2b2c34911a85e67be94866be7e515"><param name="Name" value="palSemaphore_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a0a8206fc36c3dca549aed450f7777481"><param name="Name" value="palSemaphoreID_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ac0bd9e160ca4973db4d846a4369ea996"><param name="Name" value="palSocket_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="db/d42/structpal_socket_address.html"><param name="Name" value="palSocketAddress"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/d42/structpal_socket_address.html#a0a5471b518ef60cfa0f28c47a323ec4c"><param name="Name" value="addressData"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="db/d42/structpal_socket_address.html#a8bdecffc9afacbdf84fc78d26090c221"><param name="Name" value="addressType"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#a9e444742ff895f63c34f727b4fcfba10"><param name="Name" value="palSocketAddress_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d17/pal__network_8h.html#ac844634680241bad287771f1ab8b0901"><param name="Name" value="palSocketLength_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d6/dc2/pal__types_8h.html#a160277354e86b9aea01d7689ec26d88d"><param name="Name" value="palStatus_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d5f/pal__socket__test__utils_8cpp.html#a5e4a39a385159acfd150a2e6098351cf"><param name="Name" value="palTestGetNetWorkInterfaceContext"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d5f/pal__socket__test__utils_8cpp.html#a5e4a39a385159acfd150a2e6098351cf"><param name="Name" value="pal_socket_test_utils.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d2a/pal__socket__test__utils_8h.html#a5e4a39a385159acfd150a2e6098351cf"><param name="Name" value="pal_socket_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a06ecfc14d166863199ebfc4372d61127"><param name="Name" value="palThread_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a0a153da028aee8f220377b516ff065c8"><param name="Name" value="palThreadFunc1"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a0a153da028aee8f220377b516ff065c8"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a0a153da028aee8f220377b516ff065c8"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a29dc69cbcc48b55d48a5fd668da7fe15"><param name="Name" value="palThreadFunc2"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a29dc69cbcc48b55d48a5fd668da7fe15"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a29dc69cbcc48b55d48a5fd668da7fe15"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#acf68b041960be3c58f516986504fcd0f"><param name="Name" value="palThreadFunc3"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#acf68b041960be3c58f516986504fcd0f"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#acf68b041960be3c58f516986504fcd0f"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a844c7469189866b502ef85df5063e79c"><param name="Name" value="palThreadFunc4"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a844c7469189866b502ef85df5063e79c"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a844c7469189866b502ef85df5063e79c"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a5be7a07498de9cc847215e6aa8f77914"><param name="Name" value="palThreadFunc5"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a5be7a07498de9cc847215e6aa8f77914"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a5be7a07498de9cc847215e6aa8f77914"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a52dc025f6020b0d456bbbcacc3aa4e3e"><param name="Name" value="palThreadFunc6"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a52dc025f6020b0d456bbbcacc3aa4e3e"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a52dc025f6020b0d456bbbcacc3aa4e3e"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a7c8c7a38fca8b62acc6094ba1f072ec7"><param name="Name" value="palThreadFuncCustom1"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a7c8c7a38fca8b62acc6094ba1f072ec7"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a7c8c7a38fca8b62acc6094ba1f072ec7"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a663a9130dc598399ec3bd9ab9e6680fa"><param name="Name" value="palThreadFuncCustom2"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a663a9130dc598399ec3bd9ab9e6680fa"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a663a9130dc598399ec3bd9ab9e6680fa"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a300d95346a90a5f17aa6140647243b64"><param name="Name" value="palThreadFuncCustom3"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a300d95346a90a5f17aa6140647243b64"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a300d95346a90a5f17aa6140647243b64"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#aa5b1f9c927c18d821a46d99dfe533cb0"><param name="Name" value="palThreadFuncCustom4"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#aa5b1f9c927c18d821a46d99dfe533cb0"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#aa5b1f9c927c18d821a46d99dfe533cb0"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a54696b00a498a3c4a1346030acd18853"><param name="Name" value="palThreadFuncPtr"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a3b3cdd4235f3b1a26e63840b91c98e18"><param name="Name" value="palThreadFuncWrapper_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#aa61aba50e0f2dba5c8571417c2bdd9a5"><param name="Name" value="palThreadID_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a381fb3b26136f4983dcce371652fb20c"><param name="Name" value="palThreadLocalStore_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a278568ee407204e02cbd783f612e55be"><param name="Name" value="palThreadPriority_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/dc5/pal__plat__rtos_8c.html#a2976c77ab047a577ddac4d82bfd40f10"><param name="Name" value="palTimer_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#abac822ed4b356b85117101aa0d8701d6"><param name="Name" value="palTimerFunc1"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#abac822ed4b356b85117101aa0d8701d6"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#abac822ed4b356b85117101aa0d8701d6"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a8581bcb8f9f435a87c3dd651d65e32c8"><param name="Name" value="palTimerFunc2"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#a8581bcb8f9f435a87c3dd651d65e32c8"><param name="Name" value="pal_rtos_test_utils.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8581bcb8f9f435a87c3dd651d65e32c8"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a21fd378211ce09c12c15c39ff579627b"><param name="Name" value="palTimerFuncPtr"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a4b627efa48e79a6fbcafae87ae397985"><param name="Name" value="palTimerID_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d4/d01/pal__rtos_8h.html#a9858103df451aaf98a8af08c2583b94a"><param name="Name" value="palTimerType_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a4f6fdfaea202b7b50e57e7253705d96e"><param name="Name" value="s_palSelectPalCallbackFunctions"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/dfb/pal__plat__network_8cpp.html#a77af6aede7e9f4d41f8c87ebc381b517"><param name="Name" value="s_select_event_happened"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a2f8d675e43058c8f8b853b52366abf38"><param name="Name" value="semaphore1"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a2f8d675e43058c8f8b853b52366abf38"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a2f8d675e43058c8f8b853b52366abf38"><param name="Name" value="pal_rtos_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ad62b547b432124475c3f5a94d9befe6d"><param name="Name" value="socketCallback"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d48/structpal__thread_local_store.html#abe68dca8335fc1c9e6da5359117625bc"><param name="Name" value="storeData"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8"><param name="Name" value="sw2"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#af5543796fae8f0c3d5bfbd33f2389cb8"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde"><param name="Name" value="sw2_press"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a21e1e181f00d9dc8dbb912650459bfde"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a1e33659cb747282e1869e9f86fe2d33f"><param name="Name" value="TEST"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a1e33659cb747282e1869e9f86fe2d33f"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a89cecd4b07ef1acbb0b40c00189a0f36"><param name="Name" value="pal_socket_test.c"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#ab19fea07339238925c3b105637ce92c1"><param name="Name" value="TEST_GROUP"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#ab19fea07339238925c3b105637ce92c1"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ad324fc284dd938317109a9fc47dd1732"><param name="Name" value="pal_socket_test.c"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/df6/pal__rtos__test__runner_8c.html#ace47ba1b1706d7b654cdf18e7008b174"><param name="Name" value="TEST_GROUP_RUNNER"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/df6/pal__rtos__test__runner_8c.html#ace47ba1b1706d7b654cdf18e7008b174"><param name="Name" value="pal_rtos_test_runner.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dc/da5/pal__socket__test__runner_8c.html#a7d7471d47d062a2bf20410044b712192"><param name="Name" value="pal_socket_test_runner.c"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#adc9a94aa19f52027390d7b0256a6693c"><param name="Name" value="TEST_pal_all_GROUPS_RUNNER"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc"><param name="Name" value="TEST_pal_rtos_GROUP_RUNNER"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc"><param name="Name" value="pal_all_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a9e9aa39842df82b3f5086f3215cc74fc"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab"><param name="Name" value="TEST_pal_socket_GROUP_RUNNER"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab"><param name="Name" value="pal_all_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a2393bacb0eb76d2dd1b0c200a8769cab"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a59390bc31498889208cfda7dea51bffa"><param name="Name" value="TEST_pal_update_GROUP_RUNNER"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d5f/pal__socket__test__utils_8cpp.html#ac641d6ab2d8d2f23e89e7c36694d85dd"><param name="Name" value="TEST_PRINTF"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d8/d5f/pal__socket__test__utils_8cpp.html#ac641d6ab2d8d2f23e89e7c36694d85dd"><param name="Name" value="pal_socket_test_utils.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d0/d51/pal__test__utils_8h.html#a7f0c3a0f2f1c4062d776a7bc64bed815"><param name="Name" value="pal_test_utils.h"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8a7c6f6a71607f9dce69207f1f7ed3c1"><param name="Name" value="TEST_SETUP"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#a8a7c6f6a71607f9dce69207f1f7ed3c1"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#a26217052dc55731aa82231669a8cf0df"><param name="Name" value="pal_socket_test.c"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#ac5fc4009112ba6cadc74ad8cd14c427b"><param name="Name" value="TEST_TEAR_DOWN"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="da/d2d/pal__rtos__test_8c.html#ac5fc4009112ba6cadc74ad8cd14c427b"><param name="Name" value="pal_rtos_test.c"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d5/d2a/pal__socket__test_8c.html#ac307640c84843ab78607af150bcbe143"><param name="Name" value="pal_socket_test.c"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487"><param name="Name" value="thread2"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a7d37e93ff0246ad7bf396650eaf84487"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a90b7a8cb7bc3fdbd98014a3e15ee6e9a"><param name="Name" value="THREAD_STACK_SIZE"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#aecb21b545f5a0c542dc82a8ef0b89b3f"><param name="Name" value="threadsArg"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html"><param name="Name" value="threadsArgument"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#a9532cb931dee4c326444e7c366019639"><param name="Name" value="arg1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#acecc240150225e2786524a2e4b3adf78"><param name="Name" value="arg2"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#abcba9882b15e3845a7794220a5c9e4f4"><param name="Name" value="arg3"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#a6fad7cea38d81eb88f9ff01d4baec32a"><param name="Name" value="arg4"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#a2720a7d49d96277778f83a2488859fe9"><param name="Name" value="arg5"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#a460c4a55dba6130f386f648138184074"><param name="Name" value="arg6"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d3/d30/structthreads_argument.html#a200c590896768ffb09f8d90c774f6b74"><param name="Name" value="arg7"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a33d89580fea8198de226a62220e20bd0"><param name="Name" value="threadsArgument_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dc/d2c/structtimer_argument.html#a18bf51a6db87346257b34c24fefbd1b1"><param name="Name" value="ticksBeforeTimer"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dc/d2c/structtimer_argument.html#afe9607363a4b6ae7b835ef129743ec08"><param name="Name" value="ticksInFunc1"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dc/d2c/structtimer_argument.html#af9f23b828a589dfac13cad4cb6e7da34"><param name="Name" value="ticksInFunc2"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d1/dee/pal__rtos__test__utils_8c.html#ad4897778c444c8e8fbcb65c84901ac78"><param name="Name" value="timerArgs"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dc/d2c/structtimer_argument.html"><param name="Name" value="timerArgument"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dc/d2c/structtimer_argument.html#a18bf51a6db87346257b34c24fefbd1b1"><param name="Name" value="ticksBeforeTimer"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dc/d2c/structtimer_argument.html#afe9607363a4b6ae7b835ef129743ec08"><param name="Name" value="ticksInFunc1"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dc/d2c/structtimer_argument.html#af9f23b828a589dfac13cad4cb6e7da34"><param name="Name" value="ticksInFunc2"></OBJECT>
+  </UL>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/d28/pal__rtos__test__utils_8h.html#a8c22b8a190b07232b36b748fbf706e76"><param name="Name" value="timerArgument_t"></OBJECT>
+  <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5"><param name="Name" value="UnityMain"></OBJECT>
+  <UL>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="dd/d30/pal__all__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5"><param name="Name" value="pal_all_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5"><param name="Name" value="pal_rtos_test_main_mbedOS.cpp"></OBJECT>
+    <LI><OBJECT type="text/sitemap"><param name="Local" value="d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html#a58ec279183697abbd5d3efea3442d4e5"><param name="Name" value="pal_socket_test_main_mbedOS.cpp"></OBJECT>
+  </UL>
+</UL>
+</BODY>
+</HTML>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/index.hhp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,122 @@
+[OPTIONS]
+Compiled file=PAL.chm
+Compatibility=1.1
+Full-text search=Yes
+Contents file=index.hhc
+Default Window=main
+Default topic=index.html
+Index file=index.hhk
+Language=0x409 English (United States)
+Binary TOC=YES
+Title=PAL
+
+[WINDOWS]
+main="PAL","index.hhc","index.hhk","index.html","index.html",,,,,0x23520,,0x70387e,,,,,,,,0
+
+[FILES]
+d9/d16/pal_8h_source.html
+d2/d87/pal__configuration_8h_source.html
+da/dfe/pal__errors_8h_source.html
+db/dcf/pal__macros_8h_source.html
+d9/d17/pal__network_8h_source.html
+d4/d01/pal__rtos_8h_source.html
+d6/dc2/pal__types_8h_source.html
+d9/d2c/pal__plat__network_8h_source.html
+d5/d59/pal__plat__rtos_8h_source.html
+d9/d28/pal__rtos__test__utils_8h_source.html
+df/d2a/pal__socket__test__utils_8h_source.html
+d0/d51/pal__test__utils_8h_source.html
+d1/dc4/pal__network_8c.html
+de/d33/pal__rtos_8c.html
+d7/d66/pal__init_8c.html
+d9/d16/pal_8h.html
+d2/d87/pal__configuration_8h.html
+da/dfe/pal__errors_8h.html
+db/dcf/pal__macros_8h.html
+d9/d17/pal__network_8h.html
+d4/d01/pal__rtos_8h.html
+d6/dc2/pal__types_8h.html
+d9/d2c/pal__plat__network_8h.html
+d5/d59/pal__plat__rtos_8h.html
+d3/dfb/pal__plat__network_8cpp.html
+d4/dc5/pal__plat__rtos_8c.html
+d1/dee/pal__rtos__test__utils_8c.html
+d9/d28/pal__rtos__test__utils_8h.html
+d8/d5f/pal__socket__test__utils_8cpp.html
+df/d2a/pal__socket__test__utils_8h.html
+d0/d51/pal__test__utils_8h.html
+d5/de2/pal__all__test_8c.html
+dd/d30/pal__all__test__main__mbed_o_s_8cpp.html
+d3/dab/pal__all__test__runner_8c.html
+da/d2d/pal__rtos__test_8c.html
+df/d12/pal__rtos__test__main__mbed_o_s_8cpp.html
+dd/df6/pal__rtos__test__runner_8c.html
+d5/d2a/pal__socket__test_8c.html
+d9/dc0/pal__socket__test__main__mbed_o_s_8cpp.html
+dc/da5/pal__socket__test__runner_8c.html
+d8/d19/struct__pal_buffer__t.html
+d2/dab/struct__pal_const_buffer__t.html
+df/d48/structpal__thread_local_store.html
+de/dfc/structpal__time_val.html
+d9/d16/structpal_net_interface_info.html
+db/d42/structpal_socket_address.html
+d3/d30/structthreads_argument.html
+dc/d2c/structtimer_argument.html
+dir_f8e9a069a0807d5f7341f9bc5892e16f.html
+dir_7b7fa73f1a1b36d6dab78f50bb89ca7b.html
+dir_5097254b22164c5ad71a4eec719a72ee.html
+dir_ddf5611ee10e8b15ebe1664d2c043f4e.html
+dir_59e3d70b06141856a554dd7aab1293ae.html
+dir_8a9a67948239eaee56ff05ba80ad2d3c.html
+dir_21bbc5adf7d2637a4cb8a3cee979c96f.html
+dir_0bf78cffa0901bd3b5cb7be7888aabc9.html
+dir_c08386f3c1aee312ced83a5951d11ed6.html
+dir_1460475e8e667d8c97e1be97dbcd2231.html
+dir_0a6b9d10733e8fa4306fa781def1f127.html
+dir_18cc01a76aedd55acdee1b7ef37dd546.html
+dir_74389ed8173ad57b461b9d623a1f3867.html
+dir_37618a71d99bdfed5979e976980d5eec.html
+dir_b922272f3c09a4cbb928a2f2eda5adf8.html
+index.html
+annotated.html
+classes.html
+functions.html
+functions_vars.html
+files.html
+globals.html
+globals_d.html
+globals_g.html
+globals_l.html
+globals_m.html
+globals_n.html
+globals_p.html
+globals_s.html
+globals_t.html
+globals_u.html
+globals_func.html
+globals_func_d.html
+globals_func_l.html
+globals_func_m.html
+globals_func_n.html
+globals_func_p.html
+globals_func_s.html
+globals_func_t.html
+globals_func_u.html
+globals_vars.html
+globals_type.html
+globals_enum.html
+globals_eval.html
+globals_defs.html
+tab_a.png
+tab_b.png
+tab_h.png
+tab_s.png
+nav_h.png
+nav_f.png
+bc_s.png
+doxygen.png
+closed.png
+open.png
+bdwn.png
+sync_on.png
+sync_off.png
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/index.html	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,51 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>PAL: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">PAL
+   </div>
+   <div id="projectbrief">A Platform Abstraction Layer connects the mbed-client with the underlying platform.</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+    </ul>
+  </div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">PAL Documentation</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.11
+</small></address>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/jquery.js	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,68 @@
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*!
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *	jquery.ui.widget.js
+ */
+(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ * 
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);/*!
+ PowerTip - v1.2.0 - 2013-04-03
+ http://stevenbenner.github.com/jquery-powertip/
+ Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));
\ No newline at end of file
Binary file pal/Docs/html/nav_f.png has changed
Binary file pal/Docs/html/nav_g.png has changed
Binary file pal/Docs/html/nav_h.png has changed
Binary file pal/Docs/html/open.png has changed
Binary file pal/Docs/html/splitbar.png has changed
Binary file pal/Docs/html/sync_off.png has changed
Binary file pal/Docs/html/sync_on.png has changed
Binary file pal/Docs/html/tab_a.png has changed
Binary file pal/Docs/html/tab_b.png has changed
Binary file pal/Docs/html/tab_h.png has changed
Binary file pal/Docs/html/tab_s.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Docs/html/tabs.css	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,60 @@
+.tabs, .tabs2, .tabs3 {
+    background-image: url('tab_b.png');
+    width: 100%;
+    z-index: 101;
+    font-size: 13px;
+    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+.tabs2 {
+    font-size: 10px;
+}
+.tabs3 {
+    font-size: 9px;
+}
+
+.tablist {
+    margin: 0;
+    padding: 0;
+    display: table;
+}
+
+.tablist li {
+    float: left;
+    display: table-cell;
+    background-image: url('tab_b.png');
+    line-height: 36px;
+    list-style: none;
+}
+
+.tablist a {
+    display: block;
+    padding: 0 20px;
+    font-weight: bold;
+    background-image:url('tab_s.png');
+    background-repeat:no-repeat;
+    background-position:right;
+    color: #283A5D;
+    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+    text-decoration: none;
+    outline: none;
+}
+
+.tabs3 .tablist a {
+    padding: 0 10px;
+}
+
+.tablist a:hover {
+    background-image: url('tab_h.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+    text-decoration: none;
+}
+
+.tablist li.current a {
+    background-image: url('tab_a.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Examples/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# PAL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Jenkinsfile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,45 @@
+
+try {
+  // Reserve an executor from node with label arm-none-eabi-gcc
+  node ("arm-none-eabi-gcc") {
+    // Ensure a clean build by deleting any previous Jenkins workarea
+    deleteDir()
+    // Add timestamps to Jenkins console log
+    timestamps {
+      env.MBEDOS_ROOT = pwd()
+      // Define a Jenkins stage for logging purposes
+      stage ("prepare environment") {
+        // Create a directory and execute steps there
+        dir ("mbed-client-pal") {
+          // clone the sw under test, either branch or PR depending on trigger
+          checkout scm
+        }
+        
+        dir ("mbed-os") {
+          git "git@github.com:ARMmbed/mbed-os"
+          execute ("git checkout tags/mbed-os-5.2")
+        }
+        
+        
+        // Add mbed components
+        execute ("mbed new .")
+
+        // Execute shell command, edit file with sed
+
+
+        writeFile file: 'mbed-os/features/frameworks/.mbedignore', text: '*'
+
+      }
+      
+      stage ("build") {
+        dir ("mbed-client-pal/Test") {
+          execute ("make mbedOS_all")
+        }
+      }
+    }
+  }
+} catch (error) {
+    currentBuild.result = 'FAILURE'
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/LICENSE	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+Unless specifically indicated otherwise in a file, files are licensed
+under the Apache 2.0 license, as can be found in: apache-2.0.txt
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/README.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,84 @@
+# PAL
+This is the main repository for the Platform Abstraction Layer (PAL) project.
+
+# Releases
+
+In order to get the latest stable and tested code, plesae goto [releases](https://github.com/ARMmbed/mbed-client-pal/releases)
+and download the required release version - each release has a comment regarding which official mbedOS version was used for 
+development and testing.
+
+
+# General Use Notes
+
+* `pal_init()` API MUST be called before using any other PAL API, calling PAL APIs without 
+  initialization PAL can return with initialization error.
+* `pal_destroy()` API MUST ba called to free any allocated resources by PAL Modules.
+
+
+# How To Build PAL Tests
+## MbedOS
+
+1. Define the environment variable: `MBEDOS_ROOT` to be the father folder of "mbed-os".
+2. `cd $(PAL_FOLDER)/Test/`
+3. make mbedOS_all - This will build the tests for mbedOS5.2 (mbed-os-5.2)over Freescale-K64F board.
+4. In order to build and run the tests over the platform please run: 
+
+		$ make mbedOS_check
+
+5. In order to see debug prints please send the following flag `DEBUG=1` in compilation command: 
+
+		$ make mbedOS_check DEBUG=1
+
+6. In order to build single module tests please edit `$(PAL_FOLDER)/Test/makefile`
+   under mbedOS5.1 platform, please change the value of the `TARGET_CONFIGURATION_DEFINES` to the 
+   desired module: (default value is for all exist modules)
+
+		HAS_RTOS --> RTOS module APIs
+		HAS_SOCKET --> Networking module APIs
+		
+
+
+# PAL Repository Directory structure
+```
+│
+├── Build //Auto generated during build folder
+│   └── mbedOS  //inncludes .a files
+│       └── obj //includes obj files
+│
+├── Docs
+│
+├── Examples
+│
+├── Source
+│   ├── PAL-Impl
+│   │   ├── Modules
+│   │   │   ├── Networking
+│   │   │   ├── RTOS
+│   │   │   └── Update
+│   │   ├── Services-API //High level Services API for mbed-client to call
+│   │   └── pal_init.c //this file contains the global PAL initialization function
+│   │
+│   └── Port
+│   |   ├── Platform-API //Low level platform oriented API for cutomer to implement
+│   |   └── Reference-Impl
+│   |   |   └── mbedOS
+│   |   |   |	├── Networking
+│   |   |   |	├── RTOS
+│   |   |   |  	└── Update
+│
+├── Test
+│   ├── Common  //contains common headers for tests
+│   ├── Scripts
+│   ├── Unitest //contains the Unitests source code for each module (RTOS, Update, etc)
+│   └── Unity //contains the Unity framework source code
+│
+├── Utils
+│   └── Scripts
+│
+├── PAL MakeFile
+├── Project editor proj file
+├── PAL Master Build Script
+└── Main index Readme file
+
+```
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Modules/Networking/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# PAL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Modules/Networking/pal_network.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,396 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#include "pal.h"
+#include "pal_network.h"
+#include "pal_plat_network.h"
+
+typedef struct pal_in_addr {
+    uint32_t s_addr; // that's a 32-bit int (4 bytes)
+} pal_in_addr_t;
+
+typedef struct pal_socketAddressInternal {
+    short int          pal_sin_family;  // address family
+    unsigned short int pal_sin_port;    // port
+    pal_in_addr_t     pal_sin_addr;    // ipv4 address
+    unsigned char      pal_sin_zero[8]; // 
+} pal_socketAddressInternal_t;
+
+typedef struct pal_socketAddressInternal6{
+    uint16_t       pal_sin6_family;   // address family, 
+    uint16_t       pal_sin6_port;     // port number, Network Byte Order
+    uint32_t       pal_sin6_flowinfo; // IPv6 flow information
+    palIpV6Addr_t pal_sin6_addr;     // IPv6 address
+    uint32_t       pal_sin6_scope_id; // Scope ID
+} pal_socketAddressInternal6_t;
+
+
+
+palStatus_t pal_registerNetworkInterface(void* networkInterfaceContext, uint32_t* interfaceIndex)
+{
+    palStatus_t result = PAL_SUCCESS;
+    result = pal_plat_RegisterNetworkInterface(networkInterfaceContext, interfaceIndex);
+    return result;
+}
+
+
+palStatus_t pal_setSockAddrPort(palSocketAddress_t* address, uint16_t port)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if (NULL == address)
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+
+    if (address->addressType == PAL_AF_INET)
+    {
+        pal_socketAddressInternal_t* innerAddr = (pal_socketAddressInternal_t*)address;
+        innerAddr->pal_sin_port = port;
+    }
+    else  if (address->addressType == PAL_AF_INET6)
+    {
+        pal_socketAddressInternal6_t * innerAddr = (pal_socketAddressInternal6_t*)address;
+        innerAddr->pal_sin6_port = port;
+    }
+    else
+    {
+        result =  PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY;
+    }
+    
+    return result;
+}
+
+
+palStatus_t pal_setSockAddrIPV4Addr(palSocketAddress_t* address, palIpV4Addr_t ipV4Addr)
+{
+    if ((NULL == address) || (NULL == ipV4Addr))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    pal_socketAddressInternal_t* innerAddr = (pal_socketAddressInternal_t*)address;
+    innerAddr->pal_sin_family = PAL_AF_INET;
+    innerAddr->pal_sin_addr.s_addr = (ipV4Addr[0]) | (ipV4Addr[1] << 8) | (ipV4Addr[2] << 16) | (ipV4Addr[3] << 24);
+    return PAL_SUCCESS;
+}
+
+
+palStatus_t pal_setSockAddrIPV6Addr(palSocketAddress_t* address, palIpV6Addr_t ipV6Addr)
+{
+    int index;
+
+    if ((NULL == address) || (NULL == ipV6Addr))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    pal_socketAddressInternal6_t* innerAddr = (pal_socketAddressInternal6_t*)address;
+    innerAddr->pal_sin6_family = PAL_AF_INET6;
+    for (index = 0; index < PAL_IPV6_ADDRESS_SIZE; index++) // TODO: use mem copy?
+    {
+        innerAddr->pal_sin6_addr[index] =  ipV6Addr[index];
+    }
+    return PAL_SUCCESS;
+}
+
+
+palStatus_t pal_getSockAddrIPV4Addr(const palSocketAddress_t* address, palIpV4Addr_t ipV4Addr)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if (NULL == address)
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    if (address->addressType == PAL_AF_INET)
+    {
+        pal_socketAddressInternal_t* innerAddr = (pal_socketAddressInternal_t*)address;
+        ipV4Addr[0] = (innerAddr->pal_sin_addr.s_addr) & 0xFF;
+        ipV4Addr[1] = (innerAddr->pal_sin_addr.s_addr >> 8) & 0xFF;
+        ipV4Addr[2] = (innerAddr->pal_sin_addr.s_addr >> 16) & 0xFF;
+        ipV4Addr[3] = (innerAddr->pal_sin_addr.s_addr >> 24) & 0xFF;
+
+    }
+    else
+    {
+        result =  PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY;
+    }
+    return result;
+}
+
+
+palStatus_t pal_getSockAddrIPV6Addr(const palSocketAddress_t* address, palIpV6Addr_t ipV6Addr)
+{ 
+    palStatus_t result = PAL_SUCCESS;
+    int index = 0;
+    if (address->addressType == PAL_AF_INET6)
+    {
+        pal_socketAddressInternal6_t * innerAddr = (pal_socketAddressInternal6_t*)address;
+        for (index = 0; index < PAL_IPV6_ADDRESS_SIZE; index++) // TODO: use mem copy?
+        {
+            ipV6Addr[index] = innerAddr->pal_sin6_addr[index];
+        }
+    }
+    else
+    {
+        result =  PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY;
+    }
+    return result;
+}
+
+
+palStatus_t pal_getSockAddrPort(const palSocketAddress_t* address, uint16_t* port)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if ((NULL == address) || (NULL == port))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+
+    if (address->addressType == PAL_AF_INET)
+    {
+        pal_socketAddressInternal_t* innerAddr = (pal_socketAddressInternal_t*)address;
+        *port = innerAddr->pal_sin_port;
+    }
+    else  if (address->addressType == PAL_AF_INET6)
+    {
+        pal_socketAddressInternal6_t * innerAddr = (pal_socketAddressInternal6_t*)address;
+        *port = innerAddr->pal_sin6_port;
+    }
+    else
+    {
+        result =  PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY;
+    }
+
+    return result;
+}
+
+
+palStatus_t pal_socket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palSocket_t* socket)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if (NULL == socket)
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result =  pal_plat_socket(domain, type, nonBlockingSocket, interfaceNum, socket);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_getSocketOptions(palSocket_t socket, palSocketOptionName_t optionName, void* optionValue, palSocketLength_t* optionLength)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if ((NULL == optionValue) || (NULL == optionLength))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_getSocketOptions(socket, optionName, optionValue, optionLength);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_setSocketOptions(palSocket_t socket, int optionName, const void* optionValue, palSocketLength_t optionLength)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if (NULL == optionValue)
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_setSocketOptions( socket,  optionName, optionValue,  optionLength);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_bind(palSocket_t socket, palSocketAddress_t* myAddress, palSocketLength_t addressLength)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if (NULL == myAddress)
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_bind(socket, myAddress, addressLength);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_receiveFrom(palSocket_t socket, void* buffer, size_t length, palSocketAddress_t* from, palSocketLength_t* fromLength, size_t* bytesReceived)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if ((NULL == buffer) || (NULL == bytesReceived))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_receiveFrom(socket,  buffer,  length,  from, fromLength, bytesReceived);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)    
+}
+
+
+palStatus_t pal_sendTo(palSocket_t socket, const void* buffer, size_t length, const palSocketAddress_t* to, palSocketLength_t toLength, size_t* bytesSent)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if ((NULL == buffer) || (NULL == bytesSent) || (NULL == to))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_sendTo(socket, buffer, length, to, toLength, bytesSent);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_close(palSocket_t* socket)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if (NULL == socket )
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_close(socket);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_getNumberOfNetInterfaces( uint32_t* numInterfaces)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if (NULL == numInterfaces)
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_getNumberOfNetInterfaces(numInterfaces);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_getNetInterfaceInfo(uint32_t interfaceNum, palNetInterfaceInfo_t * interfaceInfo)
+{
+    palStatus_t result = PAL_SUCCESS;
+    
+    if (NULL == interfaceInfo)
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_getNetInterfaceInfo(interfaceNum, interfaceInfo);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_socketMiniSelect(const palSocket_t socketsToCheck[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t numberOfSockets,
+    pal_timeVal_t* timeout, uint8_t palSocketStatus[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t * numberOfSocketsSet)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if ((NULL == socketsToCheck) || (NULL == numberOfSocketsSet) || (PAL_NET_SOCKET_SELECT_MAX_SOCKETS < numberOfSockets))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_socketMiniSelect(socketsToCheck, numberOfSockets, timeout, palSocketStatus, numberOfSocketsSet);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+#if PAL_NET_TCP_AND_TLS_SUPPORT // functionality below supported only in case TCP is supported.
+
+palStatus_t pal_listen(palSocket_t socket, int backlog)
+{
+    palStatus_t result = PAL_SUCCESS;
+    result = pal_plat_listen(socket, backlog);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_accept(palSocket_t socket, palSocketAddress_t* address, palSocketLength_t* addressLen, palSocket_t* acceptedSocket)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if ((NULL == acceptedSocket) || (NULL == address)|| (NULL == addressLen))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_accept(socket,  address, addressLen,  acceptedSocket);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_connect(palSocket_t socket, const palSocketAddress_t* address, palSocketLength_t addressLen)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if (NULL == address)
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_connect( socket, address, addressLen);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_recv(palSocket_t socket, void* buf, size_t len, size_t* recievedDataSize)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if ((NULL == recievedDataSize) ||  (NULL == recievedDataSize))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_recv(socket, buf, len, recievedDataSize);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_send(palSocket_t socket, const void* buf, size_t len, size_t* sentDataSize)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if ((NULL == buf) || (NULL == sentDataSize))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_send( socket, buf, len, sentDataSize);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+
+
+#if PAL_NET_ASYNCHRONOUS_SOCKET_API
+
+palStatus_t pal_asynchronousSocket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palAsyncSocketCallback_t callback, palSocket_t* socket)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if ((NULL == socket) || (NULL == callback))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_asynchronousSocket(domain,  type,  nonBlockingSocket,  interfaceNum,  callback, socket);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+#endif
+
+#if PAL_NET_DNS_SUPPORT
+
+palStatus_t pal_getAddressInfo(const char *url, palSocketAddress_t *address, palSocketLength_t* addressLength)
+{
+    palStatus_t result = PAL_SUCCESS;
+    if ((NULL == url) || (NULL == address) || (NULL == addressLength))
+    {
+        return PAL_ERR_RTOS_PARAMETER;
+    }
+    result = pal_plat_getAddressInfo(url, address, addressLength);
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+#endif
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Modules/RTOS/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# PAL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Modules/RTOS/pal_rtos.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,319 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#include "pal_rtos.h"
+#include "pal_plat_rtos.h"
+
+#if PAL_UNIQUE_THREAD_PRIORITY
+//! Threads priorities array.
+uint8_t g_palThreadPriorities[PAL_MAX_NUMBER_OF_THREADS] = {0};
+#endif //PAL_UNIQUE_THREAD_PRIORITY
+
+void pal_osReboot(void)
+{
+    pal_plat_osReboot();
+}
+
+uint32_t pal_osKernelSysTick(void)
+{
+    uint32_t result;
+    result = pal_plat_osKernelSysTick();
+    return result;
+}
+
+
+uint64_t pal_osKernelSysTick64(void)
+{
+
+#if PAL_RTOS_64BIT_TICK_SUPPORTED
+    uint64_t result;
+    result = pal_plat_osKernelSysTick64();
+    return result;
+#else
+    static uint64_t lastValue = 0;
+    static uint64_t wraparoundsDetected = 0;
+    const uint64_t one = 1;
+    uint64_t tmp = pal_plat_osKernelSysTick() + (wraparoundsDetected << 32);
+    if (tmp < lastValue) //erez's "wraparound algorithm" if we detect a wrap around add 1 to the higher 32 bits
+    {
+        tmp = tmp + (one << 32);
+        wraparoundsDetected++;
+    }
+    lastValue = tmp;
+    return (uint64_t)tmp;
+#endif
+}
+
+uint64_t pal_osKernelSysTickMicroSec(uint64_t microseconds)
+{
+    uint64_t result;
+    result = pal_plat_osKernelSysTickMicroSec(microseconds);
+    return result;
+}
+
+uint64_t pal_osKernelSysMilliSecTick(uint64_t sysTicks)
+{
+    uint64_t result;
+    result = pal_plat_osKernelSysMilliSecTick(sysTicks);
+    return result;
+}
+
+uint64_t pal_osKernelSysTickFrequency(void)
+{
+    uint64_t result;
+    result = pal_plat_osKernelSysTickFrequency();
+    return result;
+}
+
+palStatus_t pal_osThreadCreate(palThreadFuncPtr function, void* funcArgument, palThreadPriority_t priority, uint32_t stackSize, uint32_t* stackPtr, palThreadLocalStore_t* store, palThreadID_t* threadID)
+{
+    palStatus_t status = PAL_SUCCESS;
+
+#if PAL_UNIQUE_THREAD_PRIORITY
+    //! check if the priority have been used by other thread before
+    if(PAL_osPriorityError == priority)
+    {
+        status = PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    if ((PAL_SUCCESS == status) && (g_palThreadPriorities[priority+PRIORYT_INDEX_OFFSET]))
+    {
+        *threadID = NULLPTR;
+        status = PAL_ERR_RTOS_PRIORITY;
+    }
+#endif //PAL_IGNORE_UNIQUE_THREAD_PRIORITY
+
+    if (PAL_SUCCESS == status)
+    {
+        status = pal_plat_osThreadCreate(function, funcArgument, priority, stackSize, stackPtr, store, threadID);
+    }       
+    return status;
+}
+
+palStatus_t pal_osThreadTerminate(palThreadID_t* threadID)
+{
+    palStatus_t status;
+    status = pal_plat_osThreadTerminate(threadID);
+    return status;
+}
+
+palThreadID_t pal_osThreadGetId(void)
+{
+    palThreadID_t result;
+    result = pal_plat_osThreadGetId();
+    return result;
+}
+
+void*  pal_osThreadGetLocalStore(void)
+{
+    void* result;
+    result = pal_plat_osThreadGetLocalStore();
+    return result;
+}
+
+palStatus_t pal_osDelay(uint32_t milliseconds)
+{
+    palStatus_t status;
+    status = pal_plat_osDelay(milliseconds);
+    return status;
+}
+
+
+palStatus_t pal_osTimerCreate(palTimerFuncPtr function, void* funcArgument, palTimerType_t timerType, palTimerID_t* timerID)
+{
+    palStatus_t status;
+    status = pal_plat_osTimerCreate(function, funcArgument, timerType, timerID);
+    return status;
+}
+
+palStatus_t pal_osTimerStart(palTimerID_t timerID, uint32_t millisec)
+{
+    palStatus_t status;
+    status = pal_plat_osTimerStart(timerID, millisec);
+    return status;
+}
+
+palStatus_t pal_osTimerStop(palTimerID_t timerID)
+{
+    palStatus_t status;
+    status = pal_plat_osTimerStop(timerID);
+    return status;
+}
+
+palStatus_t pal_osTimerDelete(palTimerID_t* timerID)
+{
+    palStatus_t status;
+    status = pal_plat_osTimerDelete(timerID);
+    return status;
+}
+
+palStatus_t pal_osMutexCreate(palMutexID_t* mutexID)
+{
+    palStatus_t status;
+    status = pal_plat_osMutexCreate(mutexID);
+    return status;
+}
+
+palStatus_t pal_osMutexWait(palMutexID_t mutexID, uint32_t millisec)
+{
+    palStatus_t status;
+    status = pal_plat_osMutexWait(mutexID, millisec);
+    return status;
+}
+
+palStatus_t pal_osMutexRelease(palMutexID_t mutexID)
+{
+    palStatus_t status;
+    status = pal_plat_osMutexRelease(mutexID);
+    return status;
+}
+
+palStatus_t pal_osMutexDelete(palMutexID_t* mutexID)
+{
+    palStatus_t status;
+    status = pal_plat_osMutexDelete(mutexID);
+    return status;
+}
+palStatus_t pal_osSemaphoreCreate(uint32_t count, palSemaphoreID_t* semaphoreID)
+{
+    palStatus_t status;
+    status = pal_plat_osSemaphoreCreate(count, semaphoreID);
+    return status;
+}
+
+palStatus_t pal_osSemaphoreWait(palSemaphoreID_t semaphoreID, uint32_t millisec,  int32_t* countersAvailable)
+{
+    palStatus_t status;
+    status = pal_plat_osSemaphoreWait(semaphoreID, millisec, countersAvailable);
+    return status;
+}
+
+palStatus_t pal_osSemaphoreRelease(palSemaphoreID_t semaphoreID)
+{
+    palStatus_t status;
+    status = pal_plat_osSemaphoreRelease(semaphoreID);
+    return status;
+}
+
+palStatus_t pal_osSemaphoreDelete(palSemaphoreID_t* semaphoreID)
+{
+    palStatus_t status;
+    status = pal_plat_osSemaphoreDelete(semaphoreID);
+    return status;
+}
+
+palStatus_t pal_osPoolCreate(uint32_t blockSize, uint32_t blockCount, palMemoryPoolID_t* memoryPoolID)
+{
+    palStatus_t status;
+    status = pal_plat_osPoolCreate(blockSize, blockCount, memoryPoolID);
+    return status;
+}
+
+void* pal_osPoolAlloc(palMemoryPoolID_t memoryPoolID)
+{
+    void* result;
+    result = pal_plat_osPoolAlloc(memoryPoolID);
+    return result;
+}
+
+void* pal_osPoolCAlloc(palMemoryPoolID_t memoryPoolID)
+{
+    void* result;
+    //TODO(nirson01): debug print in case of failed alloc?
+    result = pal_plat_osPoolCAlloc(memoryPoolID);
+    return result;
+}
+
+palStatus_t pal_osPoolFree(palMemoryPoolID_t memoryPoolID, void* block)
+{
+    palStatus_t status;
+    //TODO(nirson01): debug print in case of failed alloc?
+    status = pal_plat_osPoolFree(memoryPoolID, block);
+    return status;
+}
+
+palStatus_t pal_osPoolDestroy(palMemoryPoolID_t* memoryPoolID)
+{
+    palStatus_t status;
+    status = pal_plat_osPoolDestroy(memoryPoolID);  
+    return status;
+}
+
+palStatus_t pal_osMessageQueueCreate(uint32_t messageQSize, palMessageQID_t* messageQID)
+{
+    palStatus_t status;
+    status = pal_plat_osMessageQueueCreate(messageQSize, messageQID);
+    return status;
+}
+
+palStatus_t pal_osMessagePut(palMessageQID_t messageQID, uint32_t info, uint32_t timeout)
+{
+    palStatus_t status;
+    status = pal_plat_osMessagePut(messageQID, info, timeout);
+    return status;
+}
+
+palStatus_t pal_osMessageGet(palMessageQID_t messageQID, uint32_t timeout, uint32_t* messageValue)
+{
+    palStatus_t status;
+    status = pal_plat_osMessageGet(messageQID, timeout, messageValue);
+    return status;
+}
+
+palStatus_t pal_osMessageQueueDestroy(palMessageQID_t* messageQID)
+{
+    palStatus_t status;
+    status = pal_plat_osMessageQueueDestroy(messageQID);
+    return status;
+}
+
+int32_t pal_osAtomicIncrement(int32_t* valuePtr, int32_t increment)
+{
+    int32_t result;
+    result = pal_plat_osAtomicIncrement(valuePtr, increment);
+    return result;
+}
+
+
+
+#ifdef DEBUG
+#include "stdarg.h"
+#endif
+
+void dbgPrintf( const char* function, uint32_t line, const char * format, ... )
+{
+#ifdef DEBUG
+    static palMutexID_t printfMutex = NULLPTR;
+
+    va_list args;
+    if (!printfMutex)
+    {
+        pal_osMutexCreate(&printfMutex);
+    }
+    pal_osMutexWait(printfMutex, PAL_MAX_UINT32);
+#ifdef VERBOSE
+    pal_plat_printf("%s:%ld\t",function,line);
+#endif
+    va_start (args, format);
+    pal_plat_vprintf (format, args);
+    va_end (args);
+    pal_osMutexRelease(printfMutex);
+#endif
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Modules/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# PAL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Modules/Update/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# PAL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Services-API/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# PAL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Services-API/pal.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#ifndef _PAL_H
+#define _PAL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+//includes for common headers in PAL
+#include "pal_macros.h"
+#include "pal_configuration.h"
+#include "pal_errors.h"
+#include "pal_types.h"
+
+//includes for modules headers.
+#include "pal_rtos.h"
+//#include "pal_socket.h"
+
+
+
+//declarations for global init and destroy of PAL
+
+/*! PAL initialization
+*   This function will call each module's initialization function (if exist)
+*   to allocate required resources and initiate them.
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success 
+*   and another negative value indicating a specific error code in case of failure
+*/
+palStatus_t pal_init();
+
+/*! PAL destruction
+*   This function will call each module's destroy function (if exist)
+*   to free resources.
+*/
+void pal_destroy();
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif //_PAL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Services-API/pal_configuration.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#ifndef _PAL_COFIGURATION_H
+#define _PAL_COFIGURATION_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//! pal configuration options
+#define PAL_NET_TCP_AND_TLS_SUPPORT         true/* add pal support for TCP */
+#define PAL_NET_ASYNCHRONOUS_SOCKET_API     true/* add pal support for asynchronous sockets */
+#define PAL_NET_DNS_SUPPORT                 true/* add pal support for DNS lookup */
+
+#define PAL_RTOS_64BIT_TICK_SUPPORTED       false /* add pal support for asynchronous sockets */
+#define PAL_UNIQUE_THREAD_PRIORITY          (!defined(PAL_IGNORE_UNIQUE_THREAD_PRIORITY))/* if defined code skips the uniqueness priority check */
+
+//! number of valid priorities limits the number of threads- if priorities are added this value should be increased
+#define PAL_MAX_NUMBER_OF_THREADS 7 
+
+//! the maximal number of interfaces that can be supported at once.
+#define PAL_MAX_SUPORTED_NET_INTEFACES 5
+
+#ifdef __GNUC__ // we are compiling using GCC/G++
+    #define PAL_TARGET_POINTER_SIZE __SIZEOF_POINTER__
+    #ifdef __BYTE_ORDER
+        #if __BYTE_ORDER == __BIG_ENDIAN //if both are not defined it is TRUE!
+            #define PAL_COMPILATION_ENDIANITY 1 //define pal compilation endianity (0 is little endian, 1 is big endian)
+        #elif __BYTE_ORDER == __LITTLE_ENDIAN
+            #define PAL_COMPILATION_ENDIANITY 0//define pal compilation endianity (0 is little endian, 1 is big endian)
+        #else
+            #error missing endiantiy defintion for GCC
+        #endif
+
+    #endif
+#else
+    #ifdef __arm__ // we are compiling using the ARM compiler
+        #define PAL_TARGET_POINTER_SIZE __sizeof_ptr
+        #ifdef __BIG_ENDIAN
+            #define PAL_COMPILATION_ENDIANITY 1 //define pal compilation endianity (0 is little endian, 1 is big endian)
+        #else 
+            #define PAL_COMPILATION_ENDIANITY 0 //define pal compilation endianity (0 is little endian, 1 is big endian)
+        #endif
+    #else
+        //#error neither ARMCC nor GCC used for compilation - not supported
+    #endif
+ 
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif //_PAL_COFIGURATION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Services-API/pal_errors.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#ifndef _PAL_ERRORS_H
+#define _PAL_ERRORS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pal_types.h"
+
+
+typedef enum {
+    PAL_ERR_MODULE_GENERAL      = 0x4,
+    PAL_ERR_MODULE_PAL          = 0x6,
+    PAL_ERR_MODULE_C            = 0x8,
+    PAL_ERR_MODULE_RTOS         = 0xC,
+    PAL_ERR_MODULE_NET          = 0x10,
+    PAL_ERR_MODULE_TLS          = 0x14,
+    PAL_ERR_MODULE_CRYPTO       = 0x18,
+    PAL_ERR_MODULE_UPDATE       = 0x1C,
+} palErrorModules_t;
+
+
+typedef enum {
+    // generic errors
+    PAL_ERR_GENERAL_BASE =          (-1 << PAL_ERR_MODULE_GENERAL),
+    PAL_ERR_GENERIC_FAILURE =       PAL_ERR_GENERAL_BASE,           /*! generic failure*/ // try to use a more specific error message whenever possible
+    PAL_ERR_INVALID_ARGUMENT =      PAL_ERR_GENERAL_BASE + 1,   /*! one or more of the functions arguments is invalid */
+    PAL_ERR_NO_MEMORY =             PAL_ERR_GENERAL_BASE + 2,   /*! failure due to a failed attempt to allocate memory */
+    PAL_ERR_BUFFER_TOO_SMALL =      PAL_ERR_GENERAL_BASE + 3,   /*! buffer given is too small*/
+    PAL_ERR_NOT_SUPPORTED =         PAL_ERR_GENERAL_BASE + 4,   /*! operation not supported by PAL for the current configuration*/
+    PAL_ERR_TIMEOUT_EXPIRED =       PAL_ERR_GENERAL_BASE + 5,   /*! timeout for the operation has expired */
+    PAL_ERR_NOT_INITIALIZED =       PAL_ERR_GENERAL_BASE + 6,   /*! timeout for the operation has expired */
+    PAL_ERR_NULL_POINTER     =      PAL_ERR_GENERAL_BASE + 7,   /*! received a null pointer when it should be initialized */
+    PAL_ERR_CREATION_FAILED =       PAL_ERR_GENERAL_BASE + 8,   /*! failure in creation of given type, like: mutex, thread , etc */
+    // pal errors
+    PAL_ERR_NOT_IMPLEMENTED =                               (-1 << PAL_ERR_MODULE_PAL), /*!Currently not implemented will be in the future*/
+    // c errors
+    // RTOS errors
+    PAL_ERR_RTOS_ERROR_BASE =                               (-1 << PAL_ERR_MODULE_RTOS),    /*! generic failure in RTOS module*/ // try to use a more specific error message whenever possible
+    PAL_ERR_RTOS_PARAMETER =                                PAL_ERR_RTOS_ERROR_BASE + 0x80,/*! PAL mapping of CMSIS error osErrorParameter : parameter error: a mandatory parameter was missing or specified an incorrect object.*/
+    PAL_ERR_RTOS_RESOURCE =                                 PAL_ERR_RTOS_ERROR_BASE + 0x81,/*! PAL mapping of CMSIS error osErrorResource : resource not available: a specified resource was not available.*/
+    PAL_ERR_RTOS_TIMEOUT =                                  PAL_ERR_RTOS_ERROR_BASE + 0xC1,/*! PAL mapping of CMSIS error osErrorTimeoutResource : resource not available within given time: a specified resource was not available within the timeout period*/
+    PAL_ERR_RTOS_ISR =                                      PAL_ERR_RTOS_ERROR_BASE + 0x82,/*! PAL mapping of CMSIS error osErrorISR : not allowed in ISR context: the function cannot be called from interrupt service routines.*/
+    PAL_ERR_RTOS_ISR_RECURSIVE =                            PAL_ERR_RTOS_ERROR_BASE + 0x83,/*! PAL mapping of CMSIS error osErrorISRRecursive : function called multiple times from ISR with same object.c*/
+    PAL_ERR_RTOS_PRIORITY =                                 PAL_ERR_RTOS_ERROR_BASE + 0x84,/*! PAL mapping of CMSIS error osErrorPriority : system cannot determine priority or thread has illegal priority.*/
+    PAL_ERR_RTOS_NO_MEMORY =                                PAL_ERR_RTOS_ERROR_BASE + 0x85,/*! PAL mapping of CMSIS error osErrorNoMemory : system is out of memory: it was impossible to allocate or reserve memory for the operation.*/
+    PAL_ERR_RTOS_VALUE =                                    PAL_ERR_RTOS_ERROR_BASE + 0x86,/*! PAL mapping of CMSIS error osErrorValue :  value of a parameter is out of range.*/
+    PAL_ERR_RTOS_OS =                                       PAL_ERR_RTOS_ERROR_BASE + 0xFF,/*! PAL mapping of CMSIS error osErrorOS : unspecified RTOS error: run-time error but no other error message fits.*/
+    // network errors
+    PAL_ERR_SOCKET_ERROR_BASE =                             (-1 << PAL_ERR_MODULE_NET),             /*! generic socket error */
+    PAL_ERR_SOCKET_GENERIC =                                PAL_ERR_SOCKET_ERROR_BASE,              /*! generic socket error */
+    PAL_ERR_SOCKET_NO_BUFFERS =                             PAL_ERR_SOCKET_ERROR_BASE + 1,          /*! no buffers -  PAL mapping of posix error ENOBUFS*/ 
+    PAL_ERR_SOCKET_HOST_UNREACHABLE =                       PAL_ERR_SOCKET_ERROR_BASE + 2,          /*! host unreachable (routing error)-  PAL mapping of posix error EHOSTUNREACH*/
+    PAL_ERR_SOCKET_IN_PROGRES =                             PAL_ERR_SOCKET_ERROR_BASE + 3,          /*! in progress-   PAL mapping of posix error EINPROGRESS*/
+    PAL_ERR_SOCKET_INVALID_VALUE =                          PAL_ERR_SOCKET_ERROR_BASE + 4,          /*!invalid value -  PAL mapping of posix error EINVAL*/
+    PAL_ERR_SOCKET_WOULD_BLOCK =                            PAL_ERR_SOCKET_ERROR_BASE + 5,          /*! would block -   PAL mapping of posix error EWOULDBLOCK*/
+    PAL_ERR_SOCKET_ADDRESS_IN_USE =                         PAL_ERR_SOCKET_ERROR_BASE + 6,          /*! Address in use - PAL mapping of posix error EADDRINUSE*/
+    PAL_ERR_SOCKET_ALREADY_CONNECTED =                      PAL_ERR_SOCKET_ERROR_BASE + 7,          /*! Already connected - PAL mapping of posix error EALREADY*/
+    PAL_ERR_SOCKET_CONNECTION_ABORTED =                     PAL_ERR_SOCKET_ERROR_BASE + 8,          /*! Connection aborted - PAL mapping of posix error ECONNABORTED*/
+    PAL_ERR_SOCKET_CONNECTION_RESET =                       PAL_ERR_SOCKET_ERROR_BASE + 9,          /*! Connection reset - PAL mapping of posix error ECONNRESET*/
+    PAL_ERR_SOCKET_NOT_CONNECTED =                          PAL_ERR_SOCKET_ERROR_BASE + 10,         /*! Not connected -  PAL mapping of posix error ENOTCONN*/
+    PAL_ERR_SOCKET_INPUT_OUTPUT_ERROR =                     PAL_ERR_SOCKET_ERROR_BASE + 11,         /*! I/O error  PAL mapping of posix error EIO*/
+    PAL_ERR_SOCKET_CONNECTION_CLOSED =                      PAL_ERR_SOCKET_ERROR_BASE + 12,         /*! connection closed */
+    PAL_ERR_SOCKET_FAILED_TO_SET_SOCKET_TO_NON_BLOCKING =   PAL_ERR_SOCKET_ERROR_BASE + 13,         /*! failed to set socket to non-blocking */
+    PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY =                 PAL_ERR_SOCKET_ERROR_BASE + 14,         /*! failed to set socket to non-blocking */
+    PAL_ERR_SOCKET_INVALID_ADDRESS =                        PAL_ERR_SOCKET_ERROR_BASE + 15,         /*! address given was not valid/found*/
+    PAL_ERR_SOCKET_DNS_ERROR =                              PAL_ERR_SOCKET_ERROR_BASE + 16,         /*! DNS lookup error*/
+    PAL_ERR_SOCKET_HDCP_ERROR =                             PAL_ERR_SOCKET_ERROR_BASE + 17,         /*! HDCP error*/
+    PAL_ERR_SOCKET_AUTH_ERROR =                             PAL_ERR_SOCKET_ERROR_BASE + 18,         /*! authentication error*/
+    PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED =                   PAL_ERR_SOCKET_ERROR_BASE + 19,         /*! socket option not supported*/
+    //update Error
+    PAL_ERR_UPDATE_ERROR_BASE           =                   (-1 << PAL_ERR_MODULE_UPDATE),          /*! generic error */
+    PAL_ERR_UPDATE_ERROR                =                   PAL_ERR_UPDATE_ERROR_BASE,              /*! unknown error */
+    PAL_ERR_UPDATE_BUSY                 =                   PAL_ERR_UPDATE_ERROR_BASE + 1,          /*! unknown error */
+    PAL_ERR_UPDATE_TIMEOUT              =                   PAL_ERR_UPDATE_ERROR_BASE + 2,          /*! unknown error */
+    PAL_ERR_UPDATE_OUT_OF_BOUNDS        =                   PAL_ERR_UPDATE_ERROR_BASE + 3,          /*! unknown error */
+    PAL_ERR_UPDATE_PALFROM_API          =                   PAL_ERR_UPDATE_ERROR_BASE + 4,          /*! unknown error */
+    PAL_ERR_UPDATE_PALFROM_IO           =                   PAL_ERR_UPDATE_ERROR_BASE + 5,          /*! unknown error */
+    PAL_ERR_UPDATE_END_OF_IMAGE         =                   PAL_ERR_UPDATE_ERROR_BASE + 6,          /*! unknown error */
+    PAL_ERR_UPDATE_CHUNK_TO_SMALL       =                   PAL_ERR_UPDATE_ERROR_BASE + 7,          /*! unknown error */
+
+} palError_t; /*! errors returned by the pal service API */
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif //_PAL_ERRORS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Services-API/pal_macros.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#ifndef _PAL_MACROS_H
+#define _PAL_MACROS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pal_errors.h"
+// PAL success value
+#define PAL_SUCCESS 0
+
+// maximum integer types
+#define PAL_MAX_UINT8       0xFFU
+#define PAL_MAX_UINT16      0xFFFFU
+#define PAL_MAX_UINT32      0xFFFFFFFFUL
+#define PAL_MAX_INT32       0x7FFFFFFFL
+#define PAL_MIN_INT32       0x80000000L
+#define PAL_MAX_UINT64      0xFFFFFFFFFFFFFFFFULL
+#define PAL_MAX_INT64       0x7FFFFFFFFFFFFFFFLL
+
+// useful macros
+
+#define PAL_MAX(a,b)            ((a) > (b) ? (a) : (b))
+
+#define PAL_MIN(a,b)            ((a) < (b) ? (a) : (b))
+
+#define PAL_DIVIDE_ROUND_UP(num, divider)           (((num) + (divider) - 1) / (divider))
+
+#if PAL_COMPILATION_ENDIANITY == 1
+#define BIG__ENDIAN 1
+#elif PAL_COMPILATION_ENDIANITY == 0
+#define LITTLE__ENDIAN 1
+#else 
+#error neither BIG__ENDIAN nor LITTLE__ENDIAN defined, cannot compile
+#endif
+
+// endianity macros
+#ifdef LITTLE__ENDIAN
+
+#define PAL_HTONS(x) (((((unsigned short)(x)) >> 8) & 0xff) | \
+            ((((unsigned short)(x)) & 0xff) << 8))
+#define PAL_NTOHS(x) (((((unsigned short)(x)) >> 8) & 0xff) | \
+            ((((unsigned short)(x)) & 0xff) << 8) )
+#define PAL_HTONL(x) ((((x)>>24) & 0xffL) | (((x)>>8) & 0xff00L) | \
+            (((x)<<8) & 0xff0000L) | (((x)<<24) & 0xff000000L))
+#define PAL_NTOHL(x) ((((x)>>24) & 0xffL) | (((x)>>8) & 0xff00L) | \
+            (((x)<<8) & 0xff0000L) | (((x)<<24) & 0xff000000L))
+
+#elif defined(BIG__ENDIAN)
+
+#define PAL_HTONS(x) (x)
+#define PAL_NTOHS(x) (x)
+#define PAL_HTONL(x) (x)
+#define PAL_NTOHL(x) (x)
+#else
+#error neither BIG__ENDIAN nor LITTLE__ENDIAN defined, cannot compile
+#endif
+
+
+
+#define PAL_INVERSE_UINT16_BYTES( val ) \
+    ( ((val) << 8) | (((val) & 0x0000FF00) >> 8))
+
+#define PAL_INVERSE_UINT32_BYTES( val ) \
+   ( ((val) >> 24) | (((val) & 0x00FF0000) >> 8) | (((val) & 0x0000FF00) << 8) | (((val) & 0x000000FF) << 24) )
+
+#define PAL_INVERSE_UINT64_BYTES( val ) \
+    ((PAL_INVERSE_UINT32_BYTES( ((val >> 16) >> 16)) &0xffffffff)  | ((((uint64_t)PAL_INVERSE_UINT32_BYTES(val & 0xffffffff))<<16)<<16)) 
+
+/* Set of Macros similar to the HTONS/L, NTOHS/L ones but converting to/from little endian instead of big endian*/
+#ifdef LITTLE__ENDIAN 
+#define PAL_LITTLE_ENDIAN_TO_HOST_16BIT(x) (x)
+#define PAL_LITTLE_ENDIAN_TO_HOST_32BIT(x) (x)
+#define PAL_LITTLE_ENDIAN_TO_HOST_64BIT(x) (x)
+#define PAL_HOST_TO_LITTLE_ENDIAN_16BIT(x) (x)
+#define PAL_HOST_TO_LITTLE_ENDIAN_32BIT(x) (x)
+#define PAL_HOST_TO_LITTLE_ENDIAN_64BIT(x) (x)
+
+
+#elif defined(BIG__ENDIAN)
+#define PAL_LITTLE_ENDIAN_TO_HOST_16BIT(x) (PAL_INVERSE_UINT16_BYTES(((uint16_t)x)))
+#define PAL_LITTLE_ENDIAN_TO_HOST_32BIT(x) (PAL_INVERSE_UINT32_BYTES(((uint32_t)x)))
+#define PAL_LITTLE_ENDIAN_TO_HOST_64BIT(x) (PAL_INVERSE_UINT64_BYTES(((uint64_t)x)))
+#define PAL_HOST_TO_LITTLE_ENDIAN_16BIT(x) (PAL_INVERSE_UINT16_BYTES(((uint16_t)x)))
+#define PAL_HOST_TO_LITTLE_ENDIAN_32BIT(x) (PAL_INVERSE_UINT32_BYTES(((uint32_t)x)))
+#define PAL_HOST_TO_LITTLE_ENDIAN_64BIT(x) (PAL_INVERSE_UINT64_BYTES(((uint64_t)x)))
+
+#else
+#error neither BIG__ENDIAN nor LITTLE__ENDIAN defined, cannot compile
+#endif
+
+
+#define PAL_MODULE_INIT(INIT) INIT= 1
+#define PAL_MODULE_DEINIT(INIT) INIT= 0
+
+#ifdef DEBUG
+#include "pal.h"
+#define DEBUG_PRINT(ARGS...) PAL_PRINTF(ARGS)
+
+#define DEBUG_PRINT(ARGS...) PAL_PRINTF(ARGS)
+#define PAL_MODULE_IS_INIT(INIT) if(!INIT) return PAL_ERR_NOT_INITIALIZED;
+
+
+#else
+#define PAL_MODULE_IS_INIT(INIT)
+
+#define DEBUG_PRINT(ARGS...)
+
+#endif //DEBUG
+
+#ifdef __cplusplus
+}
+#endif
+#endif //_PAL_MACROS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Services-API/pal_network.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,323 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#ifndef _PAL_SOCKET_H
+#define _PAL_SOCKET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pal.h"
+//! PAL network socket API
+//! pal network sockets configurations options:
+//! set PAL_NET_TCP_AND_TLS_SUPPORT to true TCP is supported by the platform and is required
+//! set PAL_NET_ASYNCHRONOUS_SOCKET_API to true if asynchronous socket API supported by the platform and is required : CURRENTLY MANDATORY
+//! set PAL_NET_DNS_SUPPORT to true if you DNS url lookup API is supported.
+
+typedef uint32_t palSocketLength_t; /*! length of data */
+typedef void* palSocket_t; /*! PAL socket handle type */
+
+#define  PAL_NET_MAX_ADDR_SIZE 32 // check if we can make this more efficient
+
+typedef struct palSocketAddress {
+    unsigned short    addressType;    /*! address family for the socket*/
+    char              addressData[PAL_NET_MAX_ADDR_SIZE];  /*! address (based on protocol)*/
+} palSocketAddress_t; /*! address data structure with enough room to support IPV4 and IPV6*/
+
+typedef struct palNetInterfaceInfo{
+    char interfaceName[16]; //15 + ‘\0’
+    palSocketAddress_t address;
+    uint32_t addressSize;
+} palNetInterfaceInfo_t;
+
+typedef enum {
+    PAL_AF_UNSPEC = 0,
+    PAL_AF_INET = 2,    /*! Internet IP Protocol    */
+    PAL_AF_INET6 = 10, /*! IP version 6     */
+} palSocketDomain_t;/*! network domains supported by PAL*/
+
+typedef enum {
+#if PAL_NET_TCP_AND_TLS_SUPPORT
+    PAL_SOCK_STREAM = 1,    /*! stream socket   */
+    PAL_SOCK_STREAM_SERVER = 99,    /*! stream socket   */
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+    PAL_SOCK_DGRAM = 2  /*! datagram socket     */
+} palSocketType_t;/*! socket types supported by PAL */
+
+
+typedef enum {
+    PAL_SO_REUSEADDR = 0x0004,  /*! allow local address reuse */
+#if PAL_NET_TCP_AND_TLS_SUPPORT // socket options below supported only if TCP is supported.
+    PAL_SO_KEEPALIVE = 0x0008, /*! keep TCP connection open even if idle using periodic messages*/
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+    PAL_SO_SNDTIMEO = 0x1005,  /*! send timeout */
+    PAL_SO_RCVTIMEO = 0x1006,  /*! receive timeout */
+} palSocketOptionName_t;/*! socket options supported by PAL */
+
+#define PAL_NET_DEFAULT_INTERFACE 0xFFFFFFFF
+
+#define PAL_IPV4_ADDRESS_SIZE 4
+#define PAL_IPV6_ADDRESS_SIZE 16
+
+typedef uint8_t palIpV4Addr_t[PAL_IPV4_ADDRESS_SIZE];
+typedef uint8_t palIpV6Addr_t[PAL_IPV6_ADDRESS_SIZE];
+
+typedef struct pal_timeVal{
+    int32_t    pal_tv_sec;      /*! seconds */
+    int32_t    pal_tv_usec;     /*! microseconds */
+} pal_timeVal_t;
+
+
+/*! Register a network interface for use with PAL sockets - must be called before other socket functions - most APIs will not work before a single interface is added.
+* @param[in] networkInterfaceContext of the network  interface to be added (OS specific , e.g. in MbedOS this is the NetworkInterface object pointer for the network adapter [note: we assume connect has already been called on this]) - if not available use NULL .
+* @param[out] InterfaceIndex will contain the index assigned to the interface in case it has been assigned successfully. this index can be used when creating a socket to bind the socket to the interface.
+\return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_registerNetworkInterface(void* networkInterfaceContext, uint32_t* interfaceIndex);
+
+/*! set a port to a palSocketAddress_t
+* setting it can be done either directly or via the  palSetSockAddrIPV4Addr or  palSetSockAddrIPV6Addr functions
+* @param[in,out] address the address to set
+* @param[in] port the port number to set
+\return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+\note for the socket to be set correctly the addressType field of the address must be set correctly. 
+*/
+palStatus_t pal_setSockAddrPort(palSocketAddress_t* address, uint16_t port);
+
+/*! set an ipV4 address to a palSocketAddress_t and also set the addressType to ipv4
+* @param[in,out] address the address to set
+* @param[in] ipV4Addr the address value to set
+\return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_setSockAddrIPV4Addr(palSocketAddress_t* address, palIpV4Addr_t ipV4Addr);
+
+/*! set an ipV6 address to a palSocketAddress_t and also set the addressType to ipv6
+* @param[in,out] address the address to set
+* @param[in] ipV6Addr the address value to set
+\return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_setSockAddrIPV6Addr(palSocketAddress_t* address, palIpV6Addr_t ipV6Addr);
+
+/*! get an ipV4 address from a palSocketAddress_t
+* @param[in] address the address to set
+* @param[out] ipV4Addr the address that is set in the address
+\return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_getSockAddrIPV4Addr(const palSocketAddress_t* address, palIpV4Addr_t ipV4Addr);
+
+/*! get an ipV6 address from a palSocketAddress_t
+* @param[in] address the address to set
+* @param[out] ipV6Addr the address that is set in the address
+\return the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_getSockAddrIPV6Addr(const palSocketAddress_t* address, palIpV6Addr_t ipV6Addr);
+
+/*! get a port from a palSocketAddress_t
+* @param[in] address the address to set
+* @param[out] port the port that is set in the address
+\return the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_getSockAddrPort(const palSocketAddress_t* address, uint16_t* port);
+
+/*! get a network socket
+* @param[in] domain the domain for the created socket (see palSocketDomain_t for supported types)
+* @param[in] type the type for the created socket (see palSocketType_t for supported types)
+* @param[in] nonBlockingSocket if true the socket created is created as non-blocking (i.e. with O_NONBLOCK set)
+* @param[in] interfaceNum the number of the network interface used for this socket (info in interfaces supported via pal_getNumberOfNetInterfaces and pal_getNetInterfaceInfo ), choose PAL_NET_DEFAULT_INTERFACE for default interface.
+* @param[out] socket socket is returned through this output parameter
+\return the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_socket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palSocket_t* socket);
+
+/*! get options for a given network socket
+* @param[in] socket the socket for which to get options
+* @param[in] optionName for which we are setting the option (see enum PAL_NET_SOCKET_OPTION for supported types)
+* @param[out] optionValue the buffer holding the option value returned by the function
+* @param[in, out] optionLength the size of the buffer provided for optionValue when calling the function after the call it will contain the length of data actually written to the optionValue buffer.
+\return the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_getSocketOptions(palSocket_t socket, palSocketOptionName_t optionName, void* optionValue, palSocketLength_t* optionLength);
+
+/*! set options for a given network socket
+* @param[in] socket the socket for which to get options
+* @param[in] optionName for which we are setting the option (see enum PAL_NET_SOCKET_OPTION for supported types)
+* @param[in] optionValue the buffer holding the option value to set for the given option
+* @param[in] optionLength  the size of the buffer provided for optionValue
+\return the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_setSocketOptions(palSocket_t socket, int optionName, const void* optionValue, palSocketLength_t optionLength);
+
+/*! bind a given socket to a local address
+* @param[in] socket the socket to bind
+* @param[in] myAddress the address to which to bind
+* @param[in] addressLength the length of the address passed in myAddress
+\return the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_bind(palSocket_t socket, palSocketAddress_t* myAddress, palSocketLength_t addressLength);
+
+/*! receive a payload from the given socket
+* @param[in] socket the socket to receive from [we expect sockets passed to this function to be of type PAL_SOCK_DGRAM  ( the implementation may support other types as well) ]
+* @param[out] buffer the buffer for the payload data
+* @param[in] length of the buffer for the payload data
+* @param[out] from the address which sent the payload
+* @param[in, out] fromLength the length of the 'from' address, after completion will contain the amount of data actually written to the from address
+* @param[out] bytesReceived after the call will contain the actual amount of payload data received to the buffer
+\return the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_receiveFrom(palSocket_t socket, void* buffer, size_t length, palSocketAddress_t* from, palSocketLength_t* fromLength, size_t* bytesReceived);
+
+/*! send a payload to the given address using the given socket
+* @param[in] socket the socket to use for sending the payload [we expect sockets passed to this function to be of type PAL_SOCK_DGRAM  ( the implementation may support other types as well) ]
+* @param[in] buffer the buffer for the payload data
+* @param[in] length of the buffer for the payload data
+* @param[in] to the address to which to payload should be sent
+* @param[in] toLength the length of the 'to' address
+* @param[out] bytesSent after the call will contain the actual amount of payload data sent
+\return the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_sendTo(palSocket_t socket, const void* buffer, size_t length, const palSocketAddress_t* to, palSocketLength_t toLength, size_t* bytesSent);
+
+/*! close a network socket
+* @param[in,out] socket release and zero socket pointed to by given pointer.
+\return the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+\note recieves palSocket_t* and not palSocket_t so that it can zero the socket to avoid re-use.
+*/
+palStatus_t pal_close(palSocket_t* socket);
+
+/*! get the number of current network interfaces
+* @param[out] numInterfaces will hold the number of interfaces after a successful call
+\return the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_getNumberOfNetInterfaces(uint32_t* numInterfaces);
+
+/*! get information regarding the socket at the index/interface number given (this number is returned when registering the socket)
+* @param[in] interfaceNum the number of the interface to get information for.
+* @param[out] interfaceInfo will be set to the information for the given interface number.
+\return the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_getNetInterfaceInfo(uint32_t interfaceNum, palNetInterfaceInfo_t* interfaceInfo);
+
+
+#define PAL_NET_SOCKET_SELECT_MAX_SOCKETS 8
+#define PAL_NET_SOCKET_SELECT_RX_BIT (1)
+#define PAL_NET_SOCKET_SELECT_TX_BIT (2)
+#define PAL_NET_SOCKET_SELECT_ERR_BIT (4)
+
+#define PAL_NET_SELECT_IS_RX(socketStatus, index)   ((socketStatus[index] | PAL_NET_SOCKET_SELECT_RX_BIT) != 0) /*! check if RX bit is set in select result for a given socket index*/
+#define PAL_NET_SELECT_IS_TX(socketStatus, index)   ((socketStatus[index] | PAL_NET_SOCKET_SELECT_TX_BIT) != 0) /*! check if TX bit is set in select result for a given socket index*/
+#define PAL_NET_SELECT_IS_ERR(socketStatus, index)  ((socketStatus[index] | PAL_NET_SOCKET_SELECT_ERR_BIT) != 0) /*! check if ERR bit is set in select result for a given socket index*/
+
+/*! check if one or more (up to PAL_NET_SOCKET_SELECT_MAX_SOCKETS) sockets given has data available for reading/writing/error, the function will block until data is available for one of the given sockets or the timeout expires.
+To use the function: set the sockets you want to check in the socketsToCheck array and set a timeout, when it returns the socketStatus output will indicate the status of each socket passed in.
+* @param[in] socketsToCheck on input: the array of up to 8 sockets handles to check.
+* @param[in] numberOfSockets the number of sockets set in the input socketsToCheck array.
+* @param[in] timeout the amount of time till timeout if no socket activity is detected
+* @param[out] socketStatus will provide information on each socket in the input array indicating which event was set (none, rx, tx, err) check for desired event using macros.
+* @param[out] numberOfSocketsSet is the total number of sockets set in all three data sets (tx, rx, err)after the function completes
+\return the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+\note the entry in index x in the socketStatus array corresponds to the socket at index x in the sockets to check array.
+*/
+palStatus_t pal_socketMiniSelect(const palSocket_t socketsToCheck[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t numberOfSockets, pal_timeVal_t* timeout,
+                                uint8_t palSocketStatus[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t* numberOfSocketsSet);
+
+
+#if PAL_NET_TCP_AND_TLS_SUPPORT // functionality below supported only in case TCP is supported.
+
+
+/*! use given socket to listed for incoming connections, may also limit queue of incoming connections.
+* @param[in] socket the socket to listen on [we expect sockets passed to this function to be of type PAL_SOCK_STREAM_SERVER  ( the implementation may support other types as well) ]
+* @param[in] backlog the amount connections of pending connections which can be saved for the socket
+\return the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_listen(palSocket_t socket, int backlog);
+
+/*! accept a connection on the given socket
+* @param[in] socket the socket on which to accept the connection (prerequisite: socket already created and bind and listen have been called on it ) [we expect sockets passed to this function to be of type PAL_SOCK_STREAM_SERVER  ( the implementation may support other types as well) ]
+* @param[out] address the source address of the incoming connection
+* @param[in, out] addressLen the length of the address field on input, the length of the data returned on output.
+* @param[out] acceptedSocket the socket of the accepted connection will be returned here if connection accepted successfully.
+
+\return the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_accept(palSocket_t socket, palSocketAddress_t* address, palSocketLength_t* addressLen, palSocket_t* acceptedSocket);
+
+/*! open a connection from the given socket to the given address
+* @param[in] socket the socket to use for connection to the given address [we expect sockets passed to this function to be of type PAL_SOCK_STREAM ( the implementation may support other types as well) ]
+* @param[in] address the destination address of the connection
+* @param[in] addressLen the length of the address field
+\return the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_connect(palSocket_t socket, const palSocketAddress_t* address, palSocketLength_t addressLen);
+
+/*! receive data from the given connected socket
+* @param[in] socket the connected socket on which to receive data [we expect sockets passed to this function to be of type PAL_SOCK_STREAM ( the implementation may support other types as well) ]
+* @param[out] buf the output buffer for the message data
+* @param[in] len the length of the input data buffer
+* @param[out] recievedDataSize the length of the data actually received
+\return the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_recv(palSocket_t socket, void* buf, size_t len, size_t* recievedDataSize);
+
+/*! send a given buffer via the given connected socket
+* @param[in] socket the connected socket on which to send data [we expect sockets passed to this function to be of type PAL_SOCK_STREAM ( the implementation may support other types as well) ]
+* @param[in] buf the output buffer for the message data
+* @param[in] len the length of the input data buffer
+* @param[out] sentDataSize the length of the data sent
+\return the function returns the status as in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_send(palSocket_t socket, const void* buf, size_t len, size_t* sentDataSize);
+
+
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+
+
+#if PAL_NET_ASYNCHRONOUS_SOCKET_API
+
+/*! callback function called when an even happens an asynchronous socket for which it was set using the pal_asynchronousSocket. 
+*/
+typedef void(*palAsyncSocketCallback_t)();
+
+/*! get an asynchronous network socket
+* @param[in] domain the domain for the created socket (see enum palSocketDomain_t for supported types)
+* @param[in] type the type for the created socket (see enum palSocketType_t for supported types)
+* @param[in] nonBlockingSocket if true the socket created is created as non-blocking (i.e. with O_NONBLOCK set)
+* @param[in] interfaceNum the number of the network interface used for this socket (info in interfaces supported via pal_getNumberOfNetInterfaces and pal_getNetInterfaceInfo ), choose PAL_NET_DEFAULT_INTERFACE for default interface.
+* @param[in] callback a callback function that will be called when any supported event happens to the given asynchronous socket (see palAsyncSocketCallbackType enum for the types of events supported)
+* @param[out] socket socket is returned through this output parameter
+\return the function returns the status in the form of PalStatus_t which will be PAL_SUCCESS (0) in case of success or a specific negative error code in case of failure
+*/
+palStatus_t pal_asynchronousSocket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palAsyncSocketCallback_t callback, palSocket_t* socket);
+
+#endif
+
+#if PAL_NET_DNS_SUPPORT
+
+/*! this function will translate from a URL to a palSocketAddress_t which can be used with pal sockets. It supports both IP address as strings and URLs (using DNS lookup).
+* @param[in] url the URL (or IP address sting) to be translated into a palSocketAddress_t.
+* @param[out] address the address for the output of the translation.
+*/
+palStatus_t pal_getAddressInfo(const char* url, palSocketAddress_t* address, palSocketLength_t* addressLength);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif //_PAL_SOCKET_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Services-API/pal_rtos.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,397 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#ifndef _PAL_RTOS_H
+#define _PAL_RTOS_H
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pal_macros.h"
+#include "pal_types.h"
+
+//! Wait forever define. used for Semaphores and Mutexes
+#define PAL_RTOS_WAIT_FOREVER PAL_MAX_UINT32
+
+//! Primitives IDs types declarations
+typedef uintptr_t palThreadID_t;
+typedef uintptr_t palTimerID_t;
+typedef uintptr_t palMutexID_t;
+typedef uintptr_t palSemaphoreID_t;
+typedef uintptr_t palMemoryPoolID_t;
+typedef uintptr_t palMessageQID_t;
+
+//! Timers types supported in PAL
+typedef enum  palTimerType {
+    palOsTimerOnce = 0, /*! One shot timer*/
+    palOsTimerPeriodic = 1 /*! Periodic (repeating) timer*/
+} palTimerType_t;
+
+//! PAL timer function prototype
+typedef void(*palTimerFuncPtr)(void const *funcArgument);
+
+//! PAL thread function prototype
+typedef void(*palThreadFuncPtr)(void const *funcArgument); 
+
+//! Available priorities in PAL implementation, each priority can appear only once.
+typedef enum    pal_osPriority {
+    PAL_osPriorityIdle = -3,
+    PAL_osPriorityLow = -2,
+    PAL_osPriorityBelowNormal = -1,
+    PAL_osPriorityNormal = 0,
+    PAL_osPriorityAboveNormal = +1,
+    PAL_osPriorityHigh = +2,
+    PAL_osPriorityRealtime = +3,
+    PAL_osPriorityError = 0x84
+} palThreadPriority_t; /*! Thread priority levels for PAL threads - each thread must have a different priority*/
+
+//! Thread Local Store struct.
+//! Can be used to hold: State, configurations and etc inside the thread.
+typedef struct pal_threadLocalStore{
+    void* storeData;
+} palThreadLocalStore_t;
+
+//------- system general functions
+/*! Initiates a system reboot
+*/
+void pal_osReboot(void);
+
+//------- system tick functions
+/*! Get the RTOS kernel system timer counter.
+* \note this counter will wrap around very often (e.g. once every 42 sec for 100Mhz)
+* \return the RTOS kernel system timer counter
+*/
+uint32_t pal_osKernelSysTick(void);
+
+/*! Get the RTOS kernel system timer counter.
+* \return the RTOS kernel system timer counter
+*/
+uint64_t pal_osKernelSysTick64(void);
+
+/*! Converts value from microseconds to kernel sys tick
+*
+* @param[in] microseconds the amount of microseconds to convert into system ticks
+*
+* \return converted value in system ticks
+*/
+uint64_t pal_osKernelSysTickMicroSec(uint64_t microseconds);
+
+/*! Converts value from kernel system ticks to milliseconds.
+*
+* @param[in] sysTicks the amount of kernel system ticks to convert into millieseconds
+*
+* \return converted value in system ticks
+*/
+uint64_t pal_osKernelSysMilliSecTick(uint64_t sysTicks);
+
+/*! Get the system tick frequency
+* \return the system tick frequency
+*/
+uint64_t pal_osKernelSysTickFrequency(void);
+
+/*! Creates and starts thread function.
+*
+* @param[in] function: function pointer to the thread callback function.
+* @param[in] funcArgument: argument for the thread function.
+* @param[in] priority: priotity of the thread.
+* @param[in] stackSize: the stack size of the thread can NOT be 0.
+* @param[in] stackPtr: pointer to the thread's stack can NOT be NULL.
+* @param[in] store: pointer to thread's local sotre, can be NULL.
+* @param[out] threadID: holds the created thread ID handle - zero value indecates an error.
+*
+* \return PAL_SUCCESS when thread created successfully.
+*         PAL_ERR_RTOS_PRIORITY : the given priority already used before in the system.
+*
+* \note Each thread MUST be with unique priority.
+* \note When the priority of the created thread function is higher than the current running thread, the 
+*       created thread function starts instantly and becomes the new running thread. 
+*/
+palStatus_t pal_osThreadCreate(palThreadFuncPtr function, void* funcArgument, palThreadPriority_t priority, uint32_t stackSize, uint32_t* stackPtr, palThreadLocalStore_t* store, palThreadID_t* threadID);
+
+
+/*! Terminates and free allocated data for the thread.
+*
+* @param[in] threadID: thread ID to stop and terminate.
+*
+* \return palStatus_t which will be PAL_SUCCESS(0) in case of success and another negative value indicating a specific error code in case of failure
+*         PAL_ERR_RTOS_RESOURCE: if the thread ID is not correct.
+*/
+palStatus_t pal_osThreadTerminate(palThreadID_t* threadID);
+
+/*! Get ID of the current thread
+* \return the ID of the current thread -  in case of error return PAL_MAX_UINT32
+* \note for thread with Real Time priority the function will always return PAL_MAX_UINT32
+*/
+palThreadID_t pal_osThreadGetId(void);
+
+/*! Get the storage of current thread
+* \return the storage of the current thread */
+void* pal_osThreadGetLocalStore(void);
+
+/*! Wait for a specified time period in milliseconds.
+*
+* @param[in] milliseconds the amount of milliseconds to wait before proceeding.
+*
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and another negative value indicating a specific error code in case of failure
+*/
+palStatus_t pal_osDelay(uint32_t milliseconds);
+
+/*! Creates a Timer.
+*
+* @param[in] function: function pointer to the timer callback function.
+* @param[in] funcArgument: funcArgument for the timer callback function.
+* @param[in] timerType: timer type to be created - (periodic or oneShot).
+* @param[out] timerID: holds the created timer ID handle - zero value indecates an error.
+*
+* \return PAL_SUCCESS when timer created successfully.
+*         PAL_ERR_NO_MEMORY: no memory resource available to create timer object.
+*
+* \note the timer function runs according to the platform resources of stack-size and priority.
+*/
+palStatus_t pal_osTimerCreate(palTimerFuncPtr function, void* funcArgument, palTimerType_t timerType, palTimerID_t* timerID);
+
+/*! Start or restart a timer.
+*
+* @param[in] timerID the handle for the timer to start
+* @param[in] millisec the amount of time in milliseconds to set the timer to.
+*
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and another negative value indicating a specific error code in case of failure
+*/
+palStatus_t pal_osTimerStart(palTimerID_t timerID, uint32_t millisec);
+
+/*! Stop a timer.
+* @param[in] timerID the handle for the timer to stop
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and another negative value indicating a specific error code in case of failure
+*/
+palStatus_t pal_osTimerStop(palTimerID_t timerID);
+
+/*! Delete the timer object
+*
+* @param[inout] timerID: the handle for the timer to delete, in success:(*timerID = NULL).
+*
+* \return PAL_SUCCESS when timer deleted successfully.
+*         PAL_ERR_RTOS_PARAMETER when timerID is incorrect.
+*/
+palStatus_t pal_osTimerDelete(palTimerID_t* timerID);
+
+/*! Create and initialize Mutex object
+*
+* @param[out] mutexID: holds the created mutex ID handle - zero value indecates an error.
+*
+* \return PAL_SUCCESS when mutex created successfully.
+*         PAL_ERR_NO_MEMORY: no memory resource available to create mutex object.
+*/
+palStatus_t pal_osMutexCreate(palMutexID_t* mutexID);
+
+/*! Wait until a Mutex becomes available.
+*
+* @param[in] mutexID the handle for the mutex
+* @param[in] millisec the timeout for the waiting operation if the 
+             timeout expires before the semaphore is released and 
+             error will be returned from the function, PAL_RTOS_WAIT_FOREVER can be used.
+*
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and one of the following error codes in case of failure:
+*         PAL_ERR_RTOS_RESOURCE - mutex not avaialbe but no time out set.
+*         PAL_ERR_RTOS_TIMEOUT - mutex was not available until timeout expired.
+*         PAL_ERR_RTOS_PARAMETER - mutex id is invalid
+*         PAL_ERR_RTOS_ISR - cannot be called from interrupt service routines
+*/
+palStatus_t pal_osMutexWait(palMutexID_t mutexID, uint32_t millisec);
+
+/*! Release a Mutex that was obtained by osMutexWait.
+*
+* @param[in] mutexID the handle for the mutex
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and another negative value indicating a specific error code in case of failure
+*/
+palStatus_t pal_osMutexRelease(palMutexID_t mutexID);
+
+/*!Delete a Mutex object.
+*
+* @param[inout] mutexID: Mutex handle to delete, in success:(*mutexID = NULL).
+*
+* \return PAL_SUCCESS when mutex deleted successfully.
+*         PAL_ERR_RTOS_RESOURCE - mutex already released.
+*         PAL_ERR_RTOS_PARAMETER - mutex id is invalid.
+*         PAL_ERR_RTOS_ISR - cannot be called from interrupt service routines.
+* \note After this call the mutex_id is no longer valid and cannot be used.
+*/
+palStatus_t pal_osMutexDelete(palMutexID_t* mutexID);
+
+/*! Create and initialize a Semaphore object
+*
+* @param[in] count: number of available resources
+* @param[out] semaphoreID: holds the created semaphore ID handle - zero value indecates an error.
+*
+* \return PAL_SUCCESS when semaphore created successfully.
+*         PAL_ERR_NO_MEMORY: no memory resource available to create semaphore object.
+*/
+palStatus_t pal_osSemaphoreCreate(uint32_t count, palSemaphoreID_t* semaphoreID);
+
+/*! Wait until a Semaphore token becomes available.
+*
+* @param[in] semaphoreID the handle for the semaphore
+* @param[in] millisec the timeout for the waiting operation if the timeout 
+             expires before the semaphore is released and error will be 
+             returned from the function, PAL_RTOS_WAIT_FOREVER can be used.
+* @param[out] counteresAvailable the number of semaphore available at the call if semaphore is available, if semaphore was not available (timeout/error) zero is returned. 
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and one of the following error codes in case of failure:
+*       PAL_ERR_RTOS_TIMEOUT - semaphore was not available until timeout expired.
+*       PAL_ERR_RTOS_PARAMETER - semaphore id is invalid.
+*/
+palStatus_t pal_osSemaphoreWait(palSemaphoreID_t semaphoreID, uint32_t millisec, int32_t* countersAvailable);
+
+/*! Release a Semaphore token.
+*
+* @param[in] semaphoreID the handle for the semaphore
+*
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and another negative value indicating a specific error code in case of failure
+*/
+palStatus_t pal_osSemaphoreRelease(palSemaphoreID_t semaphoreID);
+
+/*! Delete a Semaphore object
+*
+* @param[inout] semaphoreID: Semaphore handle to delete, in success:(*semaphoreID = NULL).
+*
+* \return PAL_SUCCESS when semaphore deleted successfully.
+*         PAL_ERR_RTOS_RESOURCE - semaphore already released.
+*         PAL_ERR_RTOS_PARAMETER - semaphore id is invalid.
+* \note After this call the semaphore_id is no longer valid and cannot be used.
+*/
+palStatus_t pal_osSemaphoreDelete(palSemaphoreID_t* semaphoreID);
+
+/*! Create and initialize a memory pool.
+*
+* @param[in] blockSize: size of single block in bytes.
+* @param[in] blockCount: maximum number of blocks in memory pool.
+* @param[out] memoryPoolID: holds the created memory pool ID handle - zero value indecates an error.
+*
+* \return PAL_SUCCESS when memory pool created successfully.
+*         PAL_ERR_NO_MEMORY: no memory resource available to create memory pool object.
+*/
+palStatus_t pal_osPoolCreate(uint32_t blockSize, uint32_t blockCount, palMemoryPoolID_t* memoryPoolID);
+
+/*! Allocate a single memory block from a memory pool.
+*
+* @param[in] memoryPoolID the handle for the memory pool
+*
+* \return the function returns a pointer to a single allocated memory from the pool or NULL in case of failure.
+*/
+void* pal_osPoolAlloc(palMemoryPoolID_t memoryPoolID);
+
+/*! Allocate a single memory block from a memory pool and set memory block to zero.
+*
+* @param[in] memoryPoolID the handle for the memory pool
+*
+* \return the function returns a pointer to a single allocated memory from the pool or NULL in case of failure.
+*/
+void* pal_osPoolCAlloc(palMemoryPoolID_t memoryPoolID);
+
+/*! Return an memoryPoolID memory block back to a specific memory pool.
+*
+* @param[in] memoryPoolHandle the handle for the memory pool
+* @param[in] block the block to free
+*
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and another negative value indicating a specific error code in case of failure
+*/
+palStatus_t pal_osPoolFree(palMemoryPoolID_t memoryPoolID, void* block);
+
+/*! Delete a memory pool object.
+*
+* @param[inout] memoryPoolID the handle for the memory pool, in success:(*memoryPoolID = NULL).
+*
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and another negative value indicating a specific error code in case of failure
+*/
+palStatus_t pal_osPoolDestroy(palMemoryPoolID_t* memoryPoolID);
+
+
+/*! Create and initialize a message queue.
+*
+* @param[in] messageQSize: size of the message queue.
+* @param[out] memoryPoolID: holds the created memory pool ID handle - zero value indecates an error.
+*
+* \return PAL_SUCCESS when message queue created successfully.
+*         PAL_ERR_NO_MEMORY: no memory resource available to create message queue object.
+*/
+palStatus_t pal_osMessageQueueCreate(uint32_t messageQSize, palMessageQID_t* messageQID);
+
+/*! Put a Message to a Queue.
+*
+* @param[in] messageQID the handle for the memory pool
+* @param[in] info the data to send
+* @param[in] timeout timeout in milliseconds
+*
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and another negative value indicating a specific error code in case of failure
+*/
+palStatus_t pal_osMessagePut(palMessageQID_t messageQID, uint32_t info, uint32_t timeout);
+
+/*! Get a Message or Wait for a Message from a Queue.
+*
+* @param[in] messageQID the handle for the memory pool
+* @param[in] timeout timeout in milliseconds
+* @param[out] event the data to send
+*
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and one of the following error codes in case of failure:
+* PAL_ERR_RTOS_RESOURCE - in case semaphore was not available but not due to time out.
+* PAL_ERR_RTOS_TIMEOUT -  no message arrived during the timeout period.
+* PAL_ERR_RTOS_RESOURCE -  no message received and there was no timeout
+*/
+palStatus_t pal_osMessageGet(palMessageQID_t messageQID, uint32_t timeout, uint32_t* messageValue);
+
+/*! Delete a message queue object.
+*
+* @param[inout] messageQID the handle for the message queue, in success:(*messageQID = NULL).
+*
+* \return the function returns the status in the form of palStatus_t which will be PAL_SUCCESS(0) in case of success and another negative value indicating a specific error code in case of failure
+*/
+palStatus_t pal_osMessageQueueDestroy(palMessageQID_t* messageQID);
+
+/*! Perform an atomic increment for a signed32 bit value
+*
+* @param[in,out] valuePtr the address of the value to increment
+* @param[int] increment the amount by which to increment
+*
+* \returns the function returns the value of the valuePtr after the increment operation.
+*/
+int32_t pal_osAtomicIncrement(int32_t* valuePtr, int32_t increment);
+
+
+
+
+/*! Printf like function with prefix of function and line.
+*
+* @param[in] function name of the current function
+* @param[in] line line number to be printed
+* @param[in] format print format (just like printf)
+*
+* \returns the function returns the value of the valuePtr after the increment operation.
+*/
+void dbgPrintf( const char* function, uint32_t line, const char * format, ... );
+
+#define PAL_PRINTF( ARGS...) \
+        dbgPrintf(__FUNCTION__,__LINE__, ARGS);
+
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif //_PAL_RTOS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/Services-API/pal_types.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#ifndef _PAL_TYPES_H
+#define _PAL_TYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <stdint.h>
+#include <stdbool.h>
+#include <stddef.h>
+
+#define PAL_SUCCESS 0
+#define NULLPTR 0
+
+typedef int32_t palStatus_t;
+
+
+typedef struct _palBuffer_t
+{
+    uint32_t  maxBufferLength;
+    uint32_t  bufferLength;
+    uint8_t *buffer;
+} palBuffer_t;
+
+typedef struct _palConstBuffer_t
+{
+    const uint32_t  maxBufferLength;
+    const uint32_t  bufferLength;
+    const uint8_t *buffer;
+} palConstBuffer_t;
+
+#ifdef __cplusplus
+}
+#endif
+#endif //_PAL_TYPES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/PAL-Impl/pal_init.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#include "pal.h"
+#include "pal_plat_rtos.h"
+#include "pal_plat_network.h"
+#include "pal_macros.h"
+
+//this variable must be a int32_t for using atomic increment
+static int32_t g_palIntialized = 0;
+
+
+palStatus_t pal_init()
+{
+
+    palStatus_t status = PAL_SUCCESS;
+    int32_t currentInitValue;
+    //  get the return value of g_palIntialized+1 to save it locally
+    currentInitValue = pal_osAtomicIncrement(&g_palIntialized,1);
+    // if increased for the 1st time
+    if (1 == currentInitValue)
+    {
+        DEBUG_PRINT("Init for the 1st time, initializing the modules\r\n");
+        status = pal_plat_RTOSInitialize(NULL);
+        if (PAL_SUCCESS == status)
+        {
+
+            status = pal_plat_socketsInit(NULL);
+            if (PAL_SUCCESS != status)
+            {
+                DEBUG_PRINT("init of network module has failed with status %d\r\n",status);
+            }
+        }
+        else
+        {
+            DEBUG_PRINT("init of RTOS module has failed with status %d\r\n",status);
+        }
+    }
+    // if failed decrees the value of g_palIntialized
+    if (PAL_SUCCESS != status)
+    {
+        pal_plat_socketsTerminate(NULL);
+        pal_plat_RTOSDestroy();
+        pal_osAtomicIncrement(&g_palIntialized, -1);
+    }
+    return status;
+}
+
+
+void pal_destroy()
+{
+    int32_t currentInitValue;
+    // get the current value of g_palIntialized locally
+    currentInitValue = pal_osAtomicIncrement(&g_palIntialized, -1);
+    if (0 == currentInitValue)
+    {
+        DEBUG_PRINT("Destroying modules\r\n");
+        pal_plat_RTOSDestroy();
+        pal_plat_socketsTerminate(NULL);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/Port/Platform-API/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# PAL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/Port/Platform-API/pal_plat_network.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#ifndef _PAL_PLAT_SOCKET_H
+#define _PAL_PLAT_SOCKET_H
+
+#include "pal.h"
+#include "pal_network.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//! PAL network socket API
+//! PAL network sockets configurations options:
+//! define PAL_NET_TCP_AND_TLS_SUPPORT if TCP is supported by the platform and is required.
+//! define PAL_NET_ASYNCHRONOUS_SOCKET_API if asynchronous socket API is supported by the platform. Currently MANDATORY.
+//! define PAL_NET_DNS_SUPPORT if DNS name resolution is supported.
+
+/*! Initialize sockets - must be called before other socket functions (is called from PAL init).
+* @param[in] context Optional context - if not available/applicable use NULL.
+\return The status in the form of palStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_socketsInit(void* context);
+
+/*! Register a network interface for use with PAL sockets - must be called before other socket functions - most APIs will not work before a single interface is added.
+* @param[in] networkInterfaceContext The context of the network interface to be added (OS specific. In mbed OS, this is the NetworkInterface object pointer for the network adapter [note: we assume connect has already been called on this]). - if not available use NULL (may not be required on some OSs).
+* @param[out] interfaceIndex Contains the index assigned to the interface in case it has been assigned successfully. This index can be used when creating a socket to bind the socket to the interface.
+\return The status in the form of palStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_RegisterNetworkInterface(void* networkInterfaceContext, uint32_t* interfaceIndex);
+
+/*! Initialize terminate - can be called when sockets are no longer needed to free socket resources allocated by init.
+* @param[in] context Optional context - if not available use NULL.
+\return The status in the form of palStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_socketsTerminate(void* context);
+
+/*! Get a network socket.
+* @param[in] domain The domain of the created socket (see palSocketDomain_t for supported types).
+* @param[in] type The type of the created socket (see palSocketType_t for supported types).
+* @param[in] nonBlockingSocket If true, the socket is non-blocking (with O_NONBLOCK set).
+* @param[in] interfaceNum The number of the network interface used for this socket (info in interfaces supported via pal_getNumberOfNetInterfaces and pal_getNetInterfaceInfo ), choose PAL_NET_DEFAULT_INTERFACE for default interface.
+* @param[out] socket The socket is returned through this output parameter.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_socket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palSocket_t* socket);
+
+/*! Get options for a given network socket. Only a few options are supported (see palSocketOptionName_t for supported options).
+* @param[in] socket The socket for which to get options.
+* @param[in] optionName The name for which to set the option (see enum PAL_NET_SOCKET_OPTION for supported types).
+* @param[out] optionValue The buffer holding the option value returned by the function.
+* @param[in, out] optionLength The size of the buffer provided for optionValue when calling the function. After the call, it contains the length of data actually written to the optionValue buffer.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_getSocketOptions(palSocket_t socket, palSocketOptionName_t optionName, void* optionValue, palSocketLength_t* optionLength);
+
+/*! Set options for a given network socket. Only a few options are supported (see palSocketOptionName_t for supported options).
+* @param[in] socket The socket for which to get options.
+* @param[in] optionName The name for which to set the option (see enum PAL_NET_SOCKET_OPTION for supported types).
+* @param[in] optionValue The buffer holding the option value to set for the given option.
+* @param[in] optionLength The size of the buffer provided for optionValue.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_setSocketOptions(palSocket_t socket, int optionName, const void* optionValue, palSocketLength_t optionLength);
+
+/*! Bind a given socket to a local address.
+* @param[in] socket The socket to bind.
+* @param[in] myAddress The address to bind to.
+* @param[in] addressLength The length of the address passed in myAddress.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_bind(palSocket_t socket, palSocketAddress_t* myAddress, palSocketLength_t addressLength);
+
+/*! Receive a payload from the given socket.
+* @param[in] socket The socket to receive from [sockets passed to this function should be of type PAL_SOCK_DGRAM (the implementation may support other types as well)].
+* @param[out] buffer The buffer for the payload data.
+* @param[in] length The length of the buffer for the payload data.
+* @param[out] from The address that sent the payload [optional - if not required pass NULL].
+* @param[in, out] fromLength The length of the 'from' address. When completed, this contains the amount of data actually written to the from address [optional - if not required pass NULL].
+* @param[out] bytesReceived The actual amount of payload data received to the buffer.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_receiveFrom(palSocket_t socket, void* buffer, size_t length, palSocketAddress_t* from, palSocketLength_t* fromLength, size_t* bytesReceived);
+
+/*! Send a payload to the given address using the given socket.
+* @param[in] socket The socket to use for sending the payload [sockets passed to this function should be of type PAL_SOCK_DGRAM (the implementation may support other types as well)].
+* @param[in] buffer The buffer for the payload data.
+* @param[in] length The length of the buffer for the payload data.
+* @param[in] to The address to which the payload should be sent.
+* @param[in] toLength The length of the 'to' address.
+* @param[out] bytesSent The actual amount of payload data sent.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_sendTo(palSocket_t socket, const void* buffer, size_t length, const palSocketAddress_t* to, palSocketLength_t toLength, size_t* bytesSent);
+
+/*! Close a network socket. 
+* NOTE: recieves palSocket_t* and not palSocket_t so that it can zero the socket to avoid re-use.
+* @param[in,out] socket Release and zero socket pointed to by given pointer.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_close(palSocket_t* socket);
+
+/*! Get the number of current network interfaces (interfaces that have been registered through).
+* @param[out] numInterfaces The number of interfaces after a successful call.
+\return The status as in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_getNumberOfNetInterfaces(uint32_t* numInterfaces);
+
+/*! Get information regarding the socket at the index/interface number given (this number is returned when registering the socket).
+* @param[in] interfaceNum The number of the interface to get information for.
+* @param[out] interfaceInfo The information for the given interface number.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_getNetInterfaceInfo(uint32_t interfaceNum, palNetInterfaceInfo_t* interfaceInfo);
+
+
+/*! Check if one or more (up to PAL_NET_SOCKET_SELECT_MAX_SOCKETS) sockets has data available for reading/writing/error. The function blocks until data is available for one of the given sockets or the timeout expires.
+To use the function, set the sockets you want to check in the socketsToCheck array and set a timeout. When it returns the socketStatus output inidcates the status of each socket passed in.
+Note: The entry in index x in the socketStatus array corresponds to the socket at index x in the sockets to check array.
+* @param[in] socketsToCheck The array of up to 8 socket handles to check.
+* @param[in] numberOfSockets The number of sockets set in the input socketsToCheck array.
+* @param[in] timeout The time until timeout if no socket activity is detected.
+* @param[out] palSocketStatus Information on each socket in the input array indicating which event was set (none, rx, tx, err). Check for a desired event using macros.
+* @param[out] numberOfSocketsSet The total number of sockets set in all three data sets (tx, rx, err) after a completed function.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_socketMiniSelect(const palSocket_t socketsToCheck[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t numberOfSockets, pal_timeVal_t* timeout,
+                                        uint8_t palSocketStatus[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t * numberOfSocketsSet);
+
+
+#if PAL_NET_TCP_AND_TLS_SUPPORT // functionality below supported only in case TCP is supported.
+
+
+/*! Use a socket to listen to incoming connections. You may also limit the queue of incoming connections.
+* @param[in] socket The socket to listen to [sockets passed to this function should be of type PAL_SOCK_STREAM_SERVER (the implementation may support other types as well)].
+* @param[in] backlog The number of pending connections that can be saved for the socket.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_listen(palSocket_t socket, int backlog);
+
+/*! Accept a connection on the given socket.
+* @param[in] socket The socket on which to accept the connection. The socket needs to be created and bound and listen must have been called on it. [sockets passed to this function should be of type PAL_SOCK_STREAM_SERVER (the implementation may support other types as well)].
+* @param[out] address The source address of the incoming connection.
+* @param[in, out] addressLen The length of the address field on input, the length of the data returned on output.
+* @param[out] acceptedSocket The socket of the accepted connection is returned if the connection is accepted successfully.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_accept(palSocket_t socket, palSocketAddress_t* address, palSocketLength_t* addressLen, palSocket_t* acceptedSocket);
+
+/*! Open a connection from the given socket to the given address.
+* @param[in] socket The socket to use for the connection to the given address [sockets passed to this function should be of type PAL_SOCK_STREAM (the implementation may support other types as well)].
+* @param[in] address The destination address of the connection.
+* @param[in] addressLen The length of the address field.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_connect(palSocket_t socket, const palSocketAddress_t* address, palSocketLength_t addressLen);
+
+/*! Receive data from the given connected socket.
+* @param[in] socket The connected socket on which to receive data [sockets passed to this function should be of type PAL_SOCK_STREAM (the implementation may support other types as well)].
+* @param[out] buf The output buffer for the message data.
+* @param[in] len The length of the input data buffer.
+* @param[out] recievedDataSize The length of the data actually received.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_recv(palSocket_t socket, void* buf, size_t len, size_t* recievedDataSize);
+
+/*! Send a given buffer via the given connected socket.
+* @param[in] socket The connected socket on which to send data [sockets passed to this function should be of type PAL_SOCK_STREAM (the implementation may support other types as well)].
+* @param[in] buf The output buffer for the message data.
+* @param[in] len The length of the input data buffer.
+* @param[out] sentDataSize The length of the data sent.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_send(palSocket_t socket, const void* buf, size_t len, size_t* sentDataSize);
+
+
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+
+
+#if PAL_NET_ASYNCHRONOUS_SOCKET_API
+
+/*! Get an asynchronous network socket.
+* @param[in] domain The domain of the created socket (see enum palSocketDomain_t for supported types).
+* @param[in] type The type of the created socket (see enum palSocketType_t for supported types).
+* @param[in] callback A callback function that is called when any supported event takes place in the given asynchronous socket (see palAsyncSocketCallbackType enum for the supported event types).
+* @param[out] socket This output parameter returns the socket.
+\return The status in the form of PalStatus_t; PAL_SUCCESS (0) in case of success, a specific negative error code in case of failure.
+*/
+palStatus_t pal_plat_asynchronousSocket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palAsyncSocketCallback_t callback, palSocket_t* socket);
+
+#endif
+
+#if PAL_NET_DNS_SUPPORT
+
+/*! This function translates the URL to a palSocketAddress_t that can be used with PAL sockets.
+* @param[in] url The URL to be translated to a palSocketAddress_t.
+* @param[out] address The address for the output of the translation.
+*/
+palStatus_t pal_plat_getAddressInfo(const char* url, palSocketAddress_t* address, palSocketLength_t* addressLength);
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif //_PAL_PLAT_SOCKET_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/Port/Platform-API/pal_plat_rtos.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,374 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#ifndef _PAL_PLAT_RTOS_H
+#define _PAL_PLAT_RTOS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "pal_rtos.h"
+#include "pal_configuration.h"
+#include "pal_types.h"
+
+#if PAL_UNIQUE_THREAD_PRIORITY
+//! This array holds a counter for each thread priority.
+//! If the counter is more than 1, it means that more than 
+//! one thread has the same priority and this is a forbidden
+//! situation. The mapping between the priorities and the index
+//! in the array is as follow:
+//!
+//! PAL_osPriorityIdle --> g_palThreadPriorities[0]
+//! PAL_osPriorityLow --> g_palThreadPriorities[1]
+//! PAL_osPriorityBelowNormal --> g_palThreadPriorities[2]
+//! PAL_osPriorityNormal --> g_palThreadPriorities[3]
+//! PAL_osPriorityAboveNormal --> g_palThreadPriorities[4]
+//! PAL_osPriorityHigh --> g_palThreadPriorities[5]
+//! PAL_osPriorityRealtime --> g_palThreadPriorities[6]
+
+//! An array of PAL thread priorities. The size of the array is defined in the Service API (pal_rtos.h) by "PAL_MAX_NUMBER_OF_THREADS"
+extern uint8_t g_palThreadPriorities[PAL_MAX_NUMBER_OF_THREADS];
+
+#define PRIORYT_INDEX_OFFSET 3
+#endif //PAL_UNIQUE_THREAD_PRIORITY
+
+/*! Initiate a system reboot.
+*/
+void pal_plat_osReboot(void);
+
+/*! Initialize all data structures (semaphores, mutexes, memory pools, message queues) at system initialization.
+*   In case of a failure in any of the initializations, the function returns with an error and stops the rest of the initializations.
+* @param[in] opaqueContext The context passed to the initialization (not required for generic CMSIS, pass NULL in this case).
+* \return PAL_SUCCESS(0) in case of success, PAL_ERR_CREATION_FAILED in case of failure.
+*/
+palStatus_t pal_plat_RTOSInitialize(void* opaqueContext);
+
+/*! De-Initialize thread objects.
+*/
+void pal_plat_RTOSDestroy(void);
+
+/*! Get the RTOS kernel system timer counter.
+*
+* \return The RTOS kernel system timer counter.
+*
+* \note The required tick counter is the OS (platform) kernel system tick counter.
+* \note This counter wraps around very often (for example, once every 42 sec for 100Mhz).
+*/
+uint32_t pal_plat_osKernelSysTick();
+
+/*! Get the RTOS kernel system timer counter.
+*
+* \return The RTOS kernel system timer counter.
+*
+* \note The required tick counter is the OS (platform) kernel system tick counter.
+*/
+uint64_t pal_plat_osKernelSysTick64(void); // optional API - not part of original CMSIS API.
+
+/*! Convert the value from microseconds to kernel sys ticks.
+* This is the same as CMSIS macro osKernelSysTickMicroSec.
+*/
+uint64_t pal_plat_osKernelSysTickMicroSec(uint64_t microseconds);
+
+/*! Convert the value from kernel system ticks to milliseconds.
+*
+* @param[in] sysTicks The number of kernel system ticks to convert into millieseconds.
+*
+* \return The converted value in system ticks.
+*/
+uint64_t pal_plat_osKernelSysMilliSecTick(uint64_t sysTicks);
+
+/*! Get the system tick frequency.
+* \return The system tick frequency.
+*/
+uint64_t pal_plat_osKernelSysTickFrequency(void);
+
+/*! Create and start a thread function.
+*
+* @param[in] function A function pointer to the thread callback function.
+* @param[in] funcArgument An argument for the thread function.
+* @param[in] priority The priority of the thread.
+* @param[in] stackSize The stack size of the thread.
+* @param[in] stackPtr A pointer to the thread's stack.
+* @param[in] store A pointer to thread's local store, can be NULL.
+* @param[out] threadID The created thread ID handle, zero indicates an error.
+*
+* \return The ID of the created thread, in case of error return zero.
+* \note Each thread MUST have a unique priority.
+* \note When the priority of the created thread function is higher than the current running thread, the 
+*       created thread function starts instantly and becomes the new running thread. 
+* \note the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking.
+*/
+palStatus_t pal_plat_osThreadCreate(palThreadFuncPtr function, void* funcArgument, palThreadPriority_t priority, uint32_t stackSize, uint32_t* stackPtr, palThreadLocalStore_t* store, palThreadID_t* threadID);
+
+/*! Terminate and free allocated data for the thread.
+*
+* @param[in] threadID The ID of the thread to stop and terminate.
+*
+* \return palStatus_t; PAL_SUCCESS(0) in case of success, a negative value indicating a specific error code in case of failure.
+*/
+palStatus_t pal_plat_osThreadTerminate(palThreadID_t* threadID);
+
+/*! Get the ID of the current thread.
+* \return The ID of the current thread, in case of error return PAL_MAX_UINT32.
+* \note For a thread with real time priority, the function always returns PAL_MAX_UINT32.
+*/
+palThreadID_t pal_plat_osThreadGetId();
+
+/*! Get the storage of the current thread.
+* \return The storage of the current thread.
+*/
+void* pal_plat_osThreadGetLocalStore();
+
+/*! Wait for a specified period of time in milliseconds.
+*
+* @param[in] milliseconds The number of milliseconds to wait before proceeding.
+*
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, a negative value indicating a specific error code in case of failure.
+*/
+palStatus_t pal_plat_osDelay(uint32_t milliseconds);
+
+/*! Create a timer.
+*
+* @param[in] function A function pointer to the timer callback function.
+* @param[in] funcArgument An argument for the timer callback function.
+* @param[in] timerType The timer type to be created, periodic or oneShot.
+* @param[out] timerID The ID of the created timer, zero value indicates an error.
+*
+* \return PAL_SUCCESS when the timer was created successfully. A specific error in case of failure.
+*         PAL_ERR_NO_MEMORY: no memory resource available to create timer object.
+*
+* \note the timer callback function runs according to the platform resources of stack-size and priority.
+* \note the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking.
+*/
+palStatus_t pal_plat_osTimerCreate(palTimerFuncPtr function, void* funcArgument, palTimerType_t timerType, palTimerID_t* timerID);
+
+/*! Start or restart a timer.
+*
+* @param[in] timerID The handle for the timer to start.
+* @param[in] millisec The time in milliseconds to set the timer to.
+*
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, a negative value indicating a specific error code in case of failure.
+*/
+palStatus_t pal_plat_osTimerStart(palTimerID_t timerID, uint32_t millisec);
+
+/*! Stop a timer.
+*
+* @param[in] timerID The handle for the timer to stop.
+*
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, a negative value indicating a specific error code in case of failure.
+*/
+palStatus_t pal_plat_osTimerStop(palTimerID_t timerID);
+
+/*! Delete the timer object
+*
+* @param[inout] timerID The handle for the timer to delete. In success, *timerID = NULL.
+*
+* \return PAL_SUCCESS when the timer was deleted successfully, PAL_ERR_RTOS_PARAMETER when the timerID is incorrect.
+*/
+palStatus_t pal_plat_osTimerDelete(palTimerID_t* timerID);
+
+/*! Create and initialize a mutex object.
+*
+* @param[out] mutexID The created mutex ID handle, zero value indicates an error.
+*
+* \return PAL_SUCCESS when the mutex was created successfully, a specific error in case of failure.
+*         PAL_ERR_NO_MEMORY: no memory resource available to create mutex object.
+* \note the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking.
+*/
+palStatus_t pal_plat_osMutexCreate(palMutexID_t* mutexID);
+
+/*! Wait until a mutex becomes available.
+*
+* @param[in] mutexID The handle for the mutex.
+* @param[in] millisec The timeout for the waiting operation if the timeout expires before the semaphore is released and an error is returned from the function.
+*
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, one of the following error codes in case of failure:
+*         PAL_ERR_RTOS_RESOURCE - Mutex not available but no timeout set.
+*         PAL_ERR_RTOS_TIMEOUT - Mutex was not available until timeout expired.
+*         PAL_ERR_RTOS_PARAMETER - Mutex ID is invalid.
+*         PAL_ERR_RTOS_ISR - Cannot be called from interrupt service routines.
+*/
+palStatus_t pal_plat_osMutexWait(palMutexID_t mutexID, uint32_t millisec);
+
+/*! Release a mutex that was obtained by osMutexWait.
+*
+* @param[in] mutexID The handle for the mutex.
+*
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, a negative value indicating a specific error code in case of failure.
+*/
+palStatus_t pal_plat_osMutexRelease(palMutexID_t mutexID);
+
+/*!Delete a mutex object.
+*
+* @param[inout] mutexID The ID of the mutex to delete. In success, *mutexID = NULL.
+*
+* \return PAL_SUCCESS when the mutex was deleted successfully, one of the following error codes in case of failure:
+*         PAL_ERR_RTOS_RESOURCE - Mutex already released.
+*         PAL_ERR_RTOS_PARAMETER - Mutex ID is invalid.
+*         PAL_ERR_RTOS_ISR - Cannot be called from interrupt service routines.
+* \note After this call, mutex_id is no longer valid and cannot be used.
+*/
+palStatus_t pal_plat_osMutexDelete(palMutexID_t* mutexID);
+
+/*! Create and initialize a semaphore object.
+*
+* @param[in] count The number of available resources.
+* @param[out] semaphoreID The ID of the created semaphore, zero value indicates an error.
+*
+* \return PAL_SUCCESS when the semaphore was created successfully, a specific error in case of failure.
+*         PAL_ERR_NO_MEMORY: no memory resource available to create semaphore object.
+* \note the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking.
+*/
+palStatus_t pal_plat_osSemaphoreCreate(uint32_t count, palSemaphoreID_t* semaphoreID);
+
+/*! Wait until a semaphore token becomes available.
+*
+* @param[in] semaphoreID The handle for the semaphore.
+* @param[in] millisec The timeout for the waiting operation if the timeout expires before the semaphore is released and an error is returned from the function.
+* @param[out] countersAvailable The number of semaphores available, if semaphores are not available (timeout/error) zero is returned. 
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, one of the following error codes in case of failure:
+*       PAL_ERR_RTOS_TIMEOUT - Semaphore was not available until timeout expired.
+*       PAL_ERR_RTOS_PARAMETER - Semaphore ID is invalid.
+*/
+palStatus_t pal_plat_osSemaphoreWait(palSemaphoreID_t semaphoreID, uint32_t millisec, int32_t* countersAvailable);
+
+/*! Release a semaphore token.
+*
+* @param[in] semaphoreID The handle for the semaphore.
+*
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, a negative value indicating a specific error code in case of failure.
+*/
+palStatus_t pal_plat_osSemaphoreRelease(palSemaphoreID_t semaphoreID);
+
+/*! Delete a semaphore object.
+*
+* @param[inout] semaphoreID: The ID of the semaphore to delete. In success, *semaphoreID = NULL.
+*
+* \return PAL_SUCCESS when the semaphore was deleted successfully, one of the following error codes in case of failure:
+*         PAL_ERR_RTOS_RESOURCE - Semaphore already released.
+*         PAL_ERR_RTOS_PARAMETER - Semaphore ID is invalid.
+* \note After this call, the semaphore_id is no longer valid and cannot be used.
+*/
+palStatus_t pal_plat_osSemaphoreDelete(palSemaphoreID_t* semaphoreID);
+
+/*! Create and initialize a memory pool.
+*
+* @param[in] blockSize The size of a single block in bytes.
+* @param[in] blockCount The maximum number of blocks in the memory pool.
+* @param[out] memoryPoolID The ID of the created memory pool, zero value indicates an error.
+*
+* \return PAL_SUCCESS when the memory pool was created successfully, a specific error in case of failure.
+*         PAL_ERR_NO_MEMORY: no memory resource available to create memory pool object.
+* \note the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking.
+*/
+palStatus_t pal_plat_osPoolCreate(uint32_t blockSize, uint32_t blockCount, palMemoryPoolID_t* memoryPoolID);
+
+/*! Allocate a single memory block from a memory pool.
+*
+* @param[in] memoryPoolID The handle for the memory pool.
+*
+* \return A pointer to a single allocated memory from the pool, NULL in case of failure.
+*/
+void* pal_plat_osPoolAlloc(palMemoryPoolID_t memoryPoolID);
+
+/*! Allocate a single memory block from a memory pool and set memory block to zero.
+*
+* @param[in] memoryPoolID The handle for the memory pool.
+*
+* \return A pointer to a single allocated memory from the pool, NULL in case of failure.
+*/
+void* pal_plat_osPoolCAlloc(palMemoryPoolID_t memoryPoolID);
+
+/*! Return the memoryPoolID of the memory block back to a specific memory pool.
+*
+* @param[in] memoryPoolID The handle for the memory pool.
+* @param[in] block The block to be freed.
+*
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, a negative value indicating a specific error code in case of failure.
+*/
+palStatus_t pal_plat_osPoolFree(palMemoryPoolID_t memoryPoolID, void* block);
+
+/*! Delete a memory pool object.
+*
+* @param[inout] memoryPoolID The handle for the memory pool. In success, *memoryPoolID = NULL.
+*
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, a negative value indicating a specific error code in case of failure.
+*/
+palStatus_t pal_plat_osPoolDestroy(palMemoryPoolID_t* memoryPoolID);
+
+/*! Create and initialize a message queue.
+*
+* @param[in] messageQSize The size of the message queue.
+* @param[out] messageQID The ID of the created message queue, zero value indicates an error.
+*
+* \return PAL_SUCCESS when the message queue was created successfully, a specific error in case of failure.
+*         PAL_ERR_NO_MEMORY: no memory resource available to create message queue object.
+* \note the create function MUST not wait for platform resources and it should return "PAL_ERR_RTOS_RESOURCE", unless the platform API is blocking.
+*/
+palStatus_t pal_plat_osMessageQueueCreate(uint32_t messageQSize, palMessageQID_t* messageQID);
+
+/*! Put a message to a queue.
+*
+* @param[in] messageQID The handle for the message queue.
+* @param[in] info The data to send.
+* @param[in] timeout The timeout in milliseconds.
+*
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, a negative value indicating a specific error code in case of failure.
+*/
+palStatus_t pal_plat_osMessagePut(palMessageQID_t messageQID, uint32_t info, uint32_t timeout);
+
+/*! Get a message or wait for a message from a queue.
+*
+* @param[in] messageQID The handle for the message queue.
+* @param[in] timeout The timeout in milliseconds.
+* @param[out] messageValue The data to send.
+*
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, one of the following error codes in case of failure:
+* PAL_ERR_RTOS_RESOURCE - Semaphore was not available but not due to timeout.
+* PAL_ERR_RTOS_TIMEOUT -  No message arrived during the timeout period.
+* PAL_ERR_RTOS_RESOURCE -  No message received and there was no timeout.
+*/
+palStatus_t pal_plat_osMessageGet(palMessageQID_t messageQID, uint32_t timeout, uint32_t* messageValue);
+
+/*! Delete a message queue object.
+*
+* @param[inout] messageQID The handle for the message queue. In success, *messageQID = NULL.
+*
+* \return The status in the form of palStatus_t; PAL_SUCCESS(0) in case of success, a negative value indicating a specific error code in case of failure.
+*/
+palStatus_t pal_plat_osMessageQueueDestroy(palMessageQID_t* messageQID);
+
+/*! Perform an atomic increment for a signed32 bit value.
+*
+* @param[in,out] valuePtr The address of the value to increment.
+* @param[in] increment The number by which to increment.
+*
+* \returns The value of the valuePtr after the increment operation.
+*/
+int32_t pal_plat_osAtomicIncrement(int32_t* valuePtr, int32_t increment);
+
+#ifdef DEBUG
+#include "stdio.h"
+#define pal_plat_printf(ARGS...) printf(ARGS)
+#define pal_plat_vprintf(FORMAT,LIST) vprintf(FORMAT,LIST)  
+
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif //_PAL_COMMON_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/Port/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,42 @@
+## PAL porting guide
+
+This document describes the process of PAL porting to different operating systems. During the process, you need to work
+with the [**Port**](https://github.com/ARMmbed/mbed-client-pal/tree/master/Source/Port) folder that contains two sub-folders: *[Platform-API](https://github.com/ARMmbed/pal/tree/master/Source/Port/Platform-API)* and *[Reference-Impl](https://github.com/ARMmbed/pal/tree/master/Source/Port/Reference-Impl)*.
+
+### Platform-API
+
+The *[Platform-API](https://github.com/ARMmbed/pal/tree/master/Source/Port/Platform-API)* folder contains the header files declaring the interfaces that MUST be implemented by the platform. The APIs are documented in the header files and the Doxygen documentation with the same content is also available.
+The documentation declares the input/output parameters, return values and the eventual special return values. 
+The header file names are related to the PAL modules they are declaring. For example:  
+    
+  ```
+    pal_plat_rtos.h --> presents the RealTime OS APIs required by the   
+                        services and Must be implemented by platform.
+  ```
+
+<span class="notes">The APIs are called directly from the *Service* implementation layer. Therefore, you MUST NOT change them.</span>
+
+### Reference-Impl
+
+The *[Reference-Impl](https://github.com/ARMmbed/pal/tree/master/Source/Port/Reference-Impl)* folder contains the reference platform implementations in their respective folders. 
+Each OS folder contains a list of folders of the required PAL modules to be implemented by the platform, for example:
+  
+  ```
+    Networking --> contains networking related files.
+  ```
+
+### Porting to a new platform
+
+1. Add a new platform folder to the *[Reference-Impl](https://github.com/ARMmbed/pal/tree/master/Source/Port/Reference-Impl)* folder.  
+2. Add the module folders into the new platform folder.  
+3. Read the relevent API/Module documentation.
+4. Start coding.
+
+#### Essential header files
+
+Here is a list of tips that can help in porting:
+
+* Include the **[pal.h](https://github.com/ARMmbed/pal/blob/master/Source/PAL-Impl/Services-API/pal.h)** file; it includes all the required headers from PAL, such as `pal_errors.h` and `pal_macros.h`.
+* Read the **[pal_errors.h](https://github.com/ARMmbed/pal/blob/master/Source/PAL-Impl/Services-API/pal_errors.h)** file to find out how to map the platform errors to the PAL errors.
+* Read the **[pal_macros.h](https://github.com/ARMmbed/pal/blob/master/Source/PAL-Impl/Services-API/pal_macros.h)** to find helpful PAL macros.
+* Include the **pal_(MODULE).h** file to get the relevant data structures.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/Port/Reference-Impl/.mbedignore	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,3 @@
+Linux/*
+mbedosClassic/*
+FreeRTOS/*
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/Port/Reference-Impl/mbedOS/Networking/pal_plat_network.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,763 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#include "pal.h"
+#include "pal_plat_network.h"
+#include "pal_rtos.h"
+
+#include "mbed.h"
+
+
+#if defined (__CC_ARM) || defined(__IAR_SYSTEMS_ICC__)
+
+
+void palSelectCallbackNull()
+{
+}
+
+#define NULL_FUNCTION palSelectCallbackNull
+
+
+#elif defined (__GNUC__)
+
+#define NULL_FUNCTION NULL
+
+#endif
+
+
+#define PAL_SOCKET_OPTION_ERROR (-1)
+
+static NetworkInterface* s_pal_networkInterfacesSupported[PAL_MAX_SUPORTED_NET_INTEFACES] = { 0 };
+
+static  uint32_t s_pal_numberOFInterfaces = 0;
+
+static  uint32_t s_pal_network_initialized = 0;
+
+static palStatus_t translateErrorToPALError(int errnoValue)
+{
+    palStatus_t status;
+    switch (errnoValue)
+    {
+    case NSAPI_ERROR_NO_MEMORY:
+        status = PAL_ERR_NO_MEMORY;
+        break;
+    case NSAPI_ERROR_PARAMETER:
+        status = PAL_ERR_SOCKET_INVALID_VALUE;
+        break;
+    case NSAPI_ERROR_WOULD_BLOCK:
+        status = PAL_ERR_SOCKET_WOULD_BLOCK;
+        break;
+    case NSAPI_ERROR_DNS_FAILURE:
+        status = PAL_ERR_SOCKET_DNS_ERROR;
+        break;
+    case NSAPI_ERROR_DHCP_FAILURE:
+        status = PAL_ERR_SOCKET_HDCP_ERROR;
+        break;
+    case NSAPI_ERROR_AUTH_FAILURE:
+        status = PAL_ERR_SOCKET_AUTH_ERROR;
+        break;
+    case NSAPI_ERROR_NO_ADDRESS:
+        status = PAL_ERR_SOCKET_INVALID_ADDRESS;
+        break;
+    case NSAPI_ERROR_NO_CONNECTION:
+        status = PAL_ERR_SOCKET_NOT_CONNECTED;
+        break;
+    case NSAPI_ERROR_DEVICE_ERROR:
+        status = PAL_ERR_SOCKET_INPUT_OUTPUT_ERROR;
+        break;
+    case NSAPI_ERROR_UNSUPPORTED:
+        status = PAL_ERR_NOT_SUPPORTED;
+        break;
+
+    default:
+        status = PAL_ERR_SOCKET_GENERIC;
+        break;
+    }
+    return status;
+}
+
+palStatus_t pal_plat_socketsInit(void* context)
+{
+    (void)context; // replace with macro
+    int result = PAL_SUCCESS;
+    if (s_pal_network_initialized == 1)
+    {
+        return PAL_SUCCESS; // already initialized.
+    }
+        
+    s_pal_network_initialized = 1;
+
+    return result;
+}
+
+palStatus_t pal_plat_RegisterNetworkInterface(void* context, uint32_t* interfaceIndex)
+{
+    palStatus_t result = PAL_SUCCESS;
+    uint32_t index = 0;
+    uint32_t found = 0;
+    if (NULL != context) // TODO: nirson01 : not thread safe - do we need to fix his?
+    {
+        for (index = 0; index < s_pal_numberOFInterfaces; index++) // if specific context already registered return exisitng index instead of registering again.
+        {
+            if (s_pal_networkInterfacesSupported[index] == context)
+            {
+                found = 1;
+                if (interfaceIndex != NULL)
+                {
+                    *interfaceIndex = index;
+                }
+            }
+        }
+        if (0 == found)
+        {
+            s_pal_networkInterfacesSupported[s_pal_numberOFInterfaces] = (NetworkInterface*)context;
+            if (interfaceIndex != NULL)
+            {
+                *interfaceIndex = s_pal_numberOFInterfaces;
+            }
+            s_pal_numberOFInterfaces = s_pal_numberOFInterfaces + 1;
+        }
+
+        
+    }
+    else
+    {
+        result = PAL_ERR_INVALID_ARGUMENT;
+    }
+    return result;
+}
+
+palStatus_t pal_plat_socketsTerminate(void* context)
+{
+    (void)context; // replace with macro
+    return PAL_SUCCESS;
+}
+
+static int translateNSAPItoPALSocketOption(int option)
+{
+    int optionVal = PAL_SOCKET_OPTION_ERROR;
+    switch (option)
+    {
+    case PAL_SO_REUSEADDR:
+        optionVal = NSAPI_REUSEADDR;
+        break;
+#if PAL_NET_TCP_AND_TLS_SUPPORT // socket options below supported only if TCP is supported.
+    case PAL_SO_KEEPALIVE:
+        optionVal = NSAPI_KEEPALIVE;
+        break;
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+    case PAL_SO_SNDTIMEO:
+    case PAL_SO_RCVTIMEO:
+    default:
+        optionVal = PAL_SOCKET_OPTION_ERROR;
+    }
+    return optionVal;
+}
+
+
+static palStatus_t palSockAddrToSocketAddress(const palSocketAddress_t* palAddr, int length, SocketAddress& output)
+{
+    palStatus_t result = PAL_SUCCESS;
+    uint16_t port = 0;
+    nsapi_version_t version = NSAPI_IPv4;
+
+    result = pal_getSockAddrPort(palAddr, &port);
+    if (result != PAL_SUCCESS)
+    {
+        return result;
+    }
+    output.set_port(port);
+
+    if (PAL_AF_INET == palAddr->addressType)
+    {
+        palIpV4Addr_t ipV4Addr;
+        version = NSAPI_IPv4;
+        result = pal_getSockAddrIPV4Addr(palAddr, ipV4Addr);
+        if (result == PAL_SUCCESS)
+        {
+            output.set_ip_bytes(&ipV4Addr, version);
+        }
+    }
+    else if (PAL_AF_INET6 == palAddr->addressType)
+    {
+        palIpV6Addr_t ipV6Addr;
+        version = NSAPI_IPv6;
+        result = pal_getSockAddrIPV6Addr(palAddr, ipV6Addr);
+        if (result == PAL_SUCCESS)
+        {
+            output.set_ip_bytes(&ipV6Addr, version);
+        }
+    }
+
+    return result;
+}
+
+static palStatus_t socketAddressToPalSockAddr(SocketAddress& input, palSocketAddress_t* out, palSocketLength_t* length)
+{
+    palStatus_t result = PAL_SUCCESS;
+    int index = 0;
+    if (input.get_ip_version() == NSAPI_IPv4)
+    {
+        palIpV4Addr_t addr;
+        const void* tmp = input.get_ip_bytes();
+        for (index = 0; index < PAL_IPV4_ADDRESS_SIZE; index++)
+        {
+            addr[index] = ((const uint8_t*)tmp)[index];
+        }
+        result = pal_setSockAddrIPV4Addr(out, addr);
+        *length = PAL_IPV4_ADDRESS_SIZE;  // TODO: check
+
+    }
+    else if (input.get_ip_version() == NSAPI_IPv6)
+    {
+        palIpV6Addr_t addr;
+        const void* tmp = input.get_ip_bytes();
+        for (index = 0; index < PAL_IPV6_ADDRESS_SIZE; index++)
+        {
+            addr[index] = ((const uint8_t*)tmp)[index];
+        }
+        result = pal_setSockAddrIPV6Addr(out, addr);
+        *length = PAL_IPV6_ADDRESS_SIZE;  // TODO: check
+    }
+    else 
+    {
+        result = PAL_ERR_SOCKET_INVALID_ADDRESS_FAMILY;
+    }
+    
+    if (result == PAL_SUCCESS)
+    {
+        result = pal_setSockAddrPort(out, input.get_port());
+    }
+    return result;
+}
+
+
+
+
+palStatus_t pal_plat_socket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palSocket_t* socket)
+{
+    int result = PAL_SUCCESS;
+    Socket* socketObj = NULL;
+
+    if (PAL_NET_DEFAULT_INTERFACE == interfaceNum)
+    {
+        interfaceNum = 0;
+    }
+
+    if ((s_pal_numberOFInterfaces > interfaceNum) && (PAL_SOCK_DGRAM == type) && ((PAL_AF_INET == domain) || (PAL_AF_INET6 == domain) || (PAL_AF_UNSPEC == domain)))
+    {
+        socketObj = new UDPSocket(s_pal_networkInterfacesSupported[interfaceNum]);
+    }
+#if PAL_NET_TCP_AND_TLS_SUPPORT // functionality below supported only in case TCP is supported.
+    else if ((s_pal_numberOFInterfaces > interfaceNum) && (PAL_SOCK_STREAM == type) && ((PAL_AF_INET == domain) || (PAL_AF_INET6 == domain) || (PAL_AF_UNSPEC == domain)))
+    {
+        socketObj = new TCPSocket(s_pal_networkInterfacesSupported[interfaceNum]);
+    }
+    else if ((s_pal_numberOFInterfaces > interfaceNum) && (PAL_SOCK_STREAM_SERVER == type) && ((PAL_AF_INET == domain) || (PAL_AF_INET6 == domain) || (PAL_AF_UNSPEC == domain)))
+    {
+        socketObj = new TCPServer(s_pal_networkInterfacesSupported[interfaceNum]);
+    }
+#endif
+    else 
+    {
+        result =  PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    if ((PAL_SUCCESS == result ) && (NULL == socketObj))
+    {
+        result = PAL_ERR_NO_MEMORY;
+    }
+    
+    if (PAL_SUCCESS == result)
+    {
+        if (true == nonBlockingSocket)
+        {
+            socketObj->set_blocking(false);
+        }
+        else
+        {
+            socketObj->set_blocking(true);
+        }
+        *socket = (palSocket_t)socketObj;
+    }
+    return result; // TODO(nirson01) ADD debug print for error propagation(once debug print infrastructure is finalized)
+}
+
+
+palStatus_t pal_plat_getSocketOptions(palSocket_t socket, palSocketOptionName_t optionName, void* optionValue, palSocketLength_t* optionLength)
+{
+    int result = PAL_SUCCESS;
+    unsigned int length = *optionLength;
+    Socket* socketObj = (Socket*)socket;
+
+    int socketOption = translateNSAPItoPALSocketOption(optionName);
+    
+    if (PAL_SOCKET_OPTION_ERROR != socketOption)
+    {
+        result = socketObj->getsockopt(NSAPI_SOCKET, socketOption, optionValue, &length);
+        if (result < 0)
+        {
+            result =  translateErrorToPALError(result);
+        }
+        else 
+        {
+            *optionLength = length;
+        }
+        
+    }
+    else
+    {
+        // in MBED socket timeouts are write only via the API - not supported though socket options.
+        result = PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED;
+    }
+        
+    return result;
+}
+
+
+palStatus_t pal_plat_setSocketOptions(palSocket_t socket, int optionName, const void* optionValue, palSocketLength_t optionLength)
+{
+    int result = PAL_SUCCESS;
+    Socket* socketObj = (Socket*)socket;
+    int socketOption = PAL_SOCKET_OPTION_ERROR;
+    
+    socketOption = translateNSAPItoPALSocketOption(optionName);
+    if (PAL_SOCKET_OPTION_ERROR != socketOption)
+    {
+        result = socketObj->setsockopt(NSAPI_SOCKET, socketOption, optionValue, optionLength);
+        if (result < 0)
+        {
+            result = translateErrorToPALError(result);
+        }
+    }
+    else
+    {
+        if ((PAL_SO_SNDTIMEO == optionName) || (PAL_SO_RCVTIMEO == optionName)) // timeouts in MBED API are not managed though socket options, bun instead via a different funciton call
+        {
+            int timeout = *((int*)optionValue);
+            socketObj->set_timeout(timeout);
+        }
+        else
+        {
+            result = PAL_ERR_SOCKET_OPTION_NOT_SUPPORTED;
+        }
+    }
+
+
+    return result;
+}
+
+
+
+palStatus_t pal_plat_bind(palSocket_t socket, palSocketAddress_t* myAddress, palSocketLength_t addressLength)
+{
+    int result = PAL_SUCCESS;
+    Socket* socketObj = (Socket*)socket;
+    SocketAddress internalAddr;
+
+    result = palSockAddrToSocketAddress(myAddress, addressLength, internalAddr);
+    if (result == 0)
+    {
+        result = socketObj->bind(internalAddr);
+        if (result < 0)
+        {
+            result =  translateErrorToPALError(result);
+        }
+    }
+
+    return result;
+}
+
+
+palStatus_t pal_plat_receiveFrom(palSocket_t socket, void* buffer, size_t length, palSocketAddress_t* from, palSocketLength_t* fromLength, size_t* bytesReceived)
+{
+    int result = PAL_SUCCESS;
+    int status = 0;
+    *bytesReceived = 0;
+    SocketAddress sockAddr;
+    UDPSocket* socketObj;
+
+    socketObj = (UDPSocket*)socket;
+
+    status = socketObj->recvfrom(&sockAddr, buffer, length);
+    if (status < 0)
+    {   
+        result = translateErrorToPALError(status);
+    }
+    else if (status == 0){
+        result = PAL_ERR_SOCKET_CONNECTION_CLOSED;
+    }
+    else // only return address / bytesReceived in case of success
+    {
+        if ((NULL != from) && (NULL != fromLength))
+        {
+            result = socketAddressToPalSockAddr(sockAddr, from, fromLength);
+            
+        }
+        *bytesReceived = status;
+    }
+    
+    return result;
+
+}
+
+palStatus_t pal_plat_sendTo(palSocket_t socket, const void* buffer, size_t length, const palSocketAddress_t* to, palSocketLength_t toLength, size_t* bytesSent)
+{
+    int result = PAL_SUCCESS;
+    int status = 0;
+    SocketAddress sockAddr;
+
+    UDPSocket* socketObj = (UDPSocket*)socket;
+
+    *bytesSent = 0;
+    result = palSockAddrToSocketAddress(to, toLength, sockAddr);
+    if (result == 0)
+    {
+        status = socketObj->sendto(sockAddr, buffer, length);
+        if (status < 0)
+        {
+            result = translateErrorToPALError(status);
+        }
+        else 
+        {
+            *bytesSent = status;
+        }
+    }
+
+    return result;
+}
+
+palStatus_t pal_plat_close(palSocket_t* socket)
+{
+    int result = PAL_SUCCESS;
+    Socket* socketObj = (Socket*)*socket;
+    result = socketObj->close();
+    if (result < 0)
+    {
+        result =  translateErrorToPALError(result);
+    }
+    delete socketObj;
+    *socket = NULL;
+    return result;
+}
+
+palStatus_t pal_plat_getNumberOfNetInterfaces( uint32_t* numInterfaces)
+{
+    *numInterfaces =  s_pal_numberOFInterfaces;
+    return PAL_SUCCESS;
+}
+
+palStatus_t pal_plat_getNetInterfaceInfo(uint32_t interfaceNum, palNetInterfaceInfo_t * interfaceInfo)
+{
+    palStatus_t result = PAL_SUCCESS;
+    const char* address = NULL;
+    SocketAddress addr;
+    if ((interfaceNum >= s_pal_numberOFInterfaces) || (NULL == interfaceInfo))
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+    address = s_pal_networkInterfacesSupported[interfaceNum]->get_ip_address(); // ip address returned is a null terminated string
+    if (NULL != address)
+    {
+        addr.set_ip_address(address);
+        result = socketAddressToPalSockAddr(addr, &interfaceInfo->address, &interfaceInfo->addressSize);
+    }
+    
+
+    return result;
+}
+
+typedef void(*palSelectCallbackFunction_t)();
+
+static palSemaphoreID_t s_palSelectSemaphore = 0;
+static bool s_palSelectSemaphoreInited = false;
+uint32_t s_select_event_happened[PAL_NET_SOCKET_SELECT_MAX_SOCKETS];
+
+// select callbacks definition
+// TODO: nirson01 change to define these using a macro.
+void palSelectCallback0() 
+{ 
+    s_select_event_happened[0]++;
+    pal_osSemaphoreRelease(s_palSelectSemaphore); 
+}
+void palSelectCallback1()
+{
+    s_select_event_happened[1]++;
+    pal_osSemaphoreRelease(s_palSelectSemaphore);
+}
+void palSelectCallback2()
+{
+    s_select_event_happened[2]++;
+    pal_osSemaphoreRelease(s_palSelectSemaphore);
+}
+void palSelectCallback3()
+{
+    s_select_event_happened[3]++;
+    pal_osSemaphoreRelease(s_palSelectSemaphore);
+}
+void palSelectCallback4()
+{
+    s_select_event_happened[4]++;
+    pal_osSemaphoreRelease(s_palSelectSemaphore);
+}
+void palSelectCallback5()
+{
+    s_select_event_happened[5]++;
+    pal_osSemaphoreRelease(s_palSelectSemaphore);
+}
+void palSelectCallback6()
+{
+    s_select_event_happened[6]++;
+    pal_osSemaphoreRelease(s_palSelectSemaphore);
+}
+void palSelectCallback7()
+{
+    s_select_event_happened[7]++;
+    pal_osSemaphoreRelease(s_palSelectSemaphore);
+}
+
+palSelectCallbackFunction_t s_palSelectPalCallbackFunctions[PAL_NET_SOCKET_SELECT_MAX_SOCKETS] = { palSelectCallback0, palSelectCallback1, palSelectCallback2, palSelectCallback3, palSelectCallback4, palSelectCallback5, palSelectCallback6, palSelectCallback7 };
+
+
+palStatus_t pal_plat_socketMiniSelect(const palSocket_t socketsToCheck[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t numberOfSockets, pal_timeVal_t* timeout,
+    uint8_t palSocketStatus[PAL_NET_SOCKET_SELECT_MAX_SOCKETS], uint32_t * numberOfSocketsSet)
+{
+        uint32_t index = 0;
+        int32_t counter = 0;
+        uint32_t timeoutInMiliseconds = 0;
+        palStatus_t result = PAL_SUCCESS;
+
+        if ((NULL == socketsToCheck) || (NULL == numberOfSocketsSet) || (NULL == timeout))
+         {
+             return PAL_ERR_INVALID_ARGUMENT;
+         }
+          
+         timeoutInMiliseconds = (timeout->pal_tv_sec * 1000) + (timeout->pal_tv_usec /1000);
+         *numberOfSocketsSet = 0;
+
+         if (0 == numberOfSockets)
+         {
+             return PAL_SUCCESS;
+         }
+         // create semaphore if not initialized before - if it exists ensure count is 0.
+        
+         if (false == s_palSelectSemaphoreInited)
+         {
+             result = pal_osSemaphoreCreate(0, &s_palSelectSemaphore); // create semaphore to wait until socket event happens (semaphore will be re-used and is only created once, and never freed - if terminate is added free this resoruce if allocaed)
+             if (PAL_SUCCESS != result)
+             {
+                 return result; //single exit ??
+             }
+             s_palSelectSemaphoreInited = true;
+         }
+         else {
+             int32_t counters = 0;
+             result = pal_osSemaphoreWait(s_palSelectSemaphore, 1, &counters); // deplete semaphore count until it is 0.
+             while (result != PAL_ERR_RTOS_TIMEOUT)
+             {
+                 result = pal_osSemaphoreWait(s_palSelectSemaphore, 1, &counters);
+             }
+             if (PAL_ERR_RTOS_TIMEOUT != result ) // make sure count is actually 0
+             {
+                 return result; //single exit ??
+             }
+             
+         }
+         for (uint32_t index = 0; index < numberOfSockets; index++)
+         {
+             s_select_event_happened[index] = 0; 
+             palSocketStatus[index] = 0;
+         }
+         
+         for (index = 0; index < numberOfSockets; index++)
+         {
+             Socket* socketObj = (Socket*)socketsToCheck[index];
+             socketObj->attach(s_palSelectPalCallbackFunctions[index]);
+         }
+
+         result = pal_osSemaphoreWait(s_palSelectSemaphore, timeoutInMiliseconds, &counter);
+         if (result == PAL_SUCCESS)
+         {
+             for (index = 0; index < numberOfSockets; index++)
+             {
+                 if (s_select_event_happened[index] > 0)
+                 {
+                     palSocketStatus[index] |= PAL_NET_SOCKET_SELECT_RX_BIT | PAL_NET_SOCKET_SELECT_TX_BIT | PAL_NET_SOCKET_SELECT_ERR_BIT;
+                     *numberOfSocketsSet = *numberOfSocketsSet +1;
+                 }
+             }
+         }
+         if (result == PAL_ERR_RTOS_TIMEOUT) // to socket callback has been called to free the semaphore -> no socket events happenet untill the timout.
+         {
+             *numberOfSocketsSet = 0; // TODO: add debug prints
+             result = PAL_SUCCESS; // timeout is not actually an error in this case
+         }
+
+         for (index = 0; index < numberOfSockets; index++)
+         {
+             
+             Socket* socketObj = (Socket*)socketsToCheck[index];
+             socketObj->attach(NULL_FUNCTION);
+         }
+         return result ;
+}
+
+#if PAL_NET_TCP_AND_TLS_SUPPORT // functionality below supported only in case TCP is supported.
+
+
+palStatus_t pal_plat_listen(palSocket_t socket, int backlog)
+{
+    int result = PAL_SUCCESS;
+
+    TCPServer* socketObj = (TCPServer*)socket;
+
+
+    result = socketObj->listen(backlog);
+    if (result < 0)
+    {
+        return translateErrorToPALError(result);
+    }
+    return PAL_SUCCESS;
+}
+
+
+palStatus_t pal_plat_accept(palSocket_t socket, palSocketAddress_t * address, palSocketLength_t* addressLen, palSocket_t* acceptedSocket)
+{
+    int result = PAL_SUCCESS;
+    
+    SocketAddress incomingAddr;
+
+    TCPServer* socketObj = (TCPServer*)socket;
+    result = socketObj->accept((TCPSocket*)(*acceptedSocket), &incomingAddr);
+    if (result < 0)
+    {
+        result = translateErrorToPALError(result);
+    }
+    else
+    {
+        result = socketAddressToPalSockAddr(incomingAddr, address, addressLen);
+    }
+    return result;
+}
+
+
+palStatus_t pal_plat_connect(palSocket_t socket, const palSocketAddress_t* address, palSocketLength_t addressLen)
+{
+    int result = PAL_SUCCESS;
+    SocketAddress internalAddr;
+    TCPSocket* socketObj = (TCPSocket*)socket;
+    
+    result = palSockAddrToSocketAddress(address, addressLen,  internalAddr);
+    if (result == PAL_SUCCESS)
+    {
+        result = socketObj->connect(internalAddr);
+        if (result < 0)
+        {
+            result =  translateErrorToPALError(result);
+        }
+    }
+
+    return result;
+}
+
+palStatus_t pal_plat_recv(palSocket_t socket, void *buf, size_t len, size_t* recievedDataSize)
+{
+    int result = PAL_SUCCESS;
+    int status = 0;
+
+    TCPSocket* socketObj = (TCPSocket*)socket;
+
+
+    status = socketObj->recv(buf, len);
+    if (status < 0)
+    {
+        result = translateErrorToPALError(status);
+    }
+    else if (status == 0){
+        return PAL_ERR_SOCKET_CONNECTION_CLOSED;
+    }
+    *recievedDataSize = status;
+    return result;
+}
+
+palStatus_t pal_plat_send(palSocket_t socket, const void *buf, size_t len, size_t* sentDataSize)
+{
+    palStatus_t result = PAL_SUCCESS;
+    int status = 0;
+
+    TCPSocket* socketObj = (TCPSocket*)socket;
+    
+    status = socketObj->send(buf, len);
+    if (status < 0)
+    {
+        result = translateErrorToPALError(status);
+    }
+    else 
+    {
+        *sentDataSize = status;
+    }
+    return result;
+}
+
+#endif //PAL_NET_TCP_AND_TLS_SUPPORT
+
+
+#if PAL_NET_ASYNCHRONOUS_SOCKET_API
+
+
+palStatus_t pal_plat_asynchronousSocket(palSocketDomain_t domain, palSocketType_t type, bool nonBlockingSocket, uint32_t interfaceNum, palAsyncSocketCallback_t callback, palSocket_t* socket)
+{
+    Socket* socketObj = NULL;
+    palStatus_t result = pal_plat_socket(domain,  type,  nonBlockingSocket,  interfaceNum, socket);
+    if (result == PAL_SUCCESS)
+    {
+        socketObj = (Socket*)*socket;
+        socketObj->attach(callback); 
+    }
+
+    return result;
+
+}
+
+#endif
+
+#if PAL_NET_DNS_SUPPORT
+
+palStatus_t pal_plat_getAddressInfo(const char *url, palSocketAddress_t *address, palSocketLength_t* length)
+{
+    palStatus_t result = PAL_SUCCESS;
+
+    SocketAddress translatedAddress; // by default use the fist supported net interface - TODO: do we need to select a different interface?
+    result = s_pal_networkInterfacesSupported[0]->gethostbyname(url, &translatedAddress);
+    if (result == 0)
+    {
+        result = socketAddressToPalSockAddr(translatedAddress, address, length);
+    }
+    else // error happened
+    {
+        result = translateErrorToPALError(result);
+    }
+    return result; 
+}
+
+#endif
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/Port/Reference-Impl/mbedOS/RTOS/pal_plat_rtos.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,975 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "pal_types.h"
+#include "pal_rtos.h"
+#include "pal_plat_rtos.h"
+#include "pal_errors.h"
+#include "stdlib.h"
+#include "string.h"
+
+#include "cmsis_os.h" // Revision:    V1.02
+// These includes try to find declaration of NVIC_SystemReset.
+// Note: At least on A9 the cmsis_nvic.h can not be included without previous
+// board specific includes, so it has to be included only when known to work.
+#if defined (__CORTEX_M0)
+#include "cmsis_nvic.h"
+#include "core_cm0.h"
+#elif defined (__CORTEX_M3)
+#include "cmsis_nvic.h"
+#include "core_cm3.h"
+#elif defined (__CORTEX_M4)
+#include "cmsis_nvic.h"
+#include "core_cm4.h"
+#elif defined (__CORTEX_M7)
+#include "cmsis_nvic.h"
+#include "core_cm7.h"
+#else
+// Declaration of NVIC_SystemReset is not present on core_ca9.h, but in the
+// board specific files. 
+void NVIC_SystemReset(void);
+#endif
+
+#include "critical.h"
+
+#define PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(cmsisCode)\
+    ((int32_t)(cmsisCode + PAL_ERR_RTOS_ERROR_BASE))
+
+//! the size of the memory to allocate was taken from CMSIS header (cmsis_os.h)
+#define PAL_RTOS_MEMORY_POOL_SIZE(blockSize, blockCount)\
+    (sizeof(uint32_t)*(3+((blockSize+3)/4)*(blockCount)))
+
+//! the size of the memory to allocate was taken from CMSIS header (cmsis_os.h)
+#define PAL_RTOS_MESSAGE_Q_SIZE(messageQSize)\
+    (sizeof(uint32_t)*(4 + messageQSize))
+
+
+#ifdef PAL_RTOS_WAIT_FOREVER
+#undef PAL_RTOS_WAIT_FOREVER
+#define PAL_RTOS_WAIT_FOREVER osWaitForever
+#endif //PAL_RTOS_WAIT_FOREVER
+
+//! This definitions should be under #ifdef for different CORTEX-X processors.
+//! The current vaules are for cortex-M these are the sizes of the internal data array in definitions arrays
+#define PAL_TIMER_DATA_SIZE 6
+#define PAL_MUTEX_DATA_SIZE 4
+#define PAL_SEMAPHORE_DATA_SIZE 2
+#define PAL_NUM_OF_THREAD_INSTANCES 1
+#define PAL_TICK_TO_MILLI_FACTOR 1000
+
+typedef struct palThreadFuncWrapper{
+    palTimerFuncPtr         realThreadFunc;
+    void*                   realThreadArgs;
+    uint32_t                threadIndex;
+}palThreadFuncWrapper_t;
+
+//! Thread structure
+typedef struct palThread{
+    palThreadID_t           threadID;
+    bool                    initialized;
+    palThreadLocalStore_t*  threadStore; //! please see pal_rtos.h for documentation
+    palThreadFuncWrapper_t  threadFuncWrapper;
+    osThreadDef_t           osThread;
+} palThread_t;
+
+static palThread_t g_palThreads[PAL_MAX_NUMBER_OF_THREADS] = {0};
+
+//! Timer structure
+typedef struct palTimer{
+    palTimerID_t            timerID;
+    uint32_t                internalTimerData[PAL_TIMER_DATA_SIZE];  ///< pointer to internal data
+    osTimerDef_t            osTimer;
+} palTimer_t;
+
+//! Mutex structure
+typedef struct palMutex{
+    palMutexID_t            mutexID;
+    uint32_t                internalMutexData[PAL_MUTEX_DATA_SIZE];
+    osMutexDef_t            osMutex;
+}palMutex_t;
+
+//! Semaphore structure
+typedef struct palSemaphore{
+    palSemaphoreID_t        semaphoreID;
+    uint32_t                internalSemaphoreData[PAL_SEMAPHORE_DATA_SIZE];
+    osSemaphoreDef_t        osSemaphore;
+}palSemaphore_t;
+
+
+//! Memoey Pool structure
+typedef struct palMemPool{
+    palMemoryPoolID_t       memoryPoolID;
+    osPoolDef_t             osPool;
+}palMemoryPool_t;
+
+//! Message Queue structure
+typedef struct palMessageQ{
+    palMessageQID_t         messageQID;
+    osMessageQDef_t         osMessageQ;
+}palMessageQ_t;
+
+
+inline static void setDefaultThreadValues(palThread_t* thread)
+{
+#if PAL_UNIQUE_THREAD_PRIORITY      
+    g_palThreadPriorities[thread->osThread.tpriority+PRIORYT_INDEX_OFFSET] = false;
+#endif //PAL_UNIQUE_THREAD_PRIORITY     
+    thread->threadStore = NULL;
+    thread->threadFuncWrapper.realThreadArgs = NULL;
+    thread->threadFuncWrapper.realThreadFunc = NULL;
+    thread->threadFuncWrapper.threadIndex = 0;
+    thread->osThread.pthread = NULL;
+    thread->osThread.tpriority = PAL_osPriorityError;
+    thread->osThread.instances = PAL_NUM_OF_THREAD_INSTANCES;
+    thread->osThread.stacksize = 0;
+    thread->osThread.stack_pointer = NULL;
+    //! This line should be last thing to be done in this function.
+    //! in order to prevent double accessing the same index between
+    //! this function and the threadCreate function.
+    thread->initialized = false;
+}
+
+/*! Clean thread data from the global thread data base (g_palThreads). Thread Safe API
+*
+* @param[in] dbPointer: data base pointer.
+* @param[in] index: the index in the data base to be cleaned.
+*/
+static void threadCleanUp(void* dbPointer, uint32_t index)
+{
+    palThread_t* threadsDB = (palThread_t*)dbPointer;
+
+    if (NULL == dbPointer || index >= PAL_MAX_NUMBER_OF_THREADS)
+    {
+        return;
+    }
+
+    setDefaultThreadValues(&threadsDB[index]);
+
+}
+
+/*! Thread wrapper function, this function will be set as the thread function (for every thread)
+*   and it will get as an argument the real data about the thread and call the REAL thread function
+*   with the REAL argument. Once the REAL thread function finished, \ref pal_threadClean() will be called.
+*
+*   @param[in] arg: data structure which contains the real data about the thread.
+*/
+static void threadFunctionWrapper(void const* arg)
+{
+    palThreadFuncWrapper_t* threadWrapper = (palThreadFuncWrapper_t*)arg;
+    if (NULL != threadWrapper)
+    {
+        threadWrapper->realThreadFunc(threadWrapper->realThreadArgs);
+        //! real thread finished to run, now start the cleanup from the data base.
+        threadCleanUp(g_palThreads, threadWrapper->threadIndex);
+    }
+}
+
+
+void pal_plat_osReboot()
+{
+    NVIC_SystemReset();
+}
+
+palStatus_t pal_plat_RTOSInitialize(void* opaqueContext)
+{
+    palStatus_t status = PAL_SUCCESS;
+    static bool palRTOSInitialized = false;
+    if (palRTOSInitialized)
+    {
+        return PAL_SUCCESS;
+    }
+    for (int i = 0; i < PAL_MAX_NUMBER_OF_THREADS; ++i)
+    {
+        g_palThreads[i].initialized = false;
+    }
+
+    if (PAL_SUCCESS == status)
+    {
+        palRTOSInitialized = true;
+    }
+    return status;
+}
+
+void pal_plat_RTOSDestroy(void)
+{
+    for (int i = 0; i < PAL_MAX_NUMBER_OF_THREADS; ++i)
+    {
+        if (true == g_palThreads[i].initialized)
+        {
+            osThreadTerminate((osThreadId)g_palThreads[i].threadID);
+            threadCleanUp(g_palThreads, i);
+        }
+    }
+    return;
+}
+palStatus_t pal_plat_osDelay(uint32_t milliseconds)
+{
+    palStatus_t status;
+    osStatus platStatus = osDelay(milliseconds);
+    if (osEventTimeout == platStatus)
+    {
+        status = PAL_SUCCESS;
+    }
+    else
+    {
+        status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus); //TODO(nirson01): error propagation MACRO??
+    }
+    return status;
+}
+
+uint32_t pal_plat_osKernelSysTick()
+{
+    uint32_t result;
+    result = osKernelSysTick();
+    return result;
+}
+
+uint64_t pal_plat_osKernelSysTickMicroSec(uint64_t microseconds)
+{
+    uint64_t result;
+    result = osKernelSysTickMicroSec(microseconds);
+    return result;
+}
+
+uint64_t pal_plat_osKernelSysMilliSecTick(uint64_t sysTicks)
+{
+    uint64_t millisec = (PAL_TICK_TO_MILLI_FACTOR * sysTicks)/osKernelSysTickFrequency;
+    return millisec;
+}
+
+uint64_t pal_plat_osKernelSysTickFrequency()
+{
+    return osKernelSysTickFrequency;
+}
+
+palStatus_t pal_plat_osThreadCreate(palThreadFuncPtr function, void* funcArgument, palThreadPriority_t priority, uint32_t stackSize, uint32_t* stackPtr, palThreadLocalStore_t* store, palThreadID_t* threadID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    uint32_t firstAvailableThreadIndex = PAL_MAX_NUMBER_OF_THREADS;
+    uint32_t i;
+
+    if (NULL == threadID || NULL == function || NULL == stackPtr || 0 == stackSize || priority > PAL_osPriorityRealtime)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    for (i = 0; i < PAL_MAX_NUMBER_OF_THREADS; ++i)
+    {
+        if (!g_palThreads[i].initialized)
+        {
+            firstAvailableThreadIndex = i;
+            break;
+        }
+    }
+
+    if (firstAvailableThreadIndex >= PAL_MAX_NUMBER_OF_THREADS)
+    {
+        status = PAL_ERR_RTOS_RESOURCE;
+    }
+
+    if (PAL_SUCCESS == status)
+    {
+        g_palThreads[firstAvailableThreadIndex].threadStore = store;
+        g_palThreads[firstAvailableThreadIndex].threadFuncWrapper.realThreadArgs = funcArgument;
+        g_palThreads[firstAvailableThreadIndex].threadFuncWrapper.realThreadFunc = function;
+        g_palThreads[firstAvailableThreadIndex].threadFuncWrapper.threadIndex = firstAvailableThreadIndex;
+        g_palThreads[firstAvailableThreadIndex].osThread.pthread = threadFunctionWrapper;
+        g_palThreads[firstAvailableThreadIndex].osThread.tpriority = priority;
+        g_palThreads[firstAvailableThreadIndex].osThread.instances = PAL_NUM_OF_THREAD_INSTANCES;
+        g_palThreads[firstAvailableThreadIndex].osThread.stacksize = stackSize;
+        g_palThreads[firstAvailableThreadIndex].osThread.stack_pointer = stackPtr;
+        g_palThreads[firstAvailableThreadIndex].initialized = true;
+#if PAL_UNIQUE_THREAD_PRIORITY      
+        g_palThreadPriorities[priority+PRIORYT_INDEX_OFFSET] = true;
+#endif //PAL_UNIQUE_THREAD_PRIORITY     
+
+        status = PAL_SUCCESS;
+    
+        g_palThreads[firstAvailableThreadIndex].threadID = (uintptr_t)osThreadCreate(&g_palThreads[firstAvailableThreadIndex].osThread, &g_palThreads[firstAvailableThreadIndex].threadFuncWrapper);
+        *threadID = g_palThreads[firstAvailableThreadIndex].threadID;
+        
+        if(NULLPTR == *threadID)
+        {
+            //! in case of error in the thread creation, reset the data of the given index in the threads array.
+            threadCleanUp(g_palThreads, firstAvailableThreadIndex);
+        
+            status = PAL_ERR_GENERIC_FAILURE;
+        }
+    }
+    return status;
+}
+
+palThreadID_t pal_plat_osThreadGetId()
+{
+    palThreadID_t result;
+    result = (uintptr_t)osThreadGetId();
+    return result;
+}
+
+palStatus_t pal_plat_osThreadTerminate(palThreadID_t* threadID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osStatus platStatus = osOK;
+
+    if (NULL == threadID || NULLPTR == *threadID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    for (int i = 0; i < PAL_MAX_NUMBER_OF_THREADS; ++i)
+    {
+        if (g_palThreads[i].initialized && (*threadID == g_palThreads[i].threadID))
+        {
+            platStatus = osThreadTerminate((osThreadId)(*threadID));
+            if (osOK == platStatus)
+            {
+                threadCleanUp(g_palThreads, i);
+                *threadID = NULLPTR;
+            }
+            else
+            {
+                status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus);
+            }
+            break;
+
+        }
+        else if (!g_palThreads[i].initialized && (*threadID == g_palThreads[i].threadID))
+        {
+            *threadID = NULLPTR;
+        }
+    }
+    return status;
+}
+
+void* pal_plat_osThreadGetLocalStore()
+{
+    void* localStore = NULL;
+    palThreadID_t id = (uintptr_t)osThreadGetId();
+
+    for(int i = 0; i < PAL_MAX_NUMBER_OF_THREADS; ++i)
+    {
+        if(g_palThreads[i].initialized && (id == g_palThreads[i].threadID))
+        {
+            localStore = g_palThreads[i].threadStore;
+            break;
+        }
+    }
+    return localStore;
+}
+
+
+palStatus_t pal_plat_osTimerCreate(palTimerFuncPtr function, void* funcArgument, palTimerType_t timerType, palTimerID_t* timerID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    palTimer_t* timer = NULL;
+
+    if(NULL == timerID || NULL == function)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    timer = (palTimer_t*)malloc(sizeof(palTimer_t));
+    if (NULL == timer)
+    {
+        status = PAL_ERR_NO_MEMORY;
+    }
+
+    if (PAL_SUCCESS == status)
+    {
+        timer->osTimer.ptimer = function;
+        timer->osTimer.timer = timer->internalTimerData;
+        memset(timer->osTimer.timer, 0, sizeof(uint32_t)*PAL_TIMER_DATA_SIZE);
+    
+        timer->timerID = (uintptr_t)osTimerCreate(&timer->osTimer, timerType, funcArgument);
+        if (NULLPTR == timer->timerID)
+        {
+            free(timer);
+            timer = NULL;
+            status = PAL_ERR_GENERIC_FAILURE;
+        }
+        else
+        {
+            *timerID = (palTimerID_t)timer;
+        }
+    }
+    return status;
+}
+
+palStatus_t pal_plat_osTimerStart(palTimerID_t timerID, uint32_t millisec)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osStatus platStatus = osOK;
+    palTimer_t* timer = NULL;
+    
+    if (NULLPTR == timerID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    timer = (palTimer_t*)timerID;
+    platStatus = osTimerStart((osTimerId)timer->timerID, millisec);
+    if (osOK == (osStatus)platStatus)
+    {
+        status = PAL_SUCCESS;
+    }
+    else
+    {
+        status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus);
+    }
+
+    return status;
+}
+
+palStatus_t pal_plat_osTimerStop(palTimerID_t timerID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osStatus platStatus = osOK;
+    palTimer_t* timer = NULL;
+    
+    if(NULLPTR == timerID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    timer = (palTimer_t*)timerID;
+    platStatus = osTimerStop((osTimerId)timer->timerID);
+    if (osOK == platStatus)
+    {
+        status = PAL_SUCCESS;
+    }
+    else
+    {
+        status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus);
+    }
+
+    return status;  
+}
+
+palStatus_t pal_plat_osTimerDelete(palTimerID_t* timerID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osStatus platStatus = osOK;
+    palTimer_t* timer = NULL;
+    
+    if(NULL == timerID || NULLPTR == *timerID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    timer = (palTimer_t*)*timerID;
+    platStatus = osTimerDelete((osTimerId)timer->timerID);
+    if (osOK == platStatus)
+    {
+        free(timer);
+        *timerID = NULLPTR;
+        status = PAL_SUCCESS;
+    }
+    else
+    {
+        status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus);
+    }
+
+    return status;
+}
+
+
+palStatus_t pal_plat_osMutexCreate(palMutexID_t* mutexID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    palMutex_t* mutex = NULL;
+    if(NULL == mutexID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    mutex = (palMutex_t*)malloc(sizeof(palMutex_t));
+    if (NULL == mutex)
+    {
+        status = PAL_ERR_NO_MEMORY;
+    }
+
+    if (PAL_SUCCESS == status)
+    {
+        mutex->osMutex.mutex = mutex->internalMutexData;
+        memset(mutex->osMutex.mutex, 0, sizeof(uint32_t)*PAL_MUTEX_DATA_SIZE);
+    
+        mutex->mutexID = (uintptr_t)osMutexCreate(&mutex->osMutex);
+        if (NULLPTR == mutex->mutexID)
+        {
+            free(mutex);
+            mutex = NULL;
+            status = PAL_ERR_GENERIC_FAILURE;
+        }
+        else
+        {
+            *mutexID = (palMutexID_t)mutex;
+        }
+    }
+    return status;
+}
+
+
+palStatus_t pal_plat_osMutexWait(palMutexID_t mutexID, uint32_t millisec)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osStatus platStatus = osOK;
+    palMutex_t* mutex = NULL;
+    
+    if(NULLPTR == mutexID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    mutex = (palMutex_t*)mutexID;
+    platStatus = osMutexWait((osMutexId)mutex->mutexID, millisec);
+    if (osOK == platStatus)
+    {
+        status = PAL_SUCCESS;
+    }
+    else
+    {
+        status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus);
+    }
+
+    return status;
+}
+
+
+palStatus_t pal_plat_osMutexRelease(palMutexID_t mutexID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osStatus platStatus = osOK;
+    palMutex_t* mutex = NULL;
+    
+    if(NULLPTR == mutexID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    mutex = (palMutex_t*)mutexID;
+    platStatus = osMutexRelease((osMutexId)mutex->mutexID);
+    if (osOK == platStatus)
+    {
+        status = PAL_SUCCESS;
+    }
+    else
+    {
+        status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus);
+    }
+
+    return status;
+}
+
+palStatus_t pal_plat_osMutexDelete(palMutexID_t* mutexID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osStatus platStatus = osOK;
+    palMutex_t* mutex = NULL;
+    
+    if(NULL == mutexID || NULLPTR == *mutexID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    mutex = (palMutex_t*)*mutexID;
+    platStatus = osMutexDelete((osMutexId)mutex->mutexID);
+    if (osOK == platStatus)
+    {
+        free(mutex);
+        *mutexID = NULLPTR;
+        status = PAL_SUCCESS;
+    }
+    else
+    {
+        status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus);
+    }
+
+    return status;
+}
+
+palStatus_t pal_plat_osSemaphoreCreate(uint32_t count, palSemaphoreID_t* semaphoreID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    palSemaphore_t* semaphore = NULL;
+    if(NULL == semaphoreID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    semaphore = (palSemaphore_t*)malloc(sizeof(palSemaphore_t));
+    if (NULL == semaphore)
+    {
+        status = PAL_ERR_NO_MEMORY;
+    }
+
+    if(PAL_SUCCESS == status)
+    {
+        semaphore->osSemaphore.semaphore = semaphore->internalSemaphoreData;
+        memset(semaphore->osSemaphore.semaphore, 0, sizeof(uint32_t)*PAL_SEMAPHORE_DATA_SIZE);
+    
+        semaphore->semaphoreID = (uintptr_t)osSemaphoreCreate(&semaphore->osSemaphore, count);
+        if (NULLPTR == semaphore->semaphoreID)
+        {
+            free(semaphore);
+            semaphore = NULL;
+            status = PAL_ERR_GENERIC_FAILURE;
+        }
+        else
+        {
+            *semaphoreID = (palSemaphoreID_t)semaphore;
+        }
+    }
+    return status;  
+}
+
+palStatus_t pal_plat_osSemaphoreWait(palSemaphoreID_t semaphoreID, uint32_t millisec, int32_t* countersAvailable)
+{
+    palStatus_t status = PAL_SUCCESS;
+    palSemaphore_t* semaphore = NULL;
+    if(NULLPTR == semaphoreID || NULL == countersAvailable)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }   
+
+    semaphore = (palSemaphore_t*)semaphoreID;
+    *countersAvailable = osSemaphoreWait((osSemaphoreId)semaphore->semaphoreID, millisec);
+    if (0 == *countersAvailable)
+    {
+        status = PAL_ERR_RTOS_TIMEOUT;
+    }
+    else if (*countersAvailable < 0)
+    {
+        *countersAvailable = 0;
+        status = PAL_ERR_RTOS_PARAMETER;
+    }
+    return status;
+}
+
+palStatus_t pal_plat_osSemaphoreRelease(palSemaphoreID_t semaphoreID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osStatus platStatus = osOK;
+    palSemaphore_t* semaphore = NULL;
+    
+    if(NULLPTR == semaphoreID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    semaphore = (palSemaphore_t*)semaphoreID;
+    platStatus = osSemaphoreRelease((osSemaphoreId)semaphore->semaphoreID);
+    if (osOK == platStatus)
+    {
+        status = PAL_SUCCESS;
+    }
+    else
+    {
+        status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus);
+    }
+
+    return status;
+}
+
+palStatus_t pal_plat_osSemaphoreDelete(palSemaphoreID_t* semaphoreID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osStatus platStatus = osOK;
+    palSemaphore_t* semaphore = NULL;
+    
+    if(NULL == semaphoreID || NULLPTR == *semaphoreID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    semaphore = (palSemaphore_t*)*semaphoreID;
+    platStatus = osSemaphoreDelete((osSemaphoreId)semaphore->semaphoreID);
+    if (osOK == platStatus)
+    {
+        free(semaphore);
+        *semaphoreID = NULLPTR;
+        status = PAL_SUCCESS;
+    }
+    else
+    {
+        status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus);
+    }
+
+    return status;  
+}
+
+palStatus_t pal_plat_osPoolCreate(uint32_t blockSize, uint32_t blockCount, palMemoryPoolID_t* memoryPoolID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    palMemoryPool_t* memoryPool = NULL;
+    if(NULL == memoryPoolID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    //! allocate the memory pool structure
+    memoryPool = (palMemoryPool_t*)malloc(sizeof(palMemoryPool_t));
+    if (NULL == memoryPool)
+    {
+        status = PAL_ERR_NO_MEMORY;
+    }
+
+    if(PAL_SUCCESS == status)
+    {
+        //! allocate the actual memory allocation for the memory pool blocks, the size of the memory 
+        //! to allocate was taken from CMSIS header (cmsis_os.h)
+        memoryPool->osPool.pool = (uint32_t*)malloc(PAL_RTOS_MEMORY_POOL_SIZE(blockSize, blockCount));
+        if (NULL == memoryPool->osPool.pool)
+        {
+            free(memoryPool);
+            *memoryPoolID = NULLPTR;
+            status = PAL_ERR_NO_MEMORY;
+        }
+        else
+        {
+            memset(memoryPool->osPool.pool, 0, PAL_RTOS_MEMORY_POOL_SIZE(blockSize, blockCount));
+            memoryPool->osPool.pool_sz = blockCount;    ///< number of items (elements) in the pool
+            memoryPool->osPool.item_sz = blockSize;     ///< size of an item
+        
+            memoryPool->memoryPoolID = (uintptr_t)osPoolCreate(&memoryPool->osPool);
+            if (NULLPTR == memoryPool->memoryPoolID)
+            {
+                free(memoryPool->osPool.pool);
+                free(memoryPool);
+                memoryPool = NULL;
+                status = PAL_ERR_GENERIC_FAILURE;
+            }
+            else
+            {
+                *memoryPoolID = (palMemoryPoolID_t)memoryPool;
+            }
+        }
+    }
+    return status;      
+}
+
+void* pal_plat_osPoolAlloc(palMemoryPoolID_t memoryPoolID)
+{
+    void* result = NULL;
+    palMemoryPool_t* memoryPool = NULL;
+    
+    if(NULLPTR == memoryPoolID)
+    {
+        return NULL;
+    }
+
+    memoryPool = (palMemoryPool_t*)memoryPoolID;
+    result = osPoolAlloc((osPoolId)memoryPool->memoryPoolID);
+
+    return result;
+}
+
+void* pal_plat_osPoolCAlloc(palMemoryPoolID_t memoryPoolID)
+{
+    void* result = NULL;
+    palMemoryPool_t* memoryPool = NULL;
+    
+    if(NULLPTR == memoryPoolID)
+    {
+        return NULL;
+    }
+
+    memoryPool = (palMemoryPool_t*)memoryPoolID;
+    result = osPoolCAlloc((osPoolId)memoryPool->memoryPoolID);
+
+    return result;  
+}
+
+palStatus_t pal_plat_osPoolFree(palMemoryPoolID_t memoryPoolID, void* block)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osStatus platStatus = osOK;
+    palMemoryPool_t* memoryPool = NULL;
+    
+    if(NULLPTR == memoryPoolID || NULL == block)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    memoryPool = (palMemoryPool_t*)memoryPoolID;
+    platStatus = osPoolFree((osPoolId)memoryPool->memoryPoolID, block);
+    if (osOK == platStatus)
+    {
+        status = PAL_SUCCESS;
+    }
+    else
+    {
+        status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus);
+    }
+
+    return status;  
+}
+
+palStatus_t pal_plat_osPoolDestroy(palMemoryPoolID_t* memoryPoolID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    palMemoryPool_t* memoryPool = NULL;
+    
+    if(NULL == memoryPoolID || NULLPTR == *memoryPoolID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }   
+
+    memoryPool = (palMemoryPool_t*)*memoryPoolID;
+    free(memoryPool->osPool.pool);
+    free(memoryPool);
+    *memoryPoolID = NULLPTR;
+    return status;
+}
+
+palStatus_t pal_plat_osMessageQueueCreate(uint32_t messageQSize, palMessageQID_t* messageQID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    palMessageQ_t* messageQ = NULL;
+    if(NULL == messageQID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    //! allocate the message queue structure
+    messageQ = (palMessageQ_t*)malloc(sizeof(palMessageQ_t));
+    if (NULL == messageQ)
+    {
+        status = PAL_ERR_NO_MEMORY;
+    }
+
+    if (PAL_SUCCESS == status)
+    {
+        //! allocate the actual memory allocation for the message queue blocks, the size of the memory 
+        //! to allocate was taken from CMSIS header (cmsis_os.h)
+        messageQ->osMessageQ.pool = (uint32_t*)malloc(PAL_RTOS_MESSAGE_Q_SIZE(messageQSize));
+        if (NULL == messageQ->osMessageQ.pool)
+        {
+            free(messageQ);
+            messageQ = NULL;
+            status = PAL_ERR_NO_MEMORY;
+        }
+        else
+        {
+            memset(messageQ->osMessageQ.pool, 0, PAL_RTOS_MESSAGE_Q_SIZE(messageQSize));
+            messageQ->osMessageQ.queue_sz = messageQSize;   ///< number of items (elements) in the queue
+        
+            messageQ->messageQID = (uintptr_t)osMessageCreate(&(messageQ->osMessageQ), NULL);
+            if (NULLPTR == messageQ->messageQID)
+            {
+                free(messageQ->osMessageQ.pool);
+                free(messageQ);
+                messageQ = NULL;
+                status = PAL_ERR_GENERIC_FAILURE;
+            }
+            else
+            {
+                *messageQID = (palMessageQID_t)messageQ;
+            }
+        }
+    }
+    return status;      
+}
+
+palStatus_t pal_plat_osMessagePut(palMessageQID_t messageQID, uint32_t info, uint32_t timeout)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osStatus platStatus = osOK;
+    palMessageQ_t* messageQ = NULL;
+    
+    if(NULLPTR == messageQID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    messageQ = (palMessageQ_t*)messageQID;
+    platStatus = osMessagePut((osMessageQId)messageQ->messageQID, info, timeout);
+    if (osOK == platStatus)
+    {
+        status = PAL_SUCCESS;
+    }
+    else
+    {
+        status = PAL_RTOS_TRANSLATE_CMSIS_ERROR_CODE(platStatus);
+    }
+
+    return status;  
+}
+
+palStatus_t pal_plat_osMessageGet(palMessageQID_t messageQID, uint32_t timeout, uint32_t* messageValue)
+{
+    palStatus_t status = PAL_SUCCESS;
+    osEvent event;
+    palMessageQ_t* messageQ = NULL;
+
+    if (NULLPTR == messageQID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }
+
+    messageQ = (palMessageQ_t*)messageQID;
+    event = osMessageGet((osMessageQId)messageQ->messageQID, timeout);
+    
+    if ((messageValue != NULL) && (osEventMessage == event.status))
+    {
+        *messageValue = event.value.v;
+        status = PAL_SUCCESS;
+    }
+    else if (osEventTimeout == event.status)
+    {
+        status = PAL_ERR_RTOS_TIMEOUT;
+    }
+    else if (osErrorParameter == event.status)
+    {
+        status = PAL_ERR_RTOS_PARAMETER;
+    }
+    else if (osOK == event.status)
+    {
+        status = PAL_ERR_GENERIC_FAILURE;
+    }
+
+    return status;
+}
+
+
+palStatus_t pal_plat_osMessageQueueDestroy(palMessageQID_t* messageQID)
+{
+    palStatus_t status = PAL_SUCCESS;
+    palMessageQ_t* messageQ = NULL;
+    
+    if(NULL == messageQID || NULLPTR == *messageQID)
+    {
+        return PAL_ERR_INVALID_ARGUMENT;
+    }   
+
+    messageQ = (palMessageQ_t*)*messageQID;
+    free(messageQ->osMessageQ.pool);
+    free(messageQ);
+    *messageQID = NULLPTR;
+    return status;
+}
+
+
+int32_t pal_plat_osAtomicIncrement(int32_t* valuePtr, int32_t increment)
+{
+    if (increment >= 0)
+    {
+        return core_util_atomic_incr_u32((uint32_t*)valuePtr, increment);
+    }
+    else
+    {
+        return core_util_atomic_decr_u32((uint32_t*)valuePtr, 0 - increment);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Source/Port/Reference-Impl/mbedOS/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# PAL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/BUILD_TEST_mbedOS.mk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,163 @@
+# -----------------------------------------------------------------------
+# Copyright (c) 2016 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+
+###########################################################################
+# Define test targets based on PROJECT
+# Make files that include this must define PROJECT and TARGET_PLATFORM
+# Requirements
+# - mbed-cli must be installed
+# - MORPHEUS_ROOT must be defined ( e.g. $(PAL_ROOT)/mbed-os)
+#
+# To install mbed-os the following may help:
+#pip uninstall mbed-cli
+#cd mbed-client-pal
+#mbed new
+#mbed deploy
+#mbed config root mbed-client-pal/mbed-os
+#cd mbed-os
+#sudo pip install -r core/requirements.txt
+#sudo pip install -U colorama
+#sudo pip install -U jinja2
+#mbed remove frameworks/unity
+#
+# The following targets may also be defined:
+# $(PROJECT)_ADDITIONAL_SOURCES
+#
+# Clive Bluston
+###########################################################################
+
+# Add targets for platform/project combination
+.PHONY: $(TARGET_PLATFORM)_all $(TARGET_PLATFORM)_clean $(TARGET_PLATFORM)_check
+$(TARGET_PLATFORM)_all: $(TARGET_PLATFORM)_$(PROJECT) 
+$(TARGET_PLATFORM)_clean: $(TARGET_PLATFORM)_clean_$(PROJECT)
+$(TARGET_PLATFORM)_check: $(TARGET_PLATFORM)_check_$(PROJECT)
+
+# Process command line argument of the form INCLUDE=, in order to pass it to the compilation.
+# One or more tests can be selected in this way. If the argument is not present then all tests are selected.
+$(info PAL_TEST=$(PAL_TEST))
+ifeq ($(strip $(PAL_TEST)),)
+  CC_TESTS = PAL_INCLUDE=1
+else
+  CC_TESTS = PAL_INCLUDE=0 $(patsubst %,%=1, $(PAL_TEST))
+endif
+
+# Define variables to be used in the recipes of the targets in the context of the main target.
+# We do this because the original variables will be overridden by other make files by the time the
+# recipe is executed. Note that these variables are recursively inherited by all prerequisites.
+$(TARGET_PLATFORM)_$(PROJECT) : MORPHEUS_CC_TESTS_D := $(patsubst %,-D%, $(CC_TESTS))
+#################################################################################################################
+# Target platform dependant definitions.
+# All os references relative to the root.
+# Can define a MBEDOS_ROOT somewhere else
+
+ifeq ($(strip $(MBEDOS_ROOT)),)
+  MORPHEUS_ROOT := $(PAL_ROOT)/Test
+else
+  MORPHEUS_ROOT := $(strip $(MBEDOS_ROOT))
+endif
+
+
+ifeq ($(DEBUG), 1)
+  $(info "DEBUG")
+  $(TARGET_PLATFORM)_$(PROJECT) : DEBUG_FLAGS += -DDEBUG
+endif
+
+ifeq ($(PAL_IGNORE_UNIQUE_THREAD_PRIORITY), 1)
+  $(info "PAL_IGNORE_UNIQUE_THREAD_PRIORITY")
+  $(TARGET_PLATFORM)_$(PROJECT) : DEBUG_FLAGS += -DPAL_IGNORE_UNIQUE_THREAD_PRIORITY
+endif
+
+ifeq ($(VERBOSE), 1)
+  $(info "VERBOSE")
+  $(TARGET_PLATFORM)_$(PROJECT) : DEBUG_FLAGS += -DVERBOSE
+endif
+
+#################################################################################################################
+
+### UNITY FILES ###
+UNITY_ROOT=$(PAL_ROOT)/Test/Unity
+UNITY_INCLUDE_PATHS=$(UNITY_ROOT)/src $(UNITY_ROOT)/extras/fixture/src
+INCLUDE_PATHS = $(UNITY_INCLUDE_PATHS) $(PAL_ROOT)/Source/PAL-Impl/Services-API $(PAL_ROOT)/Source/Port/Platform-API  $(PAL_ROOT)/Test/Common
+# mbed compile command searches include folders for c files, so it will find unity c files
+# If we were to specify them here, they would be muliply defined.
+UNITY_OBJECTS =
+#UNITY_OBJECTS = $(UNITY_ROOT)/src/unity.c $(UNITY_ROOT)/extras/fixture/src/unity_fixture.c  
+###################
+
+# Add this optional file to the dependencies only if it exists.
+ifneq ("$(wildcard $(PAL_ROOT)/Test/Common/$(PROJECT)_test_utils.c)","")
+# mbed compile command searches include folders for c files, so it will find /Test/Common c files
+# If we were to specify them here, they would be muliply defined.
+#  $(PROJECT)_ADDITIONAL_SOURCES += $(PAL_ROOT)/Test/Common/$(PROJECT)_test_utils.c
+endif
+
+# Fixed list of test files for each test executable.
+TST_SOURCES:=	$(INCLUDE_PATHS) \
+				$(UNITY_OBJECTS) \
+				$(MORPHEUS_ROOT)/mbed-os \
+				$(PAL_ROOT)/Test/$(TYPE)/$(PROJECT)_test.c \
+				$(PAL_ROOT)/Test/$(TYPE)/$(PROJECT)_test_runner.c \
+				$(PAL_ROOT)/Test/$(TYPE)/$(PROJECT)_test_main_$(TARGET_PLATFORM).cpp \
+				$($(PROJECT)_ADDITIONAL_SOURCES)
+ifeq ($(findstring HAS_UPDATE,$(TARGET_CONFIGURATION_DEFINES)),HAS_UPDATE)
+TST_SOURCES:= 	$(TST_SOURCES) \
+				$(MORPHEUS_ROOT)/storage-volume-manager \
+				$(MORPHEUS_ROOT)/storage-abstraction/ \
+				$(MORPHEUS_ROOT)/mbed-client-libservice \
+				$(MORPHEUS_ROOT)/mbed-trace/
+
+endif
+
+# Build executables and listings.
+.PHONY: $(TARGET_PLATFORM)_$(PROJECT) 
+$(TARGET_PLATFORM)_$(PROJECT):  $(MORPHEUS_ROOT) $(OUTOBJ)  $(OUT)/$(PROJECT).bin 
+
+$(TARGET_PLATFORM)_$(PROJECT):  MORPHEUS_ROOT:=$(MORPHEUS_ROOT) 
+
+
+$(OUT)/$(PROJECT).bin:  $(TST_SOURCES) 
+	# Always remove the test runner since PAL_TEST argument change requires that it is recompiled
+	$(RM) $(dir $@)obj/$(PROJECT)_test_runner.o
+	# Ignore some mbed libraries in the subsequent build. (The minus ignores the error if the library does not exist)
+	-$(ECHO) "*" > $(strip $(MORPHEUS_ROOT))/mbed-os/features/frameworks/unity/.mbedignore
+	# Morpheus build.
+	mbed compile -v -N ../$(notdir $(basename $@)) --build $(dir $@)obj -t GCC_ARM -m K64F $(addprefix  --source=, $^) $(MORPHEUS_CC_TESTS_D) $(DEBUG_FLAGS)
+
+# Create a list of files to delete for each target on the first pass of the make
+$(TARGET_PLATFORM)_clean_$(PROJECT) : OUTPUTS:= $(OUT)
+
+
+# Remove files in the list $(PROJECT)_OUTPUTS. 
+# We dynamically create the list variable from the target
+PHONY: $(TARGET_PLATFORM)_clean_$(PROJECT) 
+$(TARGET_PLATFORM)_clean_$(PROJECT): 
+	$(RM) $(OUTPUTS)
+
+# Check that the script exists
+$(PAL_ROOT)/Test/Scripts/perform_test_mbedos.py:
+
+# This makes sure anyone who is dependant on it always executes its recipe
+.FORCE:
+
+# Always run the test.
+$(OUT)/$(PROJECT)_result.txt: $(PAL_ROOT)/Test/Scripts/perform_test_mbedOS.py $(TARGET_PLATFORM)_$(PROJECT) $(OUT)/$(PROJECT).bin .FORCE
+	# Install and run the test. Pass script and binary file. 
+	python   $(word 1, $^) $(word 3, $^)
+
+# check. Install and run tests
+.PHONY: $(TARGET_PLATFORM)check_$(PROJECT)
+$(TARGET_PLATFORM)_check_$(PROJECT):  $(OUT)/$(PROJECT)_result.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Common/pal_rtos_test_utils.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,279 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "pal_rtos_test_utils.h"
+#include "pal_rtos.h"
+#include "unity_fixture.h"
+
+#include "pal.h"
+
+threadsArgument_t threadsArg;
+timerArgument_t timerArgs;
+
+void palThreadFunc1(void const *argument)
+{
+    palThreadID_t threadID = 10;
+    uint32_t* threadStorage = NULL;
+    threadsArgument_t *tmp = (threadsArgument_t*)argument;
+#ifdef MUTEX_UNITY_TEST
+    palStatus_t status = PAL_SUCCESS;
+    TEST_PRINTF("palThreadFunc1::before mutex\n");
+    status = pal_osMutexWait(mutex1, 100);
+    TEST_PRINTF("palThreadFunc1::after mutex: 0x%08x\n", status);
+    TEST_PRINTF("palThreadFunc1::after mutex (expected): 0x%08x\n", PAL_ERR_RTOS_TIMEOUT);
+    TEST_ASSERT_EQUAL(PAL_ERR_RTOS_TIMEOUT, status);
+    return; // for Mutex scenario, this should end here
+#endif //MUTEX_UNITY_TEST
+
+    tmp->arg1 = 10;
+
+    threadID = pal_osThreadGetId();
+    TEST_PRINTF("palThreadFunc1::Thread ID is %d\n", threadID);
+
+    threadStorage = pal_osThreadGetLocalStore();
+    if (threadStorage == g_threadStorage)
+    {
+        TEST_PRINTF("Thread storage updated as expected\n");    
+    }
+    TEST_ASSERT_EQUAL(threadStorage, g_threadStorage);
+#ifdef MUTEX_UNITY_TEST
+    status = pal_osMutexRelease(mutex1);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+#endif //MUTEX_UNITY_TEST
+    TEST_PRINTF("palThreadFunc1::STAAAAM\n");
+
+}
+
+void palThreadFunc2(void const *argument)
+{
+
+    palThreadID_t threadID = 10;
+    threadsArgument_t *tmp = (threadsArgument_t*)argument;
+#ifdef MUTEX_UNITY_TEST
+    palStatus_t status = PAL_SUCCESS;
+    TEST_PRINTF("palThreadFunc2::before mutex\n");
+    status = pal_osMutexWait(mutex2, 300);
+    TEST_PRINTF("palThreadFunc2::after mutex: 0x%08x\n", status);
+    TEST_PRINTF("palThreadFunc2::after mutex (expected): 0x%08x\n", PAL_SUCCESS);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+#endif //MUTEX_UNITY_TEST
+
+    tmp->arg2 = 20;
+
+    threadID = pal_osThreadGetId();
+    TEST_PRINTF("palThreadFunc2::Thread ID is %d\n", threadID);
+#ifdef MUTEX_UNITY_TEST
+    status = pal_osMutexRelease(mutex2);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+#endif //MUTEX_UNITY_TEST
+    TEST_PRINTF("palThreadFunc2::STAAAAM\n");
+}
+
+void palThreadFunc3(void const *argument)
+{
+
+    palThreadID_t threadID = 10;
+    threadsArgument_t *tmp = (threadsArgument_t*)argument;
+
+#ifdef SEMAPHORE_UNITY_TEST
+    palStatus_t status = PAL_SUCCESS;
+    uint32_t semaphoresAvailable = 10;
+    status = pal_osSemaphoreWait(semaphore1, 200, &semaphoresAvailable);
+    
+    if (PAL_SUCCESS == status)
+    {
+        TEST_PRINTF("palThreadFunc3::semaphoresAvailable: %d\n", semaphoresAvailable);
+        TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+    }
+    else if(PAL_ERR_RTOS_TIMEOUT == status)
+    {
+        TEST_PRINTF("palThreadFunc3::semaphoresAvailable: %d\n", semaphoresAvailable);
+        TEST_PRINTF("palThreadFunc3::status: 0x%08x\n", status);
+        TEST_PRINTF("palThreadFunc3::failed to get Semaphore as expected\n", status);
+        TEST_ASSERT_EQUAL(PAL_ERR_RTOS_TIMEOUT, status);
+        return;
+    }
+    pal_osDelay(6000);
+#endif //SEMAPHORE_UNITY_TEST
+    tmp->arg3 = 30;
+    threadID = pal_osThreadGetId();
+    TEST_PRINTF("palThreadFunc3::Thread ID is %d\n", threadID);
+
+#ifdef SEMAPHORE_UNITY_TEST
+    status = pal_osSemaphoreRelease(semaphore1);
+    TEST_PRINTF("palThreadFunc3::pal_osSemaphoreRelease res: 0x%08x\n", status);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+#endif //SEMAPHORE_UNITY_TEST
+    TEST_PRINTF("palThreadFunc3::STAAAAM\n");
+}
+
+void palThreadFunc4(void const *argument)
+{
+    palThreadID_t threadID = 10;
+    threadsArgument_t *tmp = (threadsArgument_t*)argument;
+#ifdef MUTEX_UNITY_TEST
+    palStatus_t status = PAL_SUCCESS;
+    TEST_PRINTF("palThreadFunc4::before mutex\n");
+    status = pal_osMutexWait(mutex1, 200);
+    TEST_PRINTF("palThreadFunc4::after mutex: 0x%08x\n", status);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+    pal_osDelay(3500);  //wait 3.5 seconds to make sure that the next thread arrive to this point
+#endif //MUTEX_UNITY_TEST
+
+
+    tmp->arg4 = 40;
+
+    threadID = pal_osThreadGetId();
+    TEST_PRINTF("Thread ID is %d\n", threadID);
+
+
+
+#ifdef MUTEX_UNITY_TEST
+    status = pal_osMutexRelease(mutex1);
+    TEST_PRINTF("palThreadFunc4::after release mutex: 0x%08x\n", status);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+#endif //MUTEX_UNITY_TEST
+    TEST_PRINTF("palThreadFunc4::STAAAAM\n");
+}
+
+void palThreadFunc5(void const *argument)
+{
+    palThreadID_t threadID = 10;
+    threadsArgument_t *tmp = (threadsArgument_t*)argument;
+#ifdef MUTEX_UNITY_TEST
+    palStatus_t status = PAL_SUCCESS;
+    TEST_PRINTF("palThreadFunc5::before mutex\n");
+    status = pal_osMutexWait(mutex1, 4500);
+    TEST_PRINTF("palThreadFunc5::after mutex: 0x%08x\n", status);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+#endif //MUTEX_UNITY_TEST
+    tmp->arg5 = 50;
+
+    threadID = pal_osThreadGetId();
+    TEST_PRINTF("Thread ID is %d\n", threadID);
+#ifdef MUTEX_UNITY_TEST
+    status = pal_osMutexRelease(mutex1);
+    TEST_PRINTF("palThreadFunc5::after release mutex: 0x%08x\n", status);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+#endif //MUTEX_UNITY_TEST
+    TEST_PRINTF("palThreadFunc5::STAAAAM\n");
+}
+
+void palThreadFunc6(void const *argument)
+{
+    palThreadID_t threadID = 10;
+    threadsArgument_t *tmp = (threadsArgument_t*)argument;
+#ifdef SEMAPHORE_UNITY_TEST
+    palStatus_t status = PAL_SUCCESS;
+    uint32_t semaphoresAvailable = 10;
+    status = pal_osSemaphoreWait(123456, 200, &semaphoresAvailable);  //MUST fail, since there is no semaphore with ID=3
+    TEST_PRINTF("palThreadFunc6::semaphoresAvailable: %d\n", semaphoresAvailable);
+    TEST_ASSERT_EQUAL(PAL_ERR_RTOS_PARAMETER, status);
+    return;
+#endif //SEMAPHORE_UNITY_TEST
+    tmp->arg6 = 60;
+
+    threadID = pal_osThreadGetId();
+    TEST_PRINTF("Thread ID is %d\n", threadID);
+#ifdef SEMAPHORE_UNITY_TEST
+    status = pal_osSemaphoreRelease(123456);
+    TEST_PRINTF("palThreadFunc6::pal_osSemaphoreRelease res: 0x%08x\n", status);
+    TEST_ASSERT_EQUAL(PAL_ERR_RTOS_PARAMETER, status);
+#endif //SEMAPHORE_UNITY_TEST
+    TEST_PRINTF("palThreadFunc6::STAAAAM\n");
+}
+
+
+void palTimerFunc1(void const *argument)
+{
+    g_timerArgs.ticksInFunc1 = pal_osKernelSysTick();
+    TEST_PRINTF("ticks in palTimerFunc1: 0 - %d\n", g_timerArgs.ticksInFunc1);
+    TEST_PRINTF("Once Timer function was called\n");
+}
+
+void palTimerFunc2(void const *argument)
+{
+    g_timerArgs.ticksInFunc2 = pal_osKernelSysTick();
+    TEST_PRINTF("ticks in palTimerFunc2: 0 - %d\n", g_timerArgs.ticksInFunc2);
+    TEST_PRINTF("Periodic Timer function was called\n");    
+}
+
+void palThreadFuncCustom1(void const *argument)
+{
+    TEST_PRINTF("palThreadFuncCustom1 was called\n");
+}
+
+void palThreadFuncCustom2(void const *argument)
+{
+    TEST_PRINTF("palThreadFuncCustom2 was called\n");
+}
+
+void palThreadFuncCustom3(void const *argument)
+{
+    TEST_PRINTF("palThreadFuncCustom3 was called\n");
+}
+
+void palThreadFuncCustom4(void const *argument)
+{
+    TEST_PRINTF("palThreadFuncCustom4 was called\n");
+}
+
+void palRunThreads()
+{
+  palStatus_t status = PAL_SUCCESS;
+  palThreadID_t threadID1 = NULLPTR;
+  palThreadID_t threadID2 = NULLPTR;
+  palThreadID_t threadID3 = NULLPTR;
+  palThreadID_t threadID4 = NULLPTR;
+  palThreadID_t threadID5 = NULLPTR;
+  palThreadID_t threadID6 = NULLPTR;
+
+  uint32_t *stack1 = malloc(THREAD_STACK_SIZE);
+  uint32_t *stack2 = malloc(THREAD_STACK_SIZE);
+  uint32_t *stack3 = malloc(THREAD_STACK_SIZE);
+  uint32_t *stack4 = malloc(THREAD_STACK_SIZE);
+  uint32_t *stack5 = malloc(THREAD_STACK_SIZE);
+  uint32_t *stack6 = malloc(THREAD_STACK_SIZE);
+
+  status = pal_init(NULL);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osThreadCreate(palThreadFunc1, &g_threadsArg, PAL_osPriorityIdle, THREAD_STACK_SIZE, stack1, (palThreadLocalStore_t *)g_threadStorage, &threadID1);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status); 
+
+  status = pal_osThreadCreate(palThreadFunc2, &g_threadsArg, PAL_osPriorityLow, THREAD_STACK_SIZE, stack2, NULL, &threadID2);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status); 
+
+  status = pal_osThreadCreate(palThreadFunc3, &g_threadsArg, PAL_osPriorityNormal, THREAD_STACK_SIZE, stack3, NULL, &threadID3);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status); 
+
+  status = pal_osThreadCreate(palThreadFunc4, &g_threadsArg, PAL_osPriorityBelowNormal, THREAD_STACK_SIZE, stack4, NULL, &threadID4);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status); 
+
+  status = pal_osThreadCreate(palThreadFunc5, &g_threadsArg, PAL_osPriorityAboveNormal, THREAD_STACK_SIZE, stack5, NULL, &threadID5);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status); 
+
+  status = pal_osThreadCreate(palThreadFunc6, &g_threadsArg, PAL_osPriorityHigh, THREAD_STACK_SIZE, stack6, NULL, &threadID6);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status); 
+
+  
+  free(stack1);
+  free(stack2);
+  free(stack3);
+  free(stack4);
+  free(stack5);
+  free(stack6);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Common/pal_rtos_test_utils.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef _PAL_RTOS_TEST_UTILS_H
+#define _PAL_RTOS_TEST_UTILS_H
+
+#include "pal_types.h"
+#include "pal_rtos.h"
+#include "pal_test_utils.h"
+
+#define THREAD_STACK_SIZE 1024*sizeof(uint32_t)
+
+typedef struct threadsArgument{
+    uint32_t arg1;
+    uint32_t arg2;
+    uint32_t arg3;
+    uint32_t arg4;
+    uint32_t arg5;
+    uint32_t arg6;
+    uint32_t arg7;
+}threadsArgument_t;
+
+
+extern threadsArgument_t g_threadsArg;
+
+extern uint32_t g_threadStorage[20];
+
+void palThreadFunc1(void const *argument);
+void palThreadFunc2(void const *argument);
+void palThreadFunc3(void const *argument);
+void palThreadFunc4(void const *argument);
+void palThreadFunc5(void const *argument);
+void palThreadFunc6(void const *argument);
+
+
+typedef struct timerArgument{
+    uint32_t ticksBeforeTimer;
+    uint32_t ticksInFunc1;
+    uint32_t ticksInFunc2;
+}timerArgument_t;
+
+extern timerArgument_t g_timerArgs;
+
+void palTimerFunc1(void const *argument);
+void palTimerFunc2(void const *argument);
+
+
+void palThreadFuncCustom1(void const *argument);
+void palThreadFuncCustom2(void const *argument);
+void palThreadFuncCustom3(void const *argument);
+void palThreadFuncCustom4(void const *argument);
+
+
+#define MEMORY_POOL1_BLOCK_SIZE 32
+#define MEMORY_POOL1_BLOCK_COUNT 5
+#define MEMORY_POOL2_BLOCK_SIZE 12
+#define MEMORY_POOL2_BLOCK_COUNT 4
+
+extern palMutexID_t mutex1;
+extern palMutexID_t mutex2;
+
+extern palSemaphoreID_t semaphore1;
+
+#endif //_PAL_RTOS_TEST_UTILS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Common/pal_socket_test_utils.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "pal.h"
+#include "pal_network.h"
+#include "pal_socket_test_utils.h"
+#include "NetworkInterface.h"
+#include "EthernetInterface.h"
+
+#define TEST_PRINTF printf
+
+void* palTestGetNetWorkInterfaceContext()
+{
+    palStatus_t result = PAL_SUCCESS;
+    EthernetInterface* netInterface = new EthernetInterface();
+    if (NULL != netInterface)
+    {
+        TEST_PRINTF("new interface created\r\n");
+        result = netInterface->connect();
+        if (PAL_SUCCESS == result)
+        {
+            TEST_PRINTF("interface registered : OK \r\n");
+        }
+    }
+    return netInterface;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Common/pal_socket_test_utils.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef _PAL_SOCKET_TEST_UTILS_H
+#define _PAL_SOCKET_TEST_UTILS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void* palTestGetNetWorkInterfaceContext();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //_PAL_SOCKET_TEST_UTILS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Common/pal_test_utils.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef TEST_UNITEST_PAL_TEST_UTILS_H_
+#define TEST_UNITEST_PAL_TEST_UTILS_H_
+
+
+#define TEST_PRINTF(ARGS...) PAL_PRINTF(ARGS)
+
+
+#endif /* TEST_UNITEST_PAL_TEST_UTILS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,168 @@
+# PAL Test Guide
+## Environment Setup
+Python 2.7.11
+If you cannot find Python 2.7.11 for your linux you can get it here [Python 2.7.11](https://launchpad.net/~fkrull/+archive/ubuntu/deadsnakes-python2.7)
+Install the needed Python modules on Windows like this:
+```
+python -m pip install tabulate
+python -m pip install pyserial
+python -m pip install -U mbed-ls
+python -m pip install shell
+python -m pip install pypiwin32
+```
+On Linux you install the same modules like this:
+```
+sudo pip install <module>
+```
+
+##Test Code files
+Each API has three files under Test/Unitest or Test/Conformance:
+
+* **pal_socket_test.c** 	Contains the test code in the form of functions. One function per test.
+* **pal_ socket _test_runner.c** 	Runs the test functions defined above.
+* **pal_ socket _test_main_mbedos.c** 	Main application that runs all the tests. May also have test specific initializations for the given target platform.
+
+Each API can also have a common utilities file under Test/Common
+**pal_socket_test_utils.c/.h**	 Utility functions that can be used in various pal_socket test apps.
+**pal_socket_test.c**
+Contains tests of the form:
+
+```
+#include "pal_socket.h"
+#include "unity.h"
+#include "unity_fixture.h"
+
+TEST(pal_socket, FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue)
+{
+    //This should be true because setUp set this up for us before this test
+    TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
+
+    //This should be true because we can still change our answer
+    Counter = 0x1234;
+    TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
+}
+```
+**pal_ socket _test_runner.c**
+Looks like  this:
+```
+#include "unity.h"
+#include "unity_fixture.h" // pal Socket API tests
+
+TEST_GROUP_RUNNER(pal_socket)
+{
+#if (PAL_INCLUDE || FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode)
+  RUN_TEST_CASE(pal_socket, FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode);
+#endif
+#if (PAL_INCLUDE || FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken)
+  RUN_TEST_CASE(pal_socket, FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken);
+#endif
+#if (PAL_INCLUDE || FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue)
+  RUN_TEST_CASE(pal_socket, FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue);
+#endif
+#if (PAL_INCLUDE || FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain)
+  RUN_TEST_CASE(pal_socket, FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain);
+#endif
+#if (PAL_INCLUDE || FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed)
+  RUN_TEST_CASE(pal_socket, FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed);
+#endif}
+```
+
+
+**pal_ socket _test_main_mbedos.c**
+This can vary a lot from platform to platform and test to test, but will contain lines like the following to run the tests:
+```
+extern "C" int UnityMain(int argc, const char* argv[], void (*runAllTests)(void));
+extern "C" void TEST_pal_socket_GROUP_RUNNER(void);
+
+	// Run a group of tests
+    	UnityMain(0, argv, TEST_pal_socket_GROUP_RUNNER);
+```
+
+ 
+## Test makefile framework
+**makefile** – Master make file. It has an entry for each platform target. Includes all_tests.mk.
+Configuration specific defines are declared as follows and converted to compilation defines on the compilation command line.
+**TARGET_CONFIGURATION_DEFINES:= HAS_RTOS    HAS_FS**
+They can be also be used to as conditionals in the make file as shown in all_tests.mk
+```
+include make_platform.mk 
+
+
+.PHONY: all clean check
+
+#====================================================
+# Platform mbed-os
+TARGET_PLATFORM:=mbedosClassic
+TARGET_CONFIGURATION_DEFINES:=  HAS_RTOS
+all: mbedosClassic_all
+check: mbedosClassic_check
+clean: mbedosClassic_clean 
+include all_tests.mk
+#====================================================
+# Platform morpheus
+TARGET_PLATFORM:=mbedOS
+TARGET_CONFIGURATION_DEFINES:=  HAS_RTOS
+all: mbedOS_all
+check: mbedOS_check
+clean: mbedOS_clean 
+include all_tests.mk
+#====================================================
+```
+**make_platform.mk** – Detects the make platform (Windows, Linux) and sets various definitions accordingly. These are referred to by other make files in order to keep them platform independent.
+**all_tests.mk** – contains an entry for each test application to be built. Included by all target platform make files. It looks like this:
+```
+#====================================================
+PROJECT=pal_socket
+TYPE=Unity
+
+$(PROJECT)_ADDITIONAL_ SOURCES:=
+
+include BUILD_TEST.mk
+#====================================================
+ifeq ($(findstring HAS_RTOS,$(TARGET_CONFIGURATION_DEFINES)),HAS_RTOS)
+PROJECT=pal_rtos
+TYPE=Unitest
+
+$(PROJECT)_ADDITIONAL_SOURCES:=Source/PAL-Impl/Modules/RTOS/$(PROJECT).c \
+				Source/PAL-Impl/Modules/RTOS/$(PROJECT)_static_definitions_sample.c \
+				Source/Port/Reference-Impl/mbedOS/pal_plat_rtos.c
+
+
+include BUILD_TEST_$(TARGET_PLATFORM).mk
+endif
+#====================================================
+```
+**BUILD_TEST_BUILD_TEST_mbedOS.mk, BUILD_TEST_FreeRTOS.mk** – Target platform specific make definitions and rules. Defines targets for building the tests. Included for each test that is to be built.
+##Usage:
+###Make all tests for all platforms:
+**make** 
+or make all tests for a specific platform:
+**make mbedOS_all**
+**make FreeRTOS_all**
+
+### To make and run one set of tests:
+**make mbedOS_pal_socket**
+
+### To make and run only one test from a set:
+**make mbedOS_pal_socket** PAL_TEST=”FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode”
+To make a binary that just runs two tests from a set:
+**make  mbedOS_pal_socket PAL_TEST=”FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode  FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken”**
+Note: If you change the argument PAL_TEST, then you will need to force a rebuild with  –B.
+
+### To run all tests:
+**make mbedOS_check**
+### Run a specific test:
+**make mbedOS_check_pal_socket**
+ 
+## Eclipse
+It is possible to use the Build command from eclipse. 
+First set it up to run make as follows. Note that the build directory points to Test:
+
+![ARMGCC_DIR](eclipseBuildDialog.png)
+ 
+You can control which target you build in the next tab by changing all and clean.
+
+![ARMGCC_DIR](eclipseBuildDialog2.png)
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Scripts/mbed.py	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,328 @@
+# -----------------------------------------------------------------------
+# Copyright (c) 2016 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+import os
+import shutil
+from time import sleep, strftime
+import serial
+import re
+import sys
+
+
+class MbedDeviceManager:
+    def __init__(self):
+        try:
+            import mbed_lstools
+        except ImportError, e:
+            print("Error: Can't import 'mbed_lstools' module: %s"% e)
+        mbed = mbed_lstools.create()
+        self.mbed_list = mbed.list_mbeds()
+        for dev in self.mbed_list:
+            dev['Available'] = True
+            # part. structure:{'mount_point': 'D:','serial_port': u'COM3','platform_name': 'LPC1768','Available'=True}
+
+    def dump_all_devices(self):
+        print("dump Devices:")
+        print(self.mbed_list)
+
+
+    def get_device(self, platform_type):
+        found = False
+        index = int(-1)
+        mount_point = None
+        serial_port = None
+        print(platform_type)
+        for idx,dev in enumerate(self.mbed_list):
+            if dev['platform_name'] == platform_type:
+                found = True
+                if dev['platform_name'] == platform_type and dev['Available']:
+                    mount_point = dev['mount_point']
+                    serial_port = dev['serial_port']
+                    print('Detected %s. Mount point %s Serial port %s index %s.'
+                                % (platform_type, mount_point, serial_port, idx))
+                    dev['Available'] = False
+                    return idx, mount_point, serial_port
+        if found:
+            print('Device %s is not available already in use.' %platform_type)
+        else:
+            print('Device %s is not found.' %platform_type)
+        return index, mount_point, serial_port
+
+    def free_device(self, index):
+        dev = self.mbed_list[index]
+        if not dev['Available']:
+            dev['Available'] = True
+            print('Release Device %s : %s .' % (index, dev['platform_name']))
+        else:
+            print('Error: Device %s : %s is already free.' % (index, dev['platform_name']), )
+
+mbed_manager = MbedDeviceManager()
+
+class MBED:
+    def __init__(self,platform_type):
+        self.manager = mbed_manager
+        self.platform_type = platform_type
+        self.mount_point = None
+        self.serial_port = None
+        self.index = -1
+        self.running = False
+
+    def detect(self):
+        self.index, self.mount_point, self.serial_port = self.manager.get_device(self.platform_type)
+        if self.index >= 0:
+            return True
+        else:
+            return False
+
+    def generic_mbed_copy_win(self, source, destination):
+
+
+        from win32com.shell import shell, shellcon
+        import pythoncom
+        from os.path import abspath, join
+        from glob import glob
+
+        for f in glob(join(destination, '*.bin')):
+            os.unlink(f)
+
+        src = shell.SHCreateItemFromParsingName(source, None, shell.IID_IShellItem)
+        dest_dir = shell.SHCreateItemFromParsingName(
+            abspath(destination),
+            None,
+            shell.IID_IShellItem
+        )
+        pfo = pythoncom.CoCreateInstance(
+            shell.CLSID_FileOperation,
+            None,
+            pythoncom.CLSCTX_ALL,
+            shell.IID_IFileOperation
+        )
+        pfo.SetOperationFlags(shellcon.FOF_NO_UI)
+        pfo.CopyItem(src, dest_dir, None, None)
+        pfo.PerformOperations()
+
+        return True
+
+    def install_bin(self,bin_file_name):
+        bin_on_mbed = os.path.join(self.mount_point,os.path.basename(bin_file_name))
+        print('%s Copying %s --> %s' %(strftime('%H:%M:%S'),bin_file_name,bin_on_mbed))
+        if 'win' in sys.platform:
+            self.generic_mbed_copy_win(os.path.abspath(bin_file_name), os.path.abspath(self.mount_point))
+        else:
+            shutil.copyfile(bin_file_name,bin_on_mbed)
+        self.wait_for_file_system()
+        print('%s Bin installation complete' %strftime('%H:%M:%S'))
+
+    def run(self,serial_capture_file_name,baud=9600,read_timeout=10,stop_on_serial_read_timeout=False):
+        if serial_capture_file_name is not None:
+            self.stop_on_serial_read_timeout = stop_on_serial_read_timeout
+            from multiprocessing import Process, Event, Pipe
+            self.event = Event()
+            parent_conn, child_conn = Pipe()
+            print('Start serial capture process')
+            process_args=(self.serial_port,baud,read_timeout,serial_capture_file_name,stop_on_serial_read_timeout,self.event,child_conn)
+            self.capture_process = Process(target=capture_serial,args=process_args)
+            self.capture_process.start()
+            print('Waiting for pipe input from subprocess')
+            self.ip,self.port = parent_conn.recv()
+            if not self.port or not self.ip :
+                return 1
+
+            print('Received IP %s port %s'%(self.ip,self.port))
+        else:
+            print('Running without serial capture')
+            self.ip,self.port = run_no_capture(self.serial_port,baud,read_timeout)
+            print('%s IP %s port %s' % (self.platform_type, self.ip, self.port))
+        self.running = True
+
+    def end_run(self, delete_binaries=True, release_manager=True):
+        print('MBED end_run')
+        if self.running:
+            if not self.stop_on_serial_read_timeout:
+                self.event.set() # the thread does not stop on its own. send stop signal
+            print('MBED end_run waiting for subprocess to terminate')
+            self.capture_process.join() # wait for completion
+            print('MBED end_run subprocess terminated')
+            if delete_binaries:
+                print('MBED end_run deleting binaries')
+                # delete all binaries on MBED
+                filelist = [ f for f in os.listdir(self.mount_point) if f.endswith(".bin") ]
+                for f in filelist:
+                    print('MBED end_run delete %s',f)
+                    os.remove(os.path.join(self.mount_point,f))
+                self.wait_for_file_system()
+                print('MBED end_run binary delete completed')
+            self.running = False
+        if release_manager:
+            self.manager.free_device(self.index)
+
+    def run_and_capture_till_timeout(self,serial_capture_file_name,baud=9600,read_timeout=10,endOfData=None):
+        try:
+            print('[%s run_and_capture_till_timeout] Start' %strftime('%H:%M:%S'))
+            ser = serial.Serial(self.serial_port,baudrate=baud,timeout=read_timeout)
+            if ser == None:
+                print(' serial.Serial returned None..')
+            capture_file = open(serial_capture_file_name,'w')
+            read_size = 1000
+            cont = True
+            print('[%s run_and_capture_till_timeout] Reseting device..' %strftime('%H:%M:%S'))
+            c = reset_mbed(ser)
+            if c == None:
+                cont = False
+            else:
+                capture_file.write(c)
+            print('[%s run_and_capture_till_timeout] capturing to file...' %strftime('%H:%M:%S'))
+            while cont:
+                c = ser.read(read_size)
+                # Look for the end of test data string and terminate if it is found.
+                if endOfData != None:
+                    endPos = c.find(endOfData)
+                # Clip off the termination string and anything afterwards
+                    if endPos != -1:
+                        c = c[:(endPos + len(endOfData))]
+                capture_file.write(c)
+                if endPos != -1:
+                    break
+                if len(c) < read_size:
+                    print('[%s run_and_capture_till_timeout] serial read timeout. Stopping subprocess' %strftime('%H:%M:%S'))
+                    print ("exit last Buffsize " + str(len(c)) + "<32" )
+                    cont = False
+            print('[%s run_and_capture_till_timeout] closing capture file' %strftime('%H:%M:%S'))
+            capture_file.close()
+            print('[%s run_and_capture_till_timeout] closing serial port' %strftime('%H:%M:%S'))
+            ser.flushInput()
+            ser.flushOutput()
+            ser.close()
+            print('[%s run_and_capture_till_timeout] done' %strftime('%H:%M:%S'))
+            return True
+        except serial.SerialException as e:
+            print('[run_and_capture_till_timeout] serial exception',e)
+            return False
+        
+    def wait_for_file_system(self):
+        #sleep(25) #MBED file system takes some 'settling' time after it is wrirtten to
+        sleep(3) #MBED file system takes some 'settling' time after it is wrirtten to
+
+def reset_mbed(ser):
+    for loop in range(5):
+        # reset called after open port
+        # add sleep for port ready (we saw that sometimes read failed...)
+        delay = 5
+        print('[%s reset_mbed] loop=%d , delay=%d' %(strftime('%H:%M:%S'), loop, delay))
+        sleep(delay)
+        try:
+            ser.sendBreak()
+        except Exception:
+            # In linux a termios.error is raised in sendBreak and in
+            # setBreak. The following setBreak() is needed to release
+            # the reset signal on the target mcu.
+            try:
+                ser.setBreak(False)
+            except:
+                pass
+        c = ser.read(1)
+        if len(c) == 1:
+            return c
+    print ("Error reading from serial port" )
+    return None
+
+def is_valid_ip(ip):
+    return re.match(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$",ip)
+
+def capture_serial(port,baud,read_timeout,capture_file_name,stop_on_serial_read_timeout,event,pipe_conn):
+    try:
+        print('[capture_serial subprocess] starting..')
+        ser = serial.Serial(port,baudrate=baud,timeout=read_timeout)
+        capture_file = open(capture_file_name,'w')
+        read_size = 32
+        cont = True
+        print('[capture_serial subprocess] Reseting device..')
+        c = reset_mbed(ser)
+        if c == None:
+           print('[capture_serial subprocess] Reseting device failed')
+
+        if c == None:
+            cont = False
+            print('[capture_serial subprocess] Failed to get IP from device... exiting ')
+            pipe_conn.send([None,None]) # send IP and port
+            pipe_conn.close()
+            capture_file.close()
+            ser.flushInput()
+            ser.flushOutput()
+            ser.close()
+            return 
+        else:
+            # parse the first received string for IP and port
+            ip_str = c.split(':')
+            if is_valid_ip(ip_str[1]) :
+                pipe_conn.send([ip_str[1],ip_str[2]]) # send IP and port
+                print('[capture_serial subprocess] Sending IP to main process %s:%s'%(ip_str[1],ip_str[2]))
+                print('[capture_serial subprocess] capturing to file...')
+            else:
+                print('[capture_serial subprocess] No valid IP address')
+                pipe_conn.send([None,None]) # send IP and port
+                cont = False
+            capture_file.write(c)
+        pipe_conn.close()
+
+        while cont:
+            c = ser.read(read_size)
+            capture_file.write(c)
+            if stop_on_serial_read_timeout:
+                if len(c) < read_size:
+                    print('[capture_serial subprocess] serial read timeout. Stopping subprocess')
+                    cont = False
+            else:
+                if event.is_set():
+                    print('[capture_serial subprocess] event is set. Stopping subprocess')
+                    cont = False
+
+        print('[capture_serial subprocess] closing capture file')
+        capture_file.close()
+        print('[capture_serial subprocess] closing serial port')
+        ser.flushInput()
+        ser.flushOutput()
+        ser.close()
+        print('[capture_serial subprocess] Subprocess exiting')
+    except serial.SerialException as e:
+        print('[capture_serial subprocess] serial exception',e)
+
+def run_no_capture(port,baud,read_timeout):
+    try:
+        ser = serial.Serial(port,baudrate=baud,timeout=read_timeout)
+        ip = None
+        port = None
+        c = reset_mbed(ser)
+        if c:
+            # parse the first received string for IP and port
+            ip_str = c.split(':')
+            if is_valid_ip(ip_str[1]) != None:
+                ip = ip_str[1]
+                port = ip_str[2]
+        ser.flushInput()
+        ser.flushOutput()
+        ser.close()
+        return ip,port
+    except serial.SerialException as e:
+        print e
+
+
+class MBED_DEVICE(MBED):
+    def __init__(self,platform_type):
+        print('MBED Device:' + platform_type)
+        MBED.__init__(self, platform_type)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Scripts/perform_test_mbedOS.py	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,83 @@
+# -----------------------------------------------------------------------
+# Copyright (c) 2016 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+#####################################################################
+# Install and run PAL tests for mbed targets.
+#
+# Arguments: One or more binary files containing tests to execute.
+#
+# Output: <binary file>_result.txt - Textual result summary
+#         <binary file>.xml - Junit result summary
+#  ARM
+#  Clive Bluston
+#####################################################################
+from mbed import MBED
+import os
+import sys
+import unity_to_junit
+from time import sleep
+
+# Check that at least one test is specified on the command line
+if len(sys.argv) < 2:
+	sys.exit()
+else:
+	tests = sys.argv[1:]
+
+# List of textual result files.
+resultFiles = []
+
+# Supported mbed devices. Can add to this list
+deviceList = ["K64F"]
+
+# Loop over attached mbed devices.
+for device in deviceList:
+	mbed = MBED(device)
+	deviceDetected = mbed.detect()
+	if deviceDetected:
+		# Loop over tests
+		for test in tests:
+			mbed.install_bin(test)
+			noSuffix = os.path.splitext(test)[0]
+			intermediateResultsFile = noSuffix+".int"
+			# Remove intermediate file just in case it was left over from a failed run.
+			if os.path.isfile(intermediateResultsFile):
+				os.remove(intermediateResultsFile)
+			resultFile = noSuffix+"_result.txt"
+			# This delay is to allow output that was generated before the reset to be discarded.
+			sleep(30)
+			# Capture test results from the serial port
+			if mbed.run_and_capture_till_timeout(intermediateResultsFile,baud=9600,read_timeout=10,endOfData="***END OF TESTS**"):
+				# Success. Convert results to Junit format and write to xml file.
+				unity_to_junit.unity_to_junit("mbedos_" + os.path.basename(noSuffix), intermediateResultsFile, noSuffix+".xml", resultFile)
+				# Output intermediate results to the console.
+				with open(intermediateResultsFile, 'r') as fin:
+					print fin.read()
+				os.remove(intermediateResultsFile)
+				# Add result file name to list
+				resultFiles.append(resultFile)
+			else:
+				response = raw_input("Connect Serial port. Enter when ready")
+		# Clean up. True parameter closes the device opened by mbed.detect()
+		mbed.end_run(False,True)
+
+
+# Copy result files to standard output
+for file in resultFiles:
+	with open(file, 'r') as fin:
+		print fin.read()
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Scripts/pyinstall.sh	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,26 @@
+# -----------------------------------------------------------------------
+# Copyright (c) 2016 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+#On Windows you install the same modules like this:
+#python -m pip install tabulate
+
+sudo pip  install tabulate
+sudo pip  install pyserial
+sudo pip  install -U mbed-ls
+sudo pip  install shell
+sudo pip  install pypiwin32
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Scripts/unity_to_junit.py	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,172 @@
+# -----------------------------------------------------------------------
+# Copyright (c) 2016 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+import re
+import sys
+from tabulate import tabulate
+
+def extract_tags(logLines):
+
+    # These are the Unity tag names we are going to look for.
+    tagNames = [
+        "UnityTest",
+        "UnityIgnoredTest",
+        "UnityResult",
+    ]
+
+    # All tags will end up here.
+    tags = []
+
+    for tagName in tagNames:
+
+        # Fetch start and end locations for the start and end markers.
+
+        startMatches = re.finditer(re.escape("<***" + tagName + "***>"), logLines)
+        endMatches = re.finditer(re.escape("</***" + tagName + "***>"), logLines)
+
+        startOffsets = [match.end() for match in startMatches]
+        endOffsets = [match.start() - 1 for match in endMatches]
+
+        # If the amount of start and end markers isn't identical, this is an error.
+        if len(startOffsets) != len(endOffsets):
+            raise Exception("For tag '" + tagName + "', start and end tags do not match!")
+
+        # Append all found tags to the tags list.
+        for tagOffsets in zip(startOffsets, endOffsets):
+            tagContent = logLines[tagOffsets[0]: tagOffsets[1] + 1]
+            tags.append((tagOffsets[0], tagName, tagContent))
+
+    # Sort the tags list by the offset.
+    tags.sort(key=lambda tag_: tag_[0])
+
+    # Throw away the offset (once sorted, it is no longer needed).
+    tags = [tag[1:] for tag in tags]
+
+    # At this point we are left with list of tags, each one a pair, consisting of
+    # (group name, test name, status).
+    return tags
+
+def get_test_group_and_name(printableName):
+    match = re.match(r"TEST\((.*), (.*)\)", printableName)
+    if match is not None:
+        return match.group(1), match.group(2)
+    else:
+        raise Exception("Erorr parsing test group and name")
+
+def get_ignored_test_group_and_name(printableName):
+    match = re.match(r"IGNORE_TEST\((.*), (.*)\)", printableName)
+    if match is not None:
+        return match.group(1), match.group(2)
+    else:
+        raise Exception("Erorr parsing test group and name")
+
+def collect_tests(tags):
+
+    tests = []
+
+    # Build the list of tests, with status for each.
+    curTest = ""
+    resultHandled = False
+    for tag in tags:
+
+        tagName = tag[0]
+        tagValue = tag[1]
+
+        if tagName == "UnityTest":
+            curTest = get_test_group_and_name(tagValue)
+            resultHandled = False
+        elif tagName == "UnityResult":
+            if not resultHandled:
+                tests.append((curTest, tagValue))
+                resultHandled = True
+        elif tagName == "UnityIgnoredTest":
+            curTest = get_ignored_test_group_and_name(tagValue)
+            tests.append((curTest, "IGNORE"))
+        else:
+            raise Exception("Unknown tag '" + tagName + "' encountered")
+
+    return tests
+
+def generate_junit_xml_output(packageName, tests, xmlOutFile):
+
+    testsCount = len(tests)
+
+    with open(xmlOutFile, "wt") as f:
+        print >> f, '<testsuite tests="' + str(testsCount) + '">'
+        for test in tests:
+            print >> f, '    <testcase classname="' + packageName + "." + test[0][0] + '" name="' + test[0][1] + '">'
+            if test[1] == "FAIL":
+                print >> f, '        <failure/>'
+            if test[1] == "IGNORE":
+                print >> f, '        <skipped/>'
+            print >> f, '    </testcase>'
+        print >> f, '</testsuite>'
+
+def generate_text_output(packageName, tests, textOutFile):
+
+    testsCount = len(tests)
+
+    failingTests = 0
+    passedTests = 0
+    ignoredTests = 0
+
+    testsTable = []
+    for test in tests:
+        if test[1] == "FAIL":
+            failingTests += 1
+        if test[1] == "PASS":
+            passedTests += 1
+        if test[1] == "IGNORE":
+            ignoredTests += 1
+
+        testsTable.append([test[0][0], test[0][1], test[1]])
+
+    resultsTableHeader = ["TOTAL", "PASS", "FAIL", "IGNORE"]
+    resultsTable = [[str(testsCount), str(passedTests), str(failingTests), str(ignoredTests)]]
+
+    with open(textOutFile, "wt") as f:
+
+        print >> f, "==== " + packageName + " ===="
+        print >> f, tabulate(testsTable)
+        print >> f, tabulate(resultsTable, headers=resultsTableHeader)
+
+        if testsCount == 0 or failingTests > 0:
+            finalStatus = "FAIL"
+        else:
+            finalStatus = "PASS"
+        print >> f
+        print >> f, "Final status: " + finalStatus + "."
+
+def unity_to_junit(packageName, inputFile, xmlOutFile, textOutFile):
+
+    with open(inputFile, "rt") as f:
+        logLines = f.read()
+
+    tags = extract_tags(logLines)
+    tests = collect_tests(tags)
+
+    generate_junit_xml_output(packageName, tests, xmlOutFile)
+    generate_text_output(packageName, tests, textOutFile)
+
+
+if __name__ == "__main__":
+
+    if len(sys.argv) != 5:
+        print "Usage: <package-name> <input-file> <xml-out-file> <text-out-file>"
+        sys.exit(1)
+
+    unity_to_junit(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unitest/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# PAL Test Guide
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unitest/pal_all_test.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "unity.h"
+#include "unity_fixture.h"
+
+/*empty file to supprt make file*/
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unitest/pal_all_test_main_mbedOS.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "mbed.h"
+
+
+extern "C" int UnityMain(int argc, const char* argv[], void (*runAllTests)(void));
+
+extern "C" void TEST_pal_update_GROUP_RUNNER(void);
+extern "C" void TEST_pal_rtos_GROUP_RUNNER(void);
+extern "C" void TEST_pal_socket_GROUP_RUNNER(void);
+
+void TEST_pal_all_GROUPS_RUNNER(void)
+{
+	TEST_pal_rtos_GROUP_RUNNER();
+	TEST_pal_socket_GROUP_RUNNER();
+}
+
+
+int main(int argc, const char * argv[])
+{
+    const char * myargv[] = {"app","-v"};
+
+    printf("Start tests\r\n");
+    fflush(stdout);
+
+    UnityMain(sizeof(myargv)/sizeof(myargv[0]), myargv, TEST_pal_all_GROUPS_RUNNER);
+
+    // This is detected by test runner app, so that it can know when to terminate without waiting for timeout.
+    printf("***END OF TESTS**\n");for(int i=0;i<1000;i++)putchar('x');
+    fflush(stdout);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unitest/pal_all_test_runner.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "unity.h"
+#include "unity_fixture.h"
+
+
+/*empty file to supprt make file*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unitest/pal_rtos_test.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,413 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "pal_rtos.h"
+#include "unity.h"
+#include "unity_fixture.h"
+#include "pal_rtos_test_utils.h"
+#include "pal.h"
+#include "pal_rtos_test_utils.h"
+
+TEST_GROUP(pal_rtos);
+
+//sometimes you may want to get at local data in a module.
+//for example: If you plan to pass by reference, this could be useful
+//however, it should often be avoided
+//extern int Counter;
+uint32_t g_threadStorage[20] = { 0 };
+threadsArgument_t g_threadsArg = {0};
+timerArgument_t g_timerArgs = {0};
+palMutexID_t mutex1 = NULLPTR;
+palMutexID_t mutex2 = NULLPTR;
+palSemaphoreID_t semaphore1 = NULLPTR;
+
+//forward declarations
+void palRunThreads();
+
+
+TEST_SETUP(pal_rtos)
+{
+  //This is run before EACH TEST
+  //Counter = 0x5a5a;
+}
+
+TEST_TEAR_DOWN(pal_rtos)
+{
+}
+
+TEST(pal_rtos, pal_osKernelSysTick_Unity)
+{
+  uint32_t tick1 = 0, tick2 = 0;
+  tick1 = pal_osKernelSysTick();
+  tick2 = pal_osKernelSysTick();
+  
+  TEST_ASSERT_TRUE(tick2 != tick1);
+}
+
+TEST(pal_rtos, pal_osKernelSysTick64_Unity)
+{
+  uint64_t tick1 = 0, tick2 = 0;
+  
+  tick1 = pal_osKernelSysTick64();
+  tick2 = pal_osKernelSysTick64();
+  
+  TEST_ASSERT_TRUE(tick2 > tick1);
+}
+
+TEST(pal_rtos, pal_osKernelSysTickMicroSec_Unity)
+{
+  uint64_t tick = 0;
+  uint64_t microSec = 2000 * 1000;
+
+  tick = pal_osKernelSysTickMicroSec(microSec);
+  TEST_ASSERT_TRUE(0 != tick);
+}
+
+TEST(pal_rtos, pal_osKernelSysMilliSecTick_Unity)
+{
+  uint64_t tick = 0;
+  uint64_t microSec = 2000 * 1000;
+  uint64_t milliseconds = 0;
+  
+  tick = pal_osKernelSysTickMicroSec(microSec);
+  TEST_ASSERT_TRUE(0 != tick);
+  
+  milliseconds = pal_osKernelSysMilliSecTick(tick);
+  TEST_ASSERT_EQUAL(milliseconds, microSec/1000);
+}
+
+
+TEST(pal_rtos, pal_osKernelSysTickFrequency_Unity)
+{
+  uint64_t frequency = 0;
+
+  frequency = pal_osKernelSysTickFrequency();
+  
+  TEST_ASSERT_TRUE(frequency > 0);
+}
+
+TEST(pal_rtos, pal_osDelay_Unity)
+{
+  palStatus_t status = PAL_SUCCESS;
+  uint32_t tick1 , tick2;
+
+  tick1 = pal_osKernelSysTick();
+  status = pal_osDelay(200);
+  tick2 = pal_osKernelSysTick();
+
+  TEST_ASSERT_TRUE(tick2 > tick1);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+}
+
+TEST(pal_rtos, BasicTimeScenario)
+{
+  palStatus_t status = PAL_SUCCESS;
+  uint32_t tick, tick1 , tick2 , index, tickDiff, tickDelta;
+  uint32_t tmp = 0;
+
+  tick1 = pal_osKernelSysTick();
+  for(index = 0 ; index < 2000 ; ++index)
+      ++tmp;
+  tick2 = pal_osKernelSysTick();
+  
+  TEST_ASSERT_TRUE(tick1 != tick2);
+  TEST_ASSERT_TRUE(tick2 > tick1);  // to check that the tick counts are incremantal - be aware of wrap-arounds
+
+  /****************************************/
+  tick1 = pal_osKernelSysTick();
+  status = pal_osDelay(2000);
+  tick2 = pal_osKernelSysTick();
+  
+  TEST_ASSERT_TRUE(tick1 != tick2);
+  TEST_ASSERT_TRUE(tick2 > tick1);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+  
+  tickDiff = tick2 - tick1;
+  tick = pal_osKernelSysTickMicroSec(2000 * 1000);
+  // 10 milliseconds delta
+  tickDelta = pal_osKernelSysTickMicroSec(10 * 1000);
+  TEST_ASSERT_TRUE((tick - tickDelta < tickDiff) && (tickDiff < tick + tickDelta));
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+}
+
+TEST(pal_rtos, TimerUnityTest)
+{ 
+  palStatus_t status = PAL_SUCCESS;
+  palTimerID_t timerID1 = NULLPTR;
+  palTimerID_t timerID2 = NULLPTR;
+  status = pal_init();
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osTimerCreate(palTimerFunc1, NULL, palOsTimerOnce, &timerID1);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);  
+
+  status = pal_osTimerCreate(palTimerFunc2, NULL, palOsTimerPeriodic, &timerID2);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);  
+
+  g_timerArgs.ticksBeforeTimer = pal_osKernelSysTick();
+  status = pal_osTimerStart(timerID1, 1000);
+  TEST_PRINTF("ticks before Timer: 0 - %d\n", g_timerArgs.ticksBeforeTimer);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  g_timerArgs.ticksBeforeTimer = pal_osKernelSysTick();
+  status = pal_osTimerStart(timerID2, 1000);
+  TEST_PRINTF("ticks before Timer: 1 - %d\n", g_timerArgs.ticksBeforeTimer);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osDelay(1500);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osTimerStop(timerID2);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osTimerDelete(&timerID1);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+  TEST_ASSERT_EQUAL(NULL, timerID1);
+
+  status = pal_osTimerDelete(&timerID2);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+  TEST_ASSERT_EQUAL(NULL, timerID2);
+}
+
+TEST(pal_rtos, PrimitivesUnityTest1)
+{
+    palStatus_t status = PAL_SUCCESS;
+    status = pal_init(NULL);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+    status = pal_osMutexCreate(&mutex1);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+    status = pal_osMutexCreate(&mutex2);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+    status = pal_osSemaphoreCreate(1 ,&semaphore1);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+    palRunThreads();
+
+    //! sleep for 10 seconds to let the threads finish their functions
+    status = pal_osDelay(10000);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+    status = pal_osSemaphoreDelete(&semaphore1);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+    TEST_ASSERT_EQUAL(NULL, semaphore1);
+
+    status = pal_osMutexDelete(&mutex1);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+    TEST_ASSERT_EQUAL(NULL, mutex1);
+
+    status = pal_osMutexDelete(&mutex2);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+    TEST_ASSERT_EQUAL(NULL, mutex2);
+
+}
+
+TEST(pal_rtos, PrimitivesUnityTest2)
+{
+  palStatus_t status = PAL_SUCCESS;
+  int32_t tmp = 0;
+  palThreadID_t threadID = NULLPTR;
+  uint32_t stack1; //we have small stack just to pass NON-NULL paramter
+
+//Check Thread parameter validation
+  status = pal_osThreadCreate(NULL, NULL, PAL_osPriorityIdle, 1024, &stack1, NULL, &threadID);
+  TEST_ASSERT_EQUAL(PAL_ERR_INVALID_ARGUMENT, status);
+
+  status = pal_osThreadCreate(palThreadFunc1, NULL, PAL_osPriorityError, 1024, &stack1, NULL, &threadID);
+  TEST_ASSERT_EQUAL(PAL_ERR_INVALID_ARGUMENT, status);
+
+  status = pal_osThreadCreate(palThreadFunc1, NULL, PAL_osPriorityIdle, 0, &stack1, NULL, &threadID);
+  TEST_ASSERT_EQUAL(PAL_ERR_INVALID_ARGUMENT, status);
+
+  status = pal_osThreadCreate(palThreadFunc1, NULL, PAL_osPriorityIdle, 1024, NULL, NULL, &threadID);
+  TEST_ASSERT_EQUAL(PAL_ERR_INVALID_ARGUMENT, status);
+
+  status = pal_osThreadCreate(palThreadFunc1, NULL, PAL_osPriorityIdle, 1024, &stack1, NULL, NULL);
+  TEST_ASSERT_EQUAL(PAL_ERR_INVALID_ARGUMENT, status);
+
+//Check Semaphore parameter validation
+  status = pal_osSemaphoreCreate(1 ,NULL);
+  TEST_ASSERT_EQUAL(PAL_ERR_INVALID_ARGUMENT, status);
+
+  status = pal_osSemaphoreDelete(NULL);
+  TEST_ASSERT_EQUAL(PAL_ERR_INVALID_ARGUMENT, status);
+
+  status = pal_osSemaphoreWait(NULLPTR, 1000, &tmp);
+  TEST_ASSERT_EQUAL(PAL_ERR_INVALID_ARGUMENT, status);
+
+  status = pal_osSemaphoreWait(tmp, 1000, NULL);
+  TEST_ASSERT_EQUAL(PAL_ERR_INVALID_ARGUMENT, status);
+  
+  status = pal_osSemaphoreRelease(NULLPTR);
+  TEST_ASSERT_EQUAL(PAL_ERR_INVALID_ARGUMENT, status);
+}
+
+TEST(pal_rtos, MemoryPoolUnityTest)
+{
+  palStatus_t status = PAL_SUCCESS;
+  palMemoryPoolID_t poolID1 = NULLPTR;
+  palMemoryPoolID_t poolID2 = NULLPTR;
+  uint8_t* ptr1[MEMORY_POOL1_BLOCK_COUNT] = {0};
+  uint8_t* ptr2[MEMORY_POOL2_BLOCK_COUNT] = {0};
+
+  status = pal_init(NULL);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osPoolCreate(MEMORY_POOL1_BLOCK_SIZE, MEMORY_POOL1_BLOCK_COUNT, &poolID1);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osPoolCreate(MEMORY_POOL2_BLOCK_SIZE, MEMORY_POOL2_BLOCK_COUNT, &poolID2);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  for(uint8_t block1 = 0 ; block1 < MEMORY_POOL1_BLOCK_COUNT; ++block1)
+  {
+    ptr1[block1] = pal_osPoolAlloc(poolID1);
+    TEST_ASSERT_NOT_EQUAL(ptr1[block1], NULL);
+  }
+  for(uint8_t block2 = 0 ; block2 < MEMORY_POOL2_BLOCK_COUNT; ++block2)
+  {
+    ptr2[block2] = pal_osPoolCAlloc(poolID2);
+    TEST_ASSERT_NOT_EQUAL(ptr2[block2], NULL);
+  }
+
+  for(uint8_t freeblock1 = 0; freeblock1 < MEMORY_POOL1_BLOCK_COUNT; ++freeblock1)
+  {
+    status = pal_osPoolFree(poolID1, ptr1[freeblock1]);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+  }
+
+  for(uint8_t freeblock2 = 0; freeblock2 < MEMORY_POOL2_BLOCK_COUNT; ++freeblock2)
+  {
+    status = pal_osPoolFree(poolID2, ptr2[freeblock2]);
+    TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+  }
+
+  status = pal_osPoolDestroy(&poolID1);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+  TEST_ASSERT_EQUAL(poolID1, NULL);
+  status = pal_osPoolDestroy(&poolID2);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+  TEST_ASSERT_EQUAL(poolID2, NULL);
+}
+
+
+TEST(pal_rtos, MessageUnityTest)
+{
+  palStatus_t status = PAL_SUCCESS;
+  palMessageQID_t messageQID = NULLPTR;
+  uint32_t infoToSend = 3215;
+  uint32_t infoToGet = 0;
+
+  status = pal_init(NULL);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osMessageQueueCreate(10, &messageQID);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osMessagePut(messageQID, infoToSend, 1500);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osMessageGet(messageQID, 1500, &infoToGet);
+
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+  TEST_ASSERT_EQUAL_UINT32(infoToSend, infoToGet);
+
+  status = pal_osMessageQueueDestroy(&messageQID);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+  TEST_ASSERT_EQUAL(messageQID, NULL);
+}
+
+TEST(pal_rtos, AtomicIncrementUnityTest)
+{
+  int32_t num1 = 0;
+  int32_t increment = 10;
+  int32_t tmp = 0;
+  int32_t original = num1;
+
+  tmp = pal_osAtomicIncrement(&num1, increment);
+
+  
+  TEST_ASSERT_EQUAL(original + increment, tmp);
+  
+}
+
+TEST(pal_rtos, pal_init_test)
+{
+  palStatus_t status = PAL_SUCCESS;
+  
+  status = pal_init();
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_init();
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_init();
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  pal_destroy();
+    
+  pal_destroy();
+    
+  pal_destroy();
+    
+  pal_destroy();
+}
+
+TEST(pal_rtos, CustomizedTest)
+{
+  palStatus_t status = PAL_SUCCESS;
+  palThreadID_t threadID1 = NULLPTR;
+  palThreadID_t threadID2 = NULLPTR;
+  uint32_t *stack1 = (uint32_t*)malloc(sizeof(uint32_t) * 512);
+  uint32_t *stack2 = (uint32_t*)malloc(sizeof(uint32_t) * 512);
+
+  
+  status = pal_osThreadCreate(palThreadFuncCustom1, NULL, PAL_osPriorityAboveNormal, 1024, stack1, NULL, &threadID1);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osThreadCreate(palThreadFuncCustom2, NULL, PAL_osPriorityHigh, 1024, stack2, NULL, &threadID2);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  pal_osDelay(3000);
+
+  status = pal_osThreadTerminate(&threadID1);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osThreadTerminate(&threadID2);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+
+  status = pal_osThreadCreate(palThreadFuncCustom1, NULL, PAL_osPriorityAboveNormal, 1024, stack1, NULL, &threadID1);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osThreadCreate(palThreadFuncCustom2, NULL, PAL_osPriorityHigh, 1024, stack2, NULL, &threadID2);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  pal_osDelay(3000);
+  status = pal_osThreadTerminate(&threadID1);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+
+  status = pal_osThreadTerminate(&threadID2);
+  TEST_ASSERT_EQUAL(PAL_SUCCESS, status);
+  pal_osDelay(500);
+
+  free(stack1);
+  free(stack2);
+  
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unitest/pal_rtos_test_main_mbedOS.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "mbed.h"
+#include "rtos.h"
+
+DigitalOut led1(LED1);
+InterruptIn sw2(SW2);
+uint32_t button_pressed;
+Thread *thread2;
+
+void sw2_press(void)
+{
+    thread2->signal_set(0x1);
+}
+
+void led_thread(void const *argument)
+{
+    while (true) {
+        led1 = !led1;
+        Thread::wait(1000);
+    }
+}
+
+void button_thread(void const *argument)
+{
+    while (true) {
+        Thread::signal_wait(0x1);
+        button_pressed++;
+    }
+}
+
+// Run all the unity tests
+//extern "C" void RunAllTests(void);
+// Include explicitly and not using the h file because we are compiling this file with C++ and the h file does not
+// declare it extern "C"
+extern "C" int UnityMain(int argc, const char* argv[], void (*runAllTests)(void));
+
+extern "C" void TEST_pal_rtos_GROUP_RUNNER(void);
+
+int main(int argc, const char * argv[])
+{
+    const char * myargv[] = {"app","-v"};
+
+    Thread::wait(2000);
+    printf("Start tests\n");
+    fflush(stdout);
+
+    UnityMain(sizeof(myargv)/sizeof(myargv[0]), myargv, TEST_pal_rtos_GROUP_RUNNER);
+
+    // This is detected by test runner app, so that it can know when to terminate without waiting for timeout.
+    printf("***END OF TESTS**\n");for(int i=0;i<1000;i++)putchar('x');putchar('\n');
+    fflush(stdout);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unitest/pal_rtos_test_runner.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "unity.h"
+#include "unity_fixture.h"
+
+
+TEST_GROUP_RUNNER(pal_rtos)
+{
+#if (PAL_INCLUDE || BASIC_RTOS_UNITY_TESTS || pal_osKernelSysTick_Unity)
+  RUN_TEST_CASE(pal_rtos, pal_osKernelSysTick_Unity);
+#endif
+#if (PAL_INCLUDE || BASIC_RTOS_UNITY_TESTS || pal_osKernelSysTick64_Unity)
+  RUN_TEST_CASE(pal_rtos, pal_osKernelSysTick64_Unity);
+#endif
+#if (PAL_INCLUDE || BASIC_RTOS_UNITY_TESTS || pal_osKernelSysTickMicroSec_Unity)
+  RUN_TEST_CASE(pal_rtos, pal_osKernelSysTickMicroSec_Unity);
+#endif
+#if (PAL_INCLUDE || BASIC_RTOS_UNITY_TESTS || pal_osKernelSysMilliSecTick_Unity)
+  RUN_TEST_CASE(pal_rtos, pal_osKernelSysMilliSecTick_Unity);
+#endif
+#if (PAL_INCLUDE || BASIC_RTOS_UNITY_TESTS || pal_osKernelSysTickFrequency_Unity)
+  RUN_TEST_CASE(pal_rtos, pal_osKernelSysTickFrequency_Unity);
+#endif
+#if (PAL_INCLUDE || BASIC_RTOS_UNITY_TESTS || pal_osDelay_Unity)
+  RUN_TEST_CASE(pal_rtos, pal_osDelay_Unity);
+#endif
+#if (PAL_INCLUDE || BASIC_RTOS_UNITY_TESTS || BasicTimeScenario)
+  RUN_TEST_CASE(pal_rtos, BasicTimeScenario);
+#endif
+#if (PAL_INCLUDE || BASIC_RTOS_UNITY_TESTS || TimerUnityTest)
+  RUN_TEST_CASE(pal_rtos, TimerUnityTest);
+#endif
+#if (PAL_INCLUDE || BASIC_RTOS_UNITY_TESTS || MemoryPoolUnityTest)
+  RUN_TEST_CASE(pal_rtos, MemoryPoolUnityTest);
+#endif
+#if (PAL_INCLUDE || BASIC_RTOS_UNITY_TESTS || MessageUnityTest)
+  RUN_TEST_CASE(pal_rtos, MessageUnityTest);
+#endif
+#if (PAL_INCLUDE || BASIC_RTOS_UNITY_TESTS || AtomicIncrementUnityTest)
+  RUN_TEST_CASE(pal_rtos, AtomicIncrementUnityTest);
+#endif
+
+#if (PAL_INCLUDE || PRIMITIVES_UNITY_TEST || PrimitivesUnityTest1)
+  RUN_TEST_CASE(pal_rtos, PrimitivesUnityTest1);
+#endif
+#if (PAL_INCLUDE || PRIMITIVES_UNITY_TEST || PrimitivesUnityTest2)
+  RUN_TEST_CASE(pal_rtos, PrimitivesUnityTest2);
+#endif
+#if (PAL_INCLUDE || PAL_INIT_REFERENCE || pal_init_test)
+RUN_TEST_CASE(pal_rtos, pal_init_test);
+#endif
+#if (CustomizedTest)
+    RUN_TEST_CASE(pal_rtos, CustomizedTest);
+#endif
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unitest/pal_socket_test.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,428 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "pal.h"
+#include "pal_network.h"
+#include "pal_plat_network.h"
+#include "unity.h"
+#include "unity_fixture.h"
+#include "pal_test_utils.h"
+#include "pal_socket_test_utils.h"
+#include "string.h"
+
+
+
+TEST_GROUP(pal_socket);
+
+//sometimes you may want to get at local data in a module.
+//for example: If you plan to pass by reference, this could be useful
+//however, it should often be avoided
+//extern int Counter;
+
+#define PAL_NET_SUPPORT_LWIP 1
+#define PAL_NET_TEST_SERVER_NAME "e109180-lin.kfn.arm.com"
+#define PAL_NET_TEST_SERVER_IP   {10,45,48,190}
+#define PAL_NET_TEST_SERVER_IP_STRING   "10.45.48.190"
+#define PAL_NET_TEST_SERVER_HTTP_PORT 8686
+#define PAL_NET_TEST_SERVER_UDP_PORT 8383
+#define PAL_NET_TEST_INCOMING_PORT 8000
+
+void * g_networkInterface = NULL;
+
+
+static uint32_t s_callbackcounter = 0;
+
+void socketCallback()
+{
+    s_callbackcounter++;
+}
+
+TEST_SETUP(pal_socket)
+{
+    uint32_t index = 0;
+    palStatus_t status = PAL_SUCCESS;
+    static void * interfaceCTX = NULL;
+    //This is run before EACH TEST
+    if (!interfaceCTX)
+    {
+        status = pal_init();
+        if (PAL_SUCCESS == status)
+        {
+            interfaceCTX = palTestGetNetWorkInterfaceContext();
+            pal_registerNetworkInterface(interfaceCTX , &index);
+            g_networkInterface = interfaceCTX;
+        }
+    }
+}
+
+TEST_TEAR_DOWN(pal_socket)
+{
+}
+
+#define PAL_TEST_BUFFER_SIZE 50
+
+TEST(pal_socket, socketUDPCreationOptionsTest)
+{
+    palStatus_t result = PAL_SUCCESS;
+    palSocket_t sock = 0;
+    palSocket_t sock2 = 0;
+    palSocket_t sock3 = 0;
+    palSocket_t sock5 = 0;
+    uint32_t numInterface = 0;
+    palNetInterfaceInfo_t interfaceInfo;
+    uint32_t interfaceIndex = 0;
+    uint32_t sockOptVal = 5000;
+    uint32_t sockOptLen = sizeof(sockOptVal);
+
+    TEST_PRINTF("start socket test\r\n");
+
+    memset(&interfaceInfo,0,sizeof(interfaceInfo));
+    // check that re-addignt he network interface returns the same index
+    pal_registerNetworkInterface(g_networkInterface, &interfaceIndex);
+    TEST_ASSERT_EQUAL(interfaceIndex, 0);
+    pal_registerNetworkInterface(g_networkInterface, &interfaceIndex);
+    TEST_ASSERT_EQUAL(interfaceIndex, 0);
+
+    TEST_PRINTF("create sockets\r\n");
+
+
+    //blocking
+    result = pal_socket(PAL_AF_INET, PAL_SOCK_DGRAM, false, interfaceIndex, &sock);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    result = pal_socket(PAL_AF_INET, PAL_SOCK_DGRAM, false, interfaceIndex, &sock2);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    //non-blocking
+    result = pal_socket(PAL_AF_INET, PAL_SOCK_DGRAM, true, interfaceIndex, &sock5);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_asynchronousSocket(PAL_AF_INET, PAL_SOCK_STREAM, false, interfaceIndex, socketCallback, &sock3);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+
+    result = pal_getNumberOfNetInterfaces(&numInterface);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_ASSERT_EQUAL(numInterface, 1);
+
+    result = pal_getNetInterfaceInfo(0, &interfaceInfo);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_PRINTF("interface addr: %d %d %d %d \r\n", interfaceInfo.address.addressData[2], interfaceInfo.address.addressData[3], interfaceInfo.address.addressData[4], interfaceInfo.address.addressData[5]);
+
+    
+    result = pal_setSocketOptions(sock, PAL_SO_RCVTIMEO, &sockOptVal, sockOptLen);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS); 
+
+    TEST_PRINTF("close sockets\r\n");
+    
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    result = pal_close(&sock);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    result = pal_close(&sock2);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    result = pal_close(&sock5);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    result = pal_close(&sock3);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    TEST_PRINTF("end\r\n");
+ 
+}
+
+
+TEST(pal_socket, basicTCPclinetSendRecieve)
+{
+
+
+    palStatus_t result = PAL_SUCCESS;
+    palSocket_t sock = 0;
+    palSocketAddress_t address = { 0 };
+    const char* message = "GET / HTTP/1.0\r\n\r\n";
+    size_t sent = 0;
+    char buffer[100] = { 0 };
+    size_t read = 0;
+    palSocketLength_t addrlen = 0;
+
+    result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, &sock);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_getAddressInfo(PAL_NET_TEST_SERVER_NAME, &address, &addrlen);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_setSockAddrPort(&address, PAL_NET_TEST_SERVER_HTTP_PORT);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_connect(sock, &address, 16);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    
+    result = pal_send(sock, message, 45, &sent);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_recv(sock, buffer, 99, &read);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_PRINTF(buffer);
+
+    TEST_ASSERT(read >= 4);
+    TEST_ASSERT(buffer[0] == 'H' && buffer[1] == 'T'&& buffer[2] == 'T' && buffer[3] == 'P');
+    pal_close(&sock);
+
+    TEST_PRINTF("test Done");
+
+}
+
+TEST(pal_socket, basicUDPclinetSendRecieve)
+{
+
+    palStatus_t result = PAL_SUCCESS;
+    palSocket_t sock = 0;
+    palSocketAddress_t address = { 0 };
+    palSocketAddress_t address2 = { 0 };
+    uint8_t buffer[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
+    size_t sent = 0;
+    size_t read = 0;
+    palSocketLength_t addrlen = 0;
+
+    result = pal_socket(PAL_AF_INET, PAL_SOCK_DGRAM, false, 0, &sock);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_getAddressInfo(PAL_NET_TEST_SERVER_NAME, &address, &addrlen);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    result = pal_setSockAddrPort(&address, PAL_NET_TEST_SERVER_UDP_PORT);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    TEST_PRINTF("udp send \r\n");
+    result = pal_sendTo(sock, buffer, 10, &address, 16, &sent);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_ASSERT_EQUAL(sent, 10);
+    result = pal_plat_receiveFrom(sock, buffer, 10, &address2, &addrlen, &read);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_ASSERT_EQUAL(read, 10);
+    TEST_PRINTF("udp done \r\n");
+    pal_close(&sock);
+}
+
+
+TEST(pal_socket, basicSocketScenario3)
+{
+    palStatus_t result = PAL_SUCCESS;
+    palSocket_t sock = 0;
+    palSocketAddress_t address = { 0 };
+    const char* message = "GET / HTTP/1.0\r\nHost:10.45.48.68:8000\r\n\r\n";
+    size_t sent = 0;
+    char buffer[100] = { 0 };
+    size_t read = 0;
+    s_callbackcounter = 0;
+    palSocketLength_t addrlen = 0;
+
+    result = pal_asynchronousSocket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, socketCallback, &sock);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_getAddressInfo(PAL_NET_TEST_SERVER_NAME, &address, &addrlen);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_setSockAddrPort(&address, PAL_NET_TEST_SERVER_HTTP_PORT);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_connect(sock, &address, 16);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_send(sock, message, 45, &sent);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_recv(sock, buffer, 99, &read);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_PRINTF(buffer);
+
+    TEST_ASSERT(read >= 4);
+    TEST_ASSERT(buffer[0] == 'H' && buffer[1] == 'T'&& buffer[2] == 'T' && buffer[3] == 'P');
+    TEST_ASSERT(s_callbackcounter > 0);
+    TEST_PRINTF("callback counter %d \r\n", s_callbackcounter);
+    pal_close(&sock);
+
+    TEST_PRINTF("test Done");
+}
+
+TEST(pal_socket, basicSocketScenario4)
+{
+    palStatus_t result = PAL_SUCCESS;
+    palSocket_t sock = 0;
+    palSocket_t sock2 = 0;
+    palSocketAddress_t address = { 0 };
+    const char* message = "GET / HTTP/1.0\r\n\r\n";
+    size_t sent = 0;
+    char buffer[100] = { 0 };
+    size_t read = 0;
+    palSocketLength_t addlen = 0;
+    uint32_t numSockets = 0;
+    palSocket_t socketsToCheck[PAL_NET_SOCKET_SELECT_MAX_SOCKETS] = { 0 };
+    pal_timeVal_t tv = {0};
+    uint8_t palSocketStatus[PAL_NET_SOCKET_SELECT_MAX_SOCKETS] = { 0 };
+
+    result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, &sock);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, &sock2);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_getAddressInfo("www.w3.org", &address, &addlen);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_PRINTF("addr lookup: %d %d %d %d \r\n", address.addressData[2], address.addressData[3], address.addressData[4], address.addressData[5]);
+
+    result = pal_setSockAddrPort(&address, 80);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_connect(sock, &address, 16);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_send(sock, message, 45, &sent);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    socketsToCheck[0] = sock;
+    socketsToCheck[1] = sock2;
+    tv.pal_tv_sec = 5;
+    tv.pal_tv_usec = 1000;
+    
+    result = pal_plat_socketMiniSelect(socketsToCheck, 2, &tv, palSocketStatus, &numSockets);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    //TEST_ASSERT_EQUAL(numSockets, 1);
+    //TEST_ASSERT(palSocketStatus[0] >= 0);
+    
+    result = pal_recv(sock, buffer, 99, &read);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_PRINTF(buffer);
+
+    TEST_ASSERT(read >= 4);
+    TEST_ASSERT(buffer[0] == 'H' && buffer[1] == 'T'&& buffer[2] == 'T' && buffer[3] == 'P');
+
+    socketsToCheck[0] = sock2;
+    socketsToCheck[1] = 0;
+    tv.pal_tv_sec = 0;
+    tv.pal_tv_usec = 20000;
+    result = pal_plat_socketMiniSelect(socketsToCheck, 1, &tv, palSocketStatus, &numSockets);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_ASSERT_EQUAL(numSockets, 0);
+    TEST_ASSERT(palSocketStatus[0] == 0);
+    
+    pal_close(&sock);
+    pal_close(&sock2);
+
+    TEST_PRINTF("test Done");
+
+}
+
+TEST(pal_socket, basicSocketScenario5)
+{
+    palStatus_t result = PAL_SUCCESS;
+    palSocket_t sock = 0;
+    palSocket_t sock2 = 0;
+    palSocket_t sock3 = 0;
+
+    palSocketAddress_t address2 = { 0 };
+
+    char buffer[100] = { 0 };
+    const char* messageOut = "HTTP/1.0 200 OK";
+    size_t sent = 0;
+    size_t read = 0;
+    palSocketLength_t addrlen = 16;
+    palNetInterfaceInfo_t interfaceInfo;
+
+    memset(&interfaceInfo,0,sizeof(interfaceInfo));
+
+
+    result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM_SERVER, false, 0, &sock);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, &sock2);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    
+    result = pal_getNetInterfaceInfo(0, &interfaceInfo);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_setSockAddrPort(&(interfaceInfo.address), PAL_NET_TEST_INCOMING_PORT);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    
+    result = pal_bind(sock, &(interfaceInfo.address), interfaceInfo.addressSize);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_listen(sock, 10);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    TEST_PRINTF("waiting for connection:\r\n");
+    result = pal_accept(sock, &address2, &addrlen, &sock2);
+    TEST_PRINTF("after accept:\r\n");
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+
+    result = pal_recv(sock2, buffer, 99, &read);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_PRINTF(buffer);
+
+    result = pal_send(sock2, messageOut, 15, &sent);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+
+    result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, &sock3);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+
+
+    pal_close(&sock2);
+    pal_close(&sock3);
+    pal_close(&sock);
+    
+    TEST_PRINTF("test Done");
+}
+
+
+TEST(pal_socket, tProvUDPTest)
+{
+
+    palStatus_t result = PAL_SUCCESS;
+    palSocket_t sock = 0;
+    palSocketAddress_t address = { 0 };
+    palSocketAddress_t address2 = { 0 };
+    char buffer[100] = { 0 };
+    const char* messageOut = "HTTP/1.0 200 OK";
+    size_t sent = 0;
+    size_t read = 0;
+    palSocketLength_t addrlen = 16;
+    palSocketLength_t addrlen2 = 16;
+    int timeout = 10000;
+    result = pal_socket(PAL_AF_INET, PAL_SOCK_DGRAM, false, 0, &sock);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_getAddressInfo(PAL_NET_TEST_SERVER_IP_STRING, &address, &addrlen);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_setSockAddrPort(&address, PAL_NET_TEST_SERVER_UDP_PORT);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_setSocketOptions(sock, PAL_SO_SNDTIMEO, &timeout, sizeof(timeout));
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_sendTo(sock, messageOut, 16, &address, addrlen, &sent);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_ASSERT_EQUAL(sent, 16);
+
+    result = pal_receiveFrom(sock, buffer, 100, NULL, NULL, &read);
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+    TEST_ASSERT_EQUAL(read, 16);
+
+    timeout = 1;
+    result = pal_setSocketOptions(sock, PAL_SO_RCVTIMEO, &timeout, sizeof(timeout));
+    TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
+
+    result = pal_receiveFrom(sock, buffer, 100, &address2, &addrlen2, &read); //  should get timeout
+    TEST_ASSERT_EQUAL(result, PAL_ERR_SOCKET_WOULD_BLOCK);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unitest/pal_socket_test_main_mbedOS.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "mbed.h"
+#include "rtos.h"
+
+DigitalOut led1(LED1);
+InterruptIn sw2(SW2);
+uint32_t button_pressed = 0;
+Thread *thread2;
+
+void sw2_press(void)
+{
+    thread2->signal_set(0x1);
+}
+
+void led_thread(void const *argument)
+{
+    while (true) {
+        led1 = !led1;
+        Thread::wait(1000);
+    }
+}
+
+void button_thread(void const *argument)
+{
+    while (true) {
+        Thread::signal_wait(0x1);
+        button_pressed++;
+    }
+}
+
+
+// Run all the unity tests
+//extern "C" void RunAllTests(void);
+// Include explicitly and not using the h file because we are compiling this file with C++ and the h file does not
+// declare it extern "C"
+extern "C" int UnityMain(int argc, const char* argv[], void (*runAllTests)(void));
+
+extern "C" void TEST_pal_socket_GROUP_RUNNER(void);
+
+int main(int argc, const char * argv[])
+{
+    const char * myargv[] = {"app","-v"};
+
+    Thread::wait(2000);
+    printf("Start tests\n");
+    fflush(stdout);
+
+    UnityMain(sizeof(myargv)/sizeof(myargv[0]), myargv, TEST_pal_socket_GROUP_RUNNER);
+
+    // This is detected by test runner app, so that it can know when to terminate without waiting for timeout.
+    printf("***END OF TESTS**\n");for(int i=0;i<1000;i++)putchar('x');putchar('\n');
+    fflush(stdout);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unitest/pal_socket_test_runner.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2016 ARM Limited. All rights reserved.
+* SPDX-License-Identifier: Apache-2.0
+* Licensed under the Apache License, Version 2.0 (the License); you may
+* not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an AS IS BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "unity.h"
+#include "unity_fixture.h"
+
+
+// pal Socket API tests
+TEST_GROUP_RUNNER(pal_socket)
+{
+#if (PAL_INCLUDE || socketUDPCreationOptionsTest)
+    RUN_TEST_CASE(pal_socket, socketUDPCreationOptionsTest);
+#endif
+#if (PAL_INCLUDE || basicTCPclinetSendRecieve)
+    RUN_TEST_CASE(pal_socket, basicTCPclinetSendRecieve);
+#endif
+#if (PAL_INCLUDE || basicUDPclinetSendRecieve)
+    RUN_TEST_CASE(pal_socket, basicUDPclinetSendRecieve);
+#endif
+#if (PAL_INCLUDE || basicSocketScenario3)
+    RUN_TEST_CASE(pal_socket, basicSocketScenario3);
+#endif
+#if (PAL_INCLUDE || basicSocketScenario4)
+    RUN_TEST_CASE(pal_socket, basicSocketScenario4);
+#endif
+#if (PAL_INCLUDE || tProvUDPTest)
+    RUN_TEST_CASE(pal_socket, tProvUDPTest);
+#endif
+#if (PAL_INCLUDE || basicSocketScenario5)
+    RUN_TEST_CASE(pal_socket, basicSocketScenario5);
+#endif
+}
+
+// Each of these should be in a separate file.
+
+
+// pal OS API tests
+//TEST_GROUP_RUNNER(pal_OS)
+//{
+//}
+
+/* Run all the tests
+void RunAllTests(void)
+{
+      RUN_TEST_GROUP(pal_socket);
+      //RUN_TEST_GROUP(pal_OS);
+}*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/.gitattributes	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,30 @@
+*           text=auto
+
+# These files are text and should be normalized (convert crlf to lf)
+*.rb        text
+*.test      text
+*.c         text
+*.cpp       text
+*.h         text
+*.txt       text
+*.yml       text
+*.s79       text
+*.bat       text
+*.xcl       text
+*.inc       text
+*.info      text
+*.md        text
+makefile    text
+rakefile    text
+
+
+#These files are binary and should not be normalized
+*.doc       binary
+*.odt       binary
+*.pdf       binary
+*.ewd       binary
+*.eww       binary
+*.dni       binary
+*.wsdt      binary
+*.dbgdt     binary
+*.mac       binary
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/.gitignore	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,9 @@
+build/
+.DS_Store
+examples/example_1/test1.out
+examples/example_1/test2.out
+examples/example_2/all_tests.out
+examples/example_3/test1.out
+examples/example_3/test2.out
+test/testparameterized.c.results
+test/testunity.c.results
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/.settings/language.settings.xml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project>
+	<configuration id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.base.1969954189" name="Default">
+		<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
+			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
+			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
+			<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
+			<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-994959062068727758" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings Cross ARM" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+				<language-scope id="org.eclipse.cdt.core.gcc"/>
+				<language-scope id="org.eclipse.cdt.core.g++"/>
+			</provider>
+			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
+		</extension>
+	</configuration>
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/.travis.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,9 @@
+language: ruby
+rvm:
+  - "1.9.3"
+  - "2.0.0"
+script:
+  - cd test && rake ci
+  - make -s
+  - cd ../extras/fixture/test && rake ci
+  - make -s default noStdlibMalloc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/README.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,211 @@
+Unity Test API
+==============
+
+[![Unity Build Status](https://api.travis-ci.org/ThrowTheSwitch/Unity.png?branch=master)](https://travis-ci.org/ThrowTheSwitch/Unity)
+__Copyright (c) 2007 - 2014 Unity Project by Mike Karlesky, Mark VanderVoord, and Greg Williams__
+
+Running Tests
+-------------
+
+    RUN_TEST(func, linenum)
+
+Each Test is run within the macro `RUN_TEST`.  This macro performs necessary setup before the test is called and handles cleanup and result tabulation afterwards.
+
+Ignoring Tests
+--------------
+
+There are times when a test is incomplete or not valid for some reason.  At these times, TEST_IGNORE can be called.  Control will immediately be returned to the caller of the test, and no failures will be returned.
+
+    TEST_IGNORE()
+
+Ignore this test and return immediately
+
+    TEST_IGNORE_MESSAGE (message)
+
+Ignore this test and return immediately.  Output a message stating why the test was ignored.
+
+Aborting Tests
+--------------
+
+There are times when a test will contain an infinite loop on error conditions, or there may be reason to escape from the test early without executing the rest of the test.  A pair of macros support this functionality in Unity.  The first `TEST_PROTECT` sets up the feature, and handles emergency abort cases. `TEST_ABORT` can then be used at any time within the tests to return to the last `TEST_PROTECT` call.
+
+    TEST_PROTECT()
+
+Setup and Catch macro
+
+    TEST_ABORT()
+
+Abort Test macro
+
+Example:
+
+    main()
+    {
+        if (TEST_PROTECT() == 0)
+        {
+            MyTest();
+        }
+    }
+
+If MyTest calls `TEST_ABORT`, program control will immediately return to `TEST_PROTECT` with a non-zero return value.
+
+
+Unity Assertion Summary
+=======================
+
+Basic Validity Tests
+--------------------
+
+    TEST_ASSERT_TRUE(condition)
+
+Evaluates whatever code is in condition and fails if it evaluates to false
+
+    TEST_ASSERT_FALSE(condition)
+
+Evaluates whatever code is in condition and fails if it evaluates to true
+
+    TEST_ASSERT(condition)
+
+Another way of calling `TEST_ASSERT_TRUE`
+
+    TEST_ASSERT_UNLESS(condition)
+
+Another way of calling `TEST_ASSERT_FALSE`
+
+    TEST_FAIL()
+    TEST_FAIL_MESSAGE(message)
+
+This test is automatically marked as a failure.  The message is output stating why.
+
+Numerical Assertions: Integers
+------------------------------
+
+    TEST_ASSERT_EQUAL_INT(expected, actual)
+    TEST_ASSERT_EQUAL_INT8(expected, actual)
+    TEST_ASSERT_EQUAL_INT16(expected, actual)
+    TEST_ASSERT_EQUAL_INT32(expected, actual)
+    TEST_ASSERT_EQUAL_INT64(expected, actual)
+
+Compare two integers for equality and display errors as signed integers. A cast will be performed
+to your natural integer size so often this can just be used.  When you need to specify the exact size,
+like when comparing arrays, you can use a specific version:
+
+    TEST_ASSERT_EQUAL_UINT(expected, actual)
+    TEST_ASSERT_EQUAL_UINT8(expected, actual)
+    TEST_ASSERT_EQUAL_UINT16(expected, actual)
+    TEST_ASSERT_EQUAL_UINT32(expected, actual)
+    TEST_ASSERT_EQUAL_UINT64(expected, actual)
+
+Compare two integers for equality and display errors as unsigned integers.  Like INT, there are
+variants for different sizes also.
+
+    TEST_ASSERT_EQUAL_HEX(expected, actual)
+    TEST_ASSERT_EQUAL_HEX8(expected, actual)
+    TEST_ASSERT_EQUAL_HEX16(expected, actual)
+    TEST_ASSERT_EQUAL_HEX32(expected, actual)
+    TEST_ASSERT_EQUAL_HEX64(expected, actual)
+
+Compares two integers for equality and display errors as hexadecimal.  Like the other integer comparisons,
+you can specify the size... here the size will also effect how many nibbles are shown (for example, `HEX16`
+will show 4 nibbles).
+
+    _ARRAY
+
+You can append `_ARRAY` to any of these macros to make an array comparison of that type.  Here you will
+need to care a bit more about the actual size of the value being checked.  You will also specify an
+additional argument which is the number of elements to compare.  For example:
+
+    TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, elements)
+
+    TEST_ASSERT_EQUAL(expected, actual)
+
+Another way of calling TEST_ASSERT_EQUAL_INT
+
+    TEST_ASSERT_INT_WITHIN(delta, expected, actual)
+
+Asserts that the actual value is within plus or minus delta of the expected value.  This also comes in
+size specific variants.
+
+
+Numerical Assertions: Bitwise
+-----------------------------
+
+    TEST_ASSERT_BITS(mask, expected, actual)
+
+Use an integer mask to specify which bits should be compared between two other integers.  High bits in the mask are compared, low bits ignored.
+
+    TEST_ASSERT_BITS_HIGH(mask, actual)
+
+Use an integer mask to specify which bits should be inspected to determine if they are all set high.  High bits in the mask are compared, low bits ignored.
+
+    TEST_ASSERT_BITS_LOW(mask, actual)
+
+Use an integer mask to specify which bits should be inspected to determine if they are all set low.  High bits in the mask are compared, low bits ignored.
+
+    TEST_ASSERT_BIT_HIGH(bit, actual)
+
+Test a single bit and verify that it is high.  The bit is specified 0-31 for a 32-bit integer.
+
+    TEST_ASSERT_BIT_LOW(bit, actual)
+
+Test a single bit and verify that it is low.  The bit is specified 0-31 for a 32-bit integer.
+
+Numerical Assertions: Floats
+----------------------------
+
+    TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual)
+
+Asserts that the actual value is within plus or minus delta of the expected value.
+
+    TEST_ASSERT_EQUAL_FLOAT(expected, actual)
+    TEST_ASSERT_EQUAL_DOUBLE(expected, actual)
+
+Asserts that two floating point values are "equal" within a small % delta of the expected value.
+
+String Assertions
+-----------------
+
+    TEST_ASSERT_EQUAL_STRING(expected, actual)
+
+Compare two null-terminate strings.  Fail if any character is different or if the lengths are different.
+
+    TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len)
+
+Compare two strings.  Fail if any character is different, stop comparing after len characters.
+
+    TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message)
+
+Compare two null-terminate strings.  Fail if any character is different or if the lengths are different. Output a custom message on failure.
+
+    TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE(expected, actual, len, message)
+
+Compare two strings.  Fail if any character is different, stop comparing after len characters. Output a custom message on failure.
+
+Pointer Assertions
+------------------
+
+Most pointer operations can be performed by simply using the integer comparisons above.  However, a couple of special cases are added for clarity.
+
+    TEST_ASSERT_NULL(pointer)
+
+Fails if the pointer is not equal to NULL
+
+    TEST_ASSERT_NOT_NULL(pointer)
+
+Fails if the pointer is equal to NULL
+
+Memory Assertions
+-----------------
+
+    TEST_ASSERT_EQUAL_MEMORY(expected, actual, len)
+
+Compare two blocks of memory.  This is a good generic assertion for types that can't be coerced into acting like
+standard types... but since it's a memory compare, you have to be careful that your data types are packed.
+
+_MESSAGE
+--------
+
+you can append _MESSAGE to any of the macros to make them take an additional argument.  This argument
+is a string that will be printed at the end of the failure strings.  This is useful for specifying more
+information about the problem.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/colour_prompt.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,115 @@
+# ==========================================
+#   Unity Project - A Test Framework for C
+#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+#   [Released under MIT License. Please refer to license.txt for details]
+# ==========================================
+
+if RUBY_PLATFORM =~/(win|w)32$/
+	begin
+		require 'Win32API'
+	rescue LoadError
+		puts "ERROR! \"Win32API\" library not found"
+		puts "\"Win32API\" is required for colour on a windows machine"
+		puts "  try => \"gem install Win32API\" on the command line"
+		puts
+	end
+	# puts
+  # puts 'Windows Environment Detected...'
+	# puts 'Win32API Library Found.'
+	# puts
+end
+
+class ColourCommandLine
+  def initialize
+    if RUBY_PLATFORM =~/(win|w)32$/
+      get_std_handle = Win32API.new("kernel32", "GetStdHandle", ['L'], 'L')
+      @set_console_txt_attrb =
+        Win32API.new("kernel32","SetConsoleTextAttribute",['L','N'], 'I')
+      @hout = get_std_handle.call(-11)
+    end
+  end
+
+  def change_to(new_colour)
+    if RUBY_PLATFORM =~/(win|w)32$/
+      @set_console_txt_attrb.call(@hout,self.win32_colour(new_colour))
+    else
+	  	"\033[30;#{posix_colour(new_colour)};22m"
+	 	end
+  end
+
+  def win32_colour(colour)
+    case colour
+      when :black then 0
+      when :dark_blue then 1
+      when :dark_green then 2
+      when :dark_cyan then 3
+      when :dark_red then 4
+      when :dark_purple then 5
+      when :dark_yellow, :narrative then 6
+      when :default_white, :default, :dark_white then 7
+      when :silver then 8
+      when :blue then 9
+      when :green, :success then 10
+      when :cyan, :output then 11
+      when :red, :failure then 12
+      when :purple then 13
+      when :yellow then 14
+      when :white then 15
+      else
+        0
+    end
+  end
+
+	def posix_colour(colour)
+    # ANSI Escape Codes - Foreground colors
+    # | Code | Color                     |
+    # | 39   | Default foreground color  |
+    # | 30   | Black                     |
+    # | 31   | Red                       |
+    # | 32   | Green                     |
+    # | 33   | Yellow                    |
+    # | 34   | Blue                      |
+    # | 35   | Magenta                   |
+    # | 36   | Cyan                      |
+    # | 37   | Light gray                |
+    # | 90   | Dark gray                 |
+    # | 91   | Light red                 |
+    # | 92   | Light green               |
+    # | 93   | Light yellow              |
+    # | 94   | Light blue                |
+    # | 95   | Light magenta             |
+    # | 96   | Light cyan                |
+    # | 97   | White                     |
+
+	  case colour
+      when :black then 30
+      when :red, :failure then 31
+      when :green, :success then 32
+			when :yellow then 33
+      when :blue, :narrative then 34
+      when :purple, :magenta then 35
+      when :cyan, :output then 36
+      when :white, :default_white then 37
+      when :default then 39
+      else
+        39
+    end
+  end
+
+  def out_c(mode, colour, str)
+    case RUBY_PLATFORM
+			when /(win|w)32$/
+			  change_to(colour)
+				 $stdout.puts str if mode == :puts
+				 $stdout.print str if mode == :print
+			  change_to(:default_white)
+			else
+				$stdout.puts("#{change_to(colour)}#{str}\033[0m") if mode == :puts
+				$stdout.print("#{change_to(colour)}#{str}\033[0m") if mode == :print
+		end
+  end
+end # ColourCommandLine
+
+def colour_puts(role,str)  ColourCommandLine.new.out_c(:puts, role, str)  end
+def colour_print(role,str) ColourCommandLine.new.out_c(:print, role, str) end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/colour_reporter.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,39 @@
+# ==========================================
+#   Unity Project - A Test Framework for C
+#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+#   [Released under MIT License. Please refer to license.txt for details]
+# ========================================== 
+
+require "#{File.expand_path(File.dirname(__FILE__))}/colour_prompt"
+
+$colour_output = true
+
+def report(message)
+  if not $colour_output
+    $stdout.puts(message)
+  else
+    message = message.join('\n') if (message.class == Array)
+    message.each_line do |line|
+      line.chomp!
+      colour = case(line)
+        when /(?:total\s+)?tests:?\s+(\d+)\s+(?:total\s+)?failures:?\s+\d+\s+Ignored:?/i
+          ($1.to_i == 0) ? :green : :red
+        when /PASS/
+          :green
+        when /^OK$/
+          :green
+        when /(?:FAIL|ERROR)/
+          :red
+        when /IGNORE/
+          :yellow
+        when /^(?:Creating|Compiling|Linking)/
+          :white
+        else
+          :silver
+      end
+      colour_puts(colour, line)
+    end
+  end
+  $stdout.flush
+  $stderr.flush
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/generate_config.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+#this is a sample configuration file for generate_module
+#you would use it by calling generate_module with the -ygenerate_config.yml option
+#files like this are useful for customizing generate_module to your environment
+:generate_module:
+  :defaults:
+    #these defaults are used in place of any missing options at the command line
+    :path_src: ../src/
+    :path_inc: ../src/
+    :path_tst: ../test/
+    :update_svn: true
+  :includes:
+    #use [] for no additional includes, otherwise list the includes on separate lines
+    :src:
+      - Defs.h
+      - Board.h
+    :inc: []
+    :tst:
+      - Defs.h
+      - Board.h
+      - Exception.h
+  :boilerplates: 
+    #these are inserted at the top of generated files.
+    #just comment out or remove if not desired.
+    #use %1$s where you would like the file name to appear (path/extension not included)
+    :src: |
+      //-------------------------------------------
+      // %1$s.c
+      //-------------------------------------------
+    :inc: |
+      //-------------------------------------------
+      // %1$s.h
+      //-------------------------------------------
+    :tst: |
+      //-------------------------------------------
+      // Test%1$s.c : Units tests for %1$s.c
+      //-------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/generate_module.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,202 @@
+# ==========================================
+#   Unity Project - A Test Framework for C
+#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+#   [Released under MIT License. Please refer to license.txt for details]
+# ==========================================
+
+# This script creates all the files with start code necessary for a new module.
+# A simple module only requires a source file, header file, and test file.
+# Triad modules require a source, header, and test file for each triad type (like model, conductor, and hardware).
+
+require 'rubygems'
+require 'fileutils'
+
+HERE = File.expand_path(File.dirname(__FILE__)) + '/'
+
+#help text when requested
+HELP_TEXT = [ "\nGENERATE MODULE\n-------- ------",
+              "\nUsage: ruby generate_module [options] module_name",
+              "  -i\"include\" sets the path to output headers to 'include' (DEFAULT ../src)",
+              "  -s\"../src\"  sets the path to output source to '../src'   (DEFAULT ../src)",
+              "  -t\"C:/test\" sets the path to output source to 'C:/test'  (DEFAULT ../test)",
+              "  -p\"MCH\"     sets the output pattern to MCH.",
+              "              dh  - driver hardware.",
+              "              dih - driver interrupt hardware.",
+              "              mch - model conductor hardware.",
+              "              mvp - model view presenter.",
+              "              src - just a single source module. (DEFAULT)",
+              "  -d          destroy module instead of creating it.",
+              "  -u          update subversion too (requires subversion command line)",
+              "  -y\"my.yml\"  selects a different yaml config file for module generation",
+              "" ].join("\n")
+
+#Built in patterns
+PATTERNS = { 'src' => {''         => { :inc => [] } },
+             'dh'  => {'Driver'   => { :inc => ['%1$sHardware.h'] },
+                       'Hardware' => { :inc => [] }
+                      },
+             'dih' => {'Driver'   => { :inc => ['%1$sHardware.h', '%1$sInterrupt.h'] },
+                       'Interrupt'=> { :inc => ['%1$sHardware.h'] },
+                       'Hardware' => { :inc => [] }
+                      },
+             'mch' => {'Model'    => { :inc => [] },
+                       'Conductor'=> { :inc => ['%1$sModel.h', '%1$sHardware.h'] },
+                       'Hardware' => { :inc => [] }
+                      },
+             'mvp' => {'Model'    => { :inc => [] },
+                       'Presenter'=> { :inc => ['%1$sModel.h', '%1$sView.h'] },
+                       'View'     => { :inc => [] }
+                      }
+           }
+
+#TEMPLATE_TST
+TEMPLATE_TST = %q[#include "unity.h"
+%2$s#include "%1$s.h"
+
+void setUp(void)
+{
+}
+
+void tearDown(void)
+{
+}
+
+void test_%1$s_NeedToImplement(void)
+{
+    TEST_IGNORE_MESSAGE("Need to Implement %1$s");
+}
+]
+
+#TEMPLATE_SRC
+TEMPLATE_SRC = %q[%2$s#include "%1$s.h"
+]
+
+#TEMPLATE_INC
+TEMPLATE_INC = %q[#ifndef _%3$s_H
+#define _%3$s_H%2$s
+
+#endif // _%3$s_H
+]
+
+# Parse the command line parameters.
+ARGV.each do |arg|
+  case(arg)
+    when /^-d/      then @destroy = true
+    when /^-u/      then @update_svn = true
+    when /^-p(\w+)/ then @pattern = $1
+    when /^-s(.+)/  then @path_src = $1
+    when /^-i(.+)/  then @path_inc = $1
+    when /^-t(.+)/  then @path_tst = $1
+    when /^-y(.+)/  then @yaml_config = $1
+    when /^(\w+)/
+      raise "ERROR: You can't have more than one Module name specified!" unless @module_name.nil?
+      @module_name = arg
+    when /^-(h|-help)/
+      puts HELP_TEXT
+      exit
+    else
+      raise "ERROR: Unknown option specified '#{arg}'"
+  end
+end
+raise "ERROR: You must have a Module name specified! (use option -h for help)" if @module_name.nil?
+
+#load yaml file if one was requested
+if @yaml_config
+  require 'yaml'
+  cfg = YAML.load_file(HERE + @yaml_config)[:generate_module]
+  @path_src     = cfg[:defaults][:path_src]   if @path_src.nil?
+  @path_inc     = cfg[:defaults][:path_inc]   if @path_inc.nil?
+  @path_tst     = cfg[:defaults][:path_tst]   if @path_tst.nil?
+  @update_svn   = cfg[:defaults][:update_svn] if @update_svn.nil?
+  @extra_inc    = cfg[:includes]
+  @boilerplates = cfg[:boilerplates]
+else
+  @boilerplates = {}
+end
+
+# Create default file paths if none were provided
+@path_src = HERE + "../src/"  if @path_src.nil?
+@path_inc = @path_src         if @path_inc.nil?
+@path_tst = HERE + "../test/" if @path_tst.nil?
+@path_src += '/'              unless (@path_src[-1] == 47)
+@path_inc += '/'              unless (@path_inc[-1] == 47)
+@path_tst += '/'              unless (@path_tst[-1] == 47)
+@pattern  = 'src'             if @pattern.nil?
+@includes = { :src => [], :inc => [], :tst => [] }
+@includes.merge!(@extra_inc) unless @extra_inc.nil?
+
+#create triad definition
+TRIAD = [ { :ext => '.c', :path => @path_src,        :template => TEMPLATE_SRC, :inc => :src, :boilerplate => @boilerplates[:src] },
+          { :ext => '.h', :path => @path_inc,        :template => TEMPLATE_INC, :inc => :inc, :boilerplate => @boilerplates[:inc] },
+          { :ext => '.c', :path => @path_tst+'Test', :template => TEMPLATE_TST, :inc => :tst, :boilerplate => @boilerplates[:tst] },
+        ]
+
+#prepare the pattern for use
+@patterns = PATTERNS[@pattern.downcase]
+raise "ERROR: The design pattern specified isn't one that I recognize!" if @patterns.nil?
+
+# Assemble the path/names of the files we need to work with.
+files = []
+TRIAD.each do |triad|
+  @patterns.each_pair do |pattern_file, pattern_traits|
+    files << {
+      :path => "#{triad[:path]}#{@module_name}#{pattern_file}#{triad[:ext]}",
+      :name => "#{@module_name}#{pattern_file}",
+      :template => triad[:template],
+      :boilerplate => triad[:boilerplate],
+      :includes => case(triad[:inc])
+                     when :src then @includes[:src] | pattern_traits[:inc].map{|f| f % [@module_name]}
+                     when :inc then @includes[:inc]
+                     when :tst then @includes[:tst] | pattern_traits[:inc].map{|f| "Mock#{f}"% [@module_name]}
+                   end
+    }
+  end
+end
+
+# destroy files if that was what was requested
+if @destroy
+  files.each do |filespec|
+    file = filespec[:path]
+    if File.exist?(file)
+      if @update_svn
+        `svn delete \"#{file}\" --force`
+        puts "File #{file} deleted and removed from source control"
+      else
+        FileUtils.remove(file)
+        puts "File #{file} deleted"
+      end
+    else
+      puts "File #{file} does not exist so cannot be removed."
+    end
+  end
+  puts "Destroy Complete"
+  exit
+end
+
+#Abort if any module already exists
+files.each do |file|
+  raise "ERROR: File #{file[:name]} already exists. Exiting." if File.exist?(file[:path])
+end
+
+# Create Source Modules
+files.each_with_index do |file, i|
+  File.open(file[:path], 'w') do |f|
+    f.write(file[:boilerplate] % [file[:name]]) unless file[:boilerplate].nil?
+    f.write(file[:template] % [ file[:name],
+                                file[:includes].map{|f| "#include \"#{f}\"\n"}.join,
+                                file[:name].upcase ]
+           )
+  end
+  if (@update_svn)
+    `svn add \"#{file[:path]}\"`
+    if $?.exitstatus == 0
+      puts "File #{file[:path]} created and added to source control"
+    else
+      puts "File #{file[:path]} created but FAILED adding to source control!"
+    end
+  else
+    puts "File #{file[:path]} created"
+  end
+end
+
+puts 'Generate Complete'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/generate_test_runner.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,391 @@
+# ==========================================
+#   Unity Project - A Test Framework for C
+#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+#   [Released under MIT License. Please refer to license.txt for details]
+# ==========================================
+
+$QUICK_RUBY_VERSION = RUBY_VERSION.split('.').inject(0){|vv,v| vv * 100 + v.to_i }
+File.expand_path(File.join(File.dirname(__FILE__),'colour_prompt'))
+
+class UnityTestRunnerGenerator
+
+  def initialize(options = nil)
+    @options = UnityTestRunnerGenerator.default_options
+    case(options)
+      when NilClass then @options
+      when String   then @options.merge!(UnityTestRunnerGenerator.grab_config(options))
+      when Hash     then @options.merge!(options)
+      else          raise "If you specify arguments, it should be a filename or a hash of options"
+    end
+    require "#{File.expand_path(File.dirname(__FILE__))}/type_sanitizer"
+  end
+
+  def self.default_options
+    {
+      :includes      => [],
+      :plugins       => [],
+      :framework     => :unity,
+      :test_prefix   => "test|spec|should",
+      :setup_name    => "setUp",
+      :teardown_name => "tearDown",
+      :main_name     => "main",
+    }
+  end
+
+  def self.grab_config(config_file)
+    options = self.default_options
+    unless (config_file.nil? or config_file.empty?)
+      require 'yaml'
+      yaml_guts = YAML.load_file(config_file)
+      options.merge!(yaml_guts[:unity] || yaml_guts[:cmock])
+      raise "No :unity or :cmock section found in #{config_file}" unless options
+    end
+    return(options)
+  end
+
+  def run(input_file, output_file, options=nil)
+    tests = []
+    testfile_includes = []
+    used_mocks = []
+
+    @options.merge!(options) unless options.nil?
+    module_name = File.basename(input_file)
+
+    #pull required data from source file
+    source = File.read(input_file)
+    source = source.force_encoding("ISO-8859-1").encode("utf-8", :replace => nil) if ($QUICK_RUBY_VERSION > 10900)
+    tests               = find_tests(source)
+    headers             = find_includes(source)
+    testfile_includes   = (headers[:local] + headers[:system])
+    used_mocks          = find_mocks(testfile_includes)
+    testfile_includes   = (testfile_includes - used_mocks)
+    testfile_includes.delete_if{|inc| inc =~ /(unity|cmock)/}
+
+    #build runner file
+    generate(input_file, output_file, tests, used_mocks, testfile_includes)
+
+    #determine which files were used to return them
+    all_files_used = [input_file, output_file]
+    all_files_used += testfile_includes.map {|filename| filename + '.c'} unless testfile_includes.empty?
+    all_files_used += @options[:includes] unless @options[:includes].empty?
+    return all_files_used.uniq
+  end
+
+  def generate(input_file, output_file, tests, used_mocks, testfile_includes)
+    File.open(output_file, 'w') do |output|
+      create_header(output, used_mocks, testfile_includes)
+      create_externs(output, tests, used_mocks)
+      create_mock_management(output, used_mocks)
+      create_suite_setup_and_teardown(output)
+      create_reset(output, used_mocks)
+      create_main(output, input_file, tests, used_mocks)
+    end
+
+    if (@options[:header_file] && !@options[:header_file].empty?)
+      File.open(@options[:header_file], 'w') do |output|
+        create_h_file(output, @options[:header_file], tests, testfile_includes, used_mocks)
+      end
+    end
+  end
+
+  def find_tests(source)
+    tests_and_line_numbers = []
+
+    source_scrubbed = source.clone
+    source_scrubbed = source_scrubbed.gsub(/"[^"]*"/, '')      # remove things in strings
+    source_scrubbed = source_scrubbed.gsub(/\/\/.*$/, '')      # remove line comments
+    source_scrubbed = source_scrubbed.gsub(/\/\*.*?\*\//m, '') # remove block comments
+    lines = source_scrubbed.split(/(^\s*\#.*$)                 # Treat preprocessor directives as a logical line
+                              | (;|\{|\}) /x)                  # Match ;, {, and } as end of lines
+
+    lines.each_with_index do |line, index|
+      #find tests
+      if line =~ /^((?:\s*TEST_CASE\s*\(.*?\)\s*)*)\s*void\s+((?:#{@options[:test_prefix]}).*)\s*\(\s*(.*)\s*\)/
+        arguments = $1
+        name = $2
+        call = $3
+        params = $4
+        args = nil
+        if (@options[:use_param_tests] and !arguments.empty?)
+          args = []
+          arguments.scan(/\s*TEST_CASE\s*\((.*)\)\s*$/) {|a| args << a[0]}
+        end
+        tests_and_line_numbers << { :test => name, :args => args, :call => call, :params => params, :line_number => 0 }
+      end
+    end
+    tests_and_line_numbers.uniq! {|v| v[:test] }
+
+    #determine line numbers and create tests to run
+    source_lines = source.split("\n")
+    source_index = 0;
+    tests_and_line_numbers.size.times do |i|
+      source_lines[source_index..-1].each_with_index do |line, index|
+        if (line =~ /#{tests_and_line_numbers[i][:test]}/)
+          source_index += index
+          tests_and_line_numbers[i][:line_number] = source_index + 1
+          break
+        end
+      end
+    end
+
+    return tests_and_line_numbers
+  end
+
+  def find_includes(source)
+
+    #remove comments (block and line, in three steps to ensure correct precedence)
+    source.gsub!(/\/\/(?:.+\/\*|\*(?:$|[^\/])).*$/, '')  # remove line comments that comment out the start of blocks
+    source.gsub!(/\/\*.*?\*\//m, '')                     # remove block comments
+    source.gsub!(/\/\/.*$/, '')                          # remove line comments (all that remain)
+
+    #parse out includes
+    includes = {
+      :local => source.scan(/^\s*#include\s+\"\s*(.+)\.[hH]\s*\"/).flatten,
+      :system => source.scan(/^\s*#include\s+<\s*(.+)\s*>/).flatten.map { |inc| "<#{inc}>" }
+    }
+    return includes
+  end
+
+  def find_mocks(includes)
+    mock_headers = []
+    includes.each do |include_path|
+      include_file = File.basename(include_path)
+      mock_headers << include_path if (include_file =~ /^mock/i)
+    end
+    return mock_headers
+  end
+
+  def create_header(output, mocks, testfile_includes=[])
+    output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */')
+    create_runtest(output, mocks)
+    output.puts("\n/*=======Automagically Detected Files To Include=====*/")
+    output.puts("#include \"#{@options[:framework].to_s}.h\"")
+    output.puts('#include "cmock.h"') unless (mocks.empty?)
+    output.puts('#include <setjmp.h>')
+    output.puts('#include <stdio.h>')
+    output.puts('#include "CException.h"') if @options[:plugins].include?(:cexception)
+    if (@options[:header_file] && !@options[:header_file].empty?)
+      output.puts("#include \"#{File.basename(@options[:header_file])}\"")
+    else
+      @options[:includes].flatten.uniq.compact.each do |inc|
+        output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}")
+      end
+      testfile_includes.each do |inc|
+        output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}")
+      end
+    end
+    mocks.each do |mock|
+      output.puts("#include \"#{mock.gsub('.h','')}.h\"")
+    end
+    if @options[:enforce_strict_ordering]
+      output.puts('')
+      output.puts('int GlobalExpectCount;')
+      output.puts('int GlobalVerifyOrder;')
+      output.puts('char* GlobalOrderError;')
+    end
+  end
+
+  def create_externs(output, tests, mocks)
+    output.puts("\n/*=======External Functions This Runner Calls=====*/")
+    output.puts("extern void #{@options[:setup_name]}(void);")
+    output.puts("extern void #{@options[:teardown_name]}(void);")
+    tests.each do |test|
+      output.puts("extern void #{test[:test]}(#{test[:call] || 'void'});")
+    end
+    output.puts('')
+  end
+
+  def create_mock_management(output, mock_headers)
+    unless (mock_headers.empty?)
+      output.puts("\n/*=======Mock Management=====*/")
+      output.puts("static void CMock_Init(void)")
+      output.puts("{")
+      if @options[:enforce_strict_ordering]
+        output.puts("  GlobalExpectCount = 0;")
+        output.puts("  GlobalVerifyOrder = 0;")
+        output.puts("  GlobalOrderError = NULL;")
+      end
+      mocks = mock_headers.map {|mock| File.basename(mock)}
+      mocks.each do |mock|
+        mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
+        output.puts("  #{mock_clean}_Init();")
+      end
+      output.puts("}\n")
+
+      output.puts("static void CMock_Verify(void)")
+      output.puts("{")
+      mocks.each do |mock|
+        mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
+        output.puts("  #{mock_clean}_Verify();")
+      end
+      output.puts("}\n")
+
+      output.puts("static void CMock_Destroy(void)")
+      output.puts("{")
+      mocks.each do |mock|
+        mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
+        output.puts("  #{mock_clean}_Destroy();")
+      end
+      output.puts("}\n")
+    end
+  end
+
+  def create_suite_setup_and_teardown(output)
+    unless (@options[:suite_setup].nil?)
+      output.puts("\n/*=======Suite Setup=====*/")
+      output.puts("static int suite_setup(void)")
+      output.puts("{")
+      output.puts(@options[:suite_setup])
+      output.puts("}")
+    end
+    unless (@options[:suite_teardown].nil?)
+      output.puts("\n/*=======Suite Teardown=====*/")
+      output.puts("static int suite_teardown(int num_failures)")
+      output.puts("{")
+      output.puts(@options[:suite_teardown])
+      output.puts("}")
+    end
+  end
+
+  def create_runtest(output, used_mocks)
+    cexception = @options[:plugins].include? :cexception
+    va_args1   = @options[:use_param_tests] ? ', ...' : ''
+    va_args2   = @options[:use_param_tests] ? '__VA_ARGS__' : ''
+    output.puts("\n/*=======Test Runner Used To Run Each Test Below=====*/")
+    output.puts("#define RUN_TEST_NO_ARGS") if @options[:use_param_tests]
+    output.puts("#define RUN_TEST(TestFunc, TestLineNum#{va_args1}) \\")
+    output.puts("{ \\")
+    output.puts("  Unity.CurrentTestName = #TestFunc#{va_args2.empty? ? '' : " \"(\" ##{va_args2} \")\""}; \\")
+    output.puts("  Unity.CurrentTestLineNumber = TestLineNum; \\")
+    output.puts("  Unity.NumberOfTests++; \\")
+    output.puts("  CMock_Init(); \\") unless (used_mocks.empty?)
+    output.puts("  UNITY_CLR_DETAILS(); \\") unless (used_mocks.empty?)
+    output.puts("  if (TEST_PROTECT()) \\")
+    output.puts("  { \\")
+    output.puts("    CEXCEPTION_T e; \\") if cexception
+    output.puts("    Try { \\") if cexception
+    output.puts("      #{@options[:setup_name]}(); \\")
+    output.puts("      TestFunc(#{va_args2}); \\")
+    output.puts("    } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, \"Unhandled Exception!\"); } \\") if cexception
+    output.puts("  } \\")
+    output.puts("  if (TEST_PROTECT() && !TEST_IS_IGNORED) \\")
+    output.puts("  { \\")
+    output.puts("    #{@options[:teardown_name]}(); \\")
+    output.puts("    CMock_Verify(); \\") unless (used_mocks.empty?)
+    output.puts("  } \\")
+    output.puts("  CMock_Destroy(); \\") unless (used_mocks.empty?)
+    output.puts("  UnityConcludeTest(); \\")
+    output.puts("}\n")
+  end
+
+  def create_reset(output, used_mocks)
+    output.puts("\n/*=======Test Reset Option=====*/")
+    output.puts("void resetTest(void);")
+    output.puts("void resetTest(void)")
+    output.puts("{")
+    output.puts("  CMock_Verify();") unless (used_mocks.empty?)
+    output.puts("  CMock_Destroy();") unless (used_mocks.empty?)
+    output.puts("  #{@options[:teardown_name]}();")
+    output.puts("  CMock_Init();") unless (used_mocks.empty?)
+    output.puts("  #{@options[:setup_name]}();")
+    output.puts("}")
+  end
+
+  def create_main(output, filename, tests, used_mocks)
+    output.puts("\n\n/*=======MAIN=====*/")
+    if (@options[:main_name] != "main")
+      output.puts("int #{@options[:main_name]}(void);")
+    end
+    output.puts("int #{@options[:main_name]}(void)")
+    output.puts("{")
+    output.puts("  suite_setup();") unless @options[:suite_setup].nil?
+    output.puts("  UnityBegin(\"#{filename.gsub(/\\/,'\\\\')}\");")
+    if (@options[:use_param_tests])
+      tests.each do |test|
+        if ((test[:args].nil?) or (test[:args].empty?))
+          output.puts("  RUN_TEST(#{test[:test]}, #{test[:line_number]}, RUN_TEST_NO_ARGS);")
+        else
+          test[:args].each {|args| output.puts("  RUN_TEST(#{test[:test]}, #{test[:line_number]}, #{args});")}
+        end
+      end
+    else
+        tests.each { |test| output.puts("  RUN_TEST(#{test[:test]}, #{test[:line_number]});") }
+    end
+    output.puts()
+    output.puts("  CMock_Guts_MemFreeFinal();") unless used_mocks.empty?
+    output.puts("  return #{@options[:suite_teardown].nil? ? "" : "suite_teardown"}(UnityEnd());")
+    output.puts("}")
+  end
+
+  def create_h_file(output, filename, tests, testfile_includes, used_mocks)
+    filename = File.basename(filename).gsub(/[-\/\\\.\,\s]/, "_").upcase
+    output.puts("/* AUTOGENERATED FILE. DO NOT EDIT. */")
+    output.puts("#ifndef _#{filename}")
+    output.puts("#define _#{filename}\n\n")
+    output.puts("#include \"#{@options[:framework].to_s}.h\"")
+    output.puts('#include "cmock.h"') unless (used_mocks.empty?)
+    @options[:includes].flatten.uniq.compact.each do |inc|
+      output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}")
+    end
+    testfile_includes.each do |inc|
+      output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}")
+    end
+    output.puts "\n"
+    tests.each do |test|
+      if ((test[:params].nil?) or (test[:params].empty?))
+        output.puts("void #{test[:test]}(void);")
+      else
+        output.puts("void #{test[:test]}(#{test[:params]});")
+      end
+    end
+    output.puts("#endif\n\n")
+  end
+end
+
+if ($0 == __FILE__)
+  options = { :includes => [] }
+  yaml_file = nil
+
+  #parse out all the options first (these will all be removed as we go)
+  ARGV.reject! do |arg|
+    case(arg)
+      when '-cexception'
+        options[:plugins] = [:cexception]; true
+      when /\.*\.ya?ml/
+        options = UnityTestRunnerGenerator.grab_config(arg); true
+      when /--(\w+)=\"?(.*)\"?/
+        options[$1.to_sym] = $2; true
+      when /\.*\.h/
+        options[:includes] << arg; true
+      else false
+    end
+  end
+
+  #make sure there is at least one parameter left (the input file)
+  if !ARGV[0]
+    puts ["\nusage: ruby #{__FILE__} (files) (options) input_test_file (output)",
+           "\n  input_test_file         - this is the C file you want to create a runner for",
+           "  output                  - this is the name of the runner file to generate",
+           "                            defaults to (input_test_file)_Runner",
+           "  files:",
+           "    *.yml / *.yaml        - loads configuration from here in :unity or :cmock",
+           "    *.h                   - header files are added as #includes in runner",
+           "  options:",
+           "    -cexception           - include cexception support",
+           "    --setup_name=\"\"       - redefine setUp func name to something else",
+           "    --teardown_name=\"\"    - redefine tearDown func name to something else",
+           "    --main_name=\"\"        - redefine main func name to something else",
+           "    --test_prefix=\"\"      - redefine test prefix from default test|spec|should",
+           "    --suite_setup=\"\"      - code to execute for setup of entire suite",
+           "    --suite_teardown=\"\"   - code to execute for teardown of entire suite",
+           "    --use_param_tests=1   - enable parameterized tests (disabled by default)",
+           "    --header_file=\"\"      - path/name of test header file to generate too"
+          ].join("\n")
+    exit 1
+  end
+
+  #create the default test runner name if not specified
+  ARGV[1] = ARGV[0].gsub(".c","_Runner.c") if (!ARGV[1])
+
+  UnityTestRunnerGenerator.new(options).run(ARGV[0], ARGV[1])
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/parseOutput.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,191 @@
+#============================================================
+#  Author:   John Theofanopoulos
+#  A simple parser.   Takes the output files generated during the build process and
+# extracts information relating to the tests.  
+#
+#  Notes:
+#    To capture an output file under VS builds use the following:
+#      devenv [build instructions]  > Output.txt & type Output.txt
+# 
+#    To capture an output file under GCC/Linux builds use the following:
+#      make | tee Output.txt
+#
+#    To use this parser use the following command
+#    ruby parseOutput.rb [options] [file]
+#        options:  -xml  : produce a JUnit compatible XML file
+#        file      :  file to scan for results
+#============================================================
+
+
+class ParseOutput
+# The following flag is set to true when a test is found or false otherwise.
+    @testFlag
+    @xmlOut
+    @arrayList
+    @totalTests
+    @classIndex
+
+#   Set the flag to indicate if there will be an XML output file or not  
+    def setXmlOutput()
+        @xmlOut = true
+    end
+    
+#  if write our output to XML
+    def writeXmlOuput()
+            output = File.open("report.xml", "w")
+            output << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+            @arrayList.each do |item|
+                output << item << "\n"
+            end
+            output << "</testsuite>\n"
+    end
+    
+#  This function will try and determine when the suite is changed.   This is
+# is the name that gets added to the classname parameter.
+    def  testSuiteVerify(testSuiteName)
+        if @testFlag == false
+            @testFlag = true;
+            # Split the path name 
+            testName = testSuiteName.split("/")
+            # Remove the extension
+            baseName = testName[testName.size - 1].split(".")
+            @testSuite = "test." + baseName[0]
+            printf "New Test: %s\n", @testSuite
+        end
+    end
+    
+
+# Test was flagged as having passed so format the output
+    def testPassed(array)
+        lastItem = array.length - 1
+        testName = array[lastItem - 1]
+        testSuiteVerify(array[@className])
+        printf "%-40s PASS\n", testName
+        if @xmlOut == true
+            @arrayList.push "     <testcase classname=\"" + @testSuite + "\" name=\"" + testName + "\"/>"
+        end          
+    end
+
+# Test was flagged as being ingored so format the output
+    def testIgnored(array)
+        lastItem = array.length - 1
+        testName = array[lastItem - 2]
+        reason = array[lastItem].chomp
+        testSuiteVerify(array[@className])
+        printf "%-40s IGNORED\n", testName
+        if @xmlOut == true
+            @arrayList.push "     <testcase classname=\"" + @testSuite + "\" name=\"" + testName + "\">"
+            @arrayList.push "            <skipped type=\"TEST IGNORED\"> " + reason + " </skipped>"
+            @arrayList.push "     </testcase>"
+        end          
+    end
+
+# Test was flagged as having failed  so format the line
+    def testFailed(array)
+        lastItem = array.length - 1
+        testName = array[lastItem - 2]
+        reason = array[lastItem].chomp + " at line: " + array[lastItem - 3]
+        testSuiteVerify(array[@className])
+        printf "%-40s FAILED\n", testName
+        if @xmlOut == true
+            @arrayList.push "     <testcase classname=\"" + @testSuite + "\" name=\"" + testName + "\">"
+            @arrayList.push "            <failure type=\"ASSERT FAILED\"> " + reason + " </failure>"
+            @arrayList.push "     </testcase>"
+        end          
+    end
+
+    
+# Figure out what OS we are running on.   For now we are assuming if it's not Windows it must
+# be Unix based.  
+    def detectOS()
+        myOS = RUBY_PLATFORM.split("-")
+        if myOS.size == 2
+            if myOS[1] == "mingw32"
+                @className = 1
+            else
+                @className = 0
+            end
+	else
+                @className = 0
+        end
+        
+    end
+
+# Main function used to parse the file that was captured.
+    def process(name)
+        @testFlag = false
+        @arrayList = Array.new
+
+        detectOS()
+
+        puts "Parsing file: " + name
+    
+      
+        testPass = 0
+        testFail = 0
+        testIgnore = 0
+        puts ""
+        puts "=================== RESULTS ====================="
+        puts ""
+        File.open(name).each do |line|
+        # Typical test lines look like this:
+        # <path>/<test_file>.c:36:test_tc1000_opsys:FAIL: Expected 1 Was 0
+        # <path>/<test_file>.c:112:test_tc5004_initCanChannel:IGNORE: Not Yet Implemented
+        # <path>/<test_file>.c:115:test_tc5100_initCanVoidPtrs:PASS
+        #
+        # where path is different on Unix vs Windows devices (Windows leads with a drive letter)
+            lineArray = line.split(":")
+            lineSize = lineArray.size
+            # If we were able to split the line then we can look to see if any of our target words
+            # were found.  Case is important.
+            if lineSize >= 4
+                # Determine if this test passed
+                if  line.include? ":PASS"
+                    testPassed(lineArray)
+                    testPass += 1
+                elsif line.include? ":FAIL:"
+                    testFailed(lineArray)
+                    testFail += 1
+                elsif line.include? ":IGNORE:"
+                    testIgnored(lineArray)
+                    testIgnore += 1
+                # If none of the keywords are found there are no more tests for this suite so clear
+                # the test flag
+                else
+                    @testFlag = false
+                end
+            else
+                @testFlag = false
+                end
+            end
+        puts ""
+        puts "=================== SUMMARY ====================="
+        puts ""
+        puts "Tests Passed  : " + testPass.to_s
+        puts "Tests Failed  : " + testFail.to_s
+        puts "Tests Ignored : " + testIgnore.to_s
+        @totalTests = testPass + testFail + testIgnore
+        if @xmlOut == true
+            heading = "<testsuite tests=\"" +  @totalTests.to_s  + "\" failures=\"" + testFail.to_s + "\""  + " skips=\"" +  testIgnore.to_s + "\">" 
+            @arrayList.insert(0, heading) 
+            writeXmlOuput()
+        end
+
+    #  return result
+    end
+
+ end
+
+# If the command line has no values in, used a default value of Output.txt
+parseMyFile = ParseOutput.new
+
+if ARGV.size >= 1 
+    ARGV.each do |a|
+        if a == "-xml"
+            parseMyFile.setXmlOutput();
+        else
+            parseMyFile.process(a)
+            break
+        end
+    end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/stylize_as_junit.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,264 @@
+#!/usr/bin/ruby
+#
+# unity_to_junit.rb
+#
+require 'fileutils'
+require 'optparse'
+require 'ostruct'
+require 'set'
+
+require 'pp'
+
+VERSION = 1.0
+
+class ArgvParser
+
+  #
+  # Return a structure describing the options.
+  #
+  def self.parse(args)
+    # The options specified on the command line will be collected in *options*.
+    # We set default values here.
+    options = OpenStruct.new
+    options.results_dir = "."
+    options.root_path = "."
+    options.out_file = "results.xml"
+
+    opts = OptionParser.new do |opts|
+      opts.banner = "Usage: unity_to_junit.rb [options]"
+
+      opts.separator ""
+      opts.separator "Specific options:"
+
+      opts.on("-r", "--results <dir>", "Look for Unity Results files here.") do |results|
+        #puts "results #{results}"
+        options.results_dir = results
+      end
+
+      opts.on("-p", "--root_path <path>", "Prepend this path to files in results.") do |root_path|
+        options.root_path = root_path
+      end
+
+      opts.on("-o", "--output <filename>", "XML file to generate.") do |out_file|
+        #puts "out_file: #{out_file}"
+        options.out_file = out_file
+      end
+
+      opts.separator ""
+      opts.separator "Common options:"
+
+      # No argument, shows at tail.  This will print an options summary.
+      opts.on_tail("-h", "--help", "Show this message") do
+        puts opts
+        exit
+      end
+
+      # Another typical switch to print the version.
+      opts.on_tail("--version", "Show version") do
+        puts "unity_to_junit.rb version #{VERSION}"
+        exit
+      end
+    end
+
+    opts.parse!(args)
+    options
+  end  # parse()
+
+end  # class OptparseExample
+
+class UnityToJUnit
+  include FileUtils::Verbose
+  attr_reader :report, :total_tests, :failures, :ignored
+
+  def initialize
+    @report = ''
+    @unit_name = ''
+  end
+
+  def run
+    # Clean up result file names
+    results = @targets.map {|target| target.gsub(/\\/,"/")}
+    #puts "Output File: #{@out_file}"
+    f = File.new(@out_file, "w")
+    write_xml_header(f)
+    write_suites_header( f )
+    results.each do |result_file|
+      lines = File.readlines(result_file).map { |line| line.chomp }
+      if lines.length == 0
+        raise "Empty test result file: #{result_file}"
+      else
+        result_output = get_details(result_file, lines)
+        tests,failures,ignored = parse_test_summary(lines)
+        result_output[:counts][:total] = tests
+        result_output[:counts][:failed] = failures
+        result_output[:counts][:ignored] = ignored
+        result_output[:counts][:passed] = (result_output[:counts][:total] - result_output[:counts][:failed] - result_output[:counts][:ignored])
+      end
+      #use line[0] from the test output to get the test_file path and name
+      test_file_str = lines[0].gsub("\\","/")
+      test_file_str = test_file_str.split(":")
+      test_file = if (test_file_str.length < 2)
+        result_file
+      else
+        test_file_str[0] + ':' + test_file_str[1]
+      end
+      result_output[:source][:path] = File.dirname(test_file)
+      result_output[:source][:file] = File.basename(test_file)
+
+      # save result_output
+      @unit_name = File.basename(test_file, ".*")
+
+      write_suite_header( result_output[:counts], f)
+      write_failures( result_output, f )
+      write_tests( result_output, f )
+      write_ignored( result_output, f )
+      write_suite_footer( f )
+    end
+    write_suites_footer( f )
+    f.close
+  end
+
+  def set_targets(target_array)
+    @targets = target_array
+  end
+
+  def set_root_path(path)
+    @root = path
+  end
+  def set_out_file(filename)
+    @out_file = filename
+  end
+  def usage(err_msg=nil)
+    puts "\nERROR: "
+    puts err_msg if err_msg
+    puts "Usage: unity_to_junit.rb [options]"
+    puts ""
+    puts "Specific options:"
+    puts "    -r, --results <dir>              Look for Unity Results files here."
+    puts "    -p, --root_path <path>           Prepend this path to files in results."
+    puts "    -o, --output <filename>          XML file to generate."
+    puts ""
+    puts "Common options:"
+    puts "    -h, --help                       Show this message"
+    puts "        --version                    Show version"
+
+    exit 1
+  end
+
+  protected
+  def get_details(result_file, lines)
+    results = get_results_structure
+    lines.each do |line|
+      line = line.gsub("\\","/")
+      src_file,src_line,test_name,status,msg = line.split(/:/)
+      line_out = ((@root and (@root != 0)) ? "#{@root}#{line}" : line ).gsub(/\//, "\\")
+      case(status)
+        when 'IGNORE' then results[:ignores] << {:test => test_name, :line => src_line, :message => msg}
+        when 'FAIL'   then results[:failures] << {:test => test_name, :line => src_line, :message => msg}
+        when 'PASS'   then results[:successes] << {:test => test_name, :line => src_line, :message => msg}
+      end
+    end
+    return results
+  end
+
+  def parse_test_summary(summary)
+    if summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ }
+      [$1.to_i,$2.to_i,$3.to_i]
+    else
+      raise "Couldn't parse test results: #{summary}"
+    end
+  end
+  def here; File.expand_path(File.dirname(__FILE__)); end
+
+  private
+
+  def get_results_structure
+    return {
+      :source    => {:path => '', :file => ''},
+      :successes => [],
+      :failures  => [],
+      :ignores   => [],
+      :counts    => {:total => 0, :passed => 0, :failed => 0, :ignored  => 0},
+      :stdout    => [],
+    }
+  end
+
+  def write_xml_header( stream )
+    stream.puts "<?xml version='1.0' encoding='utf-8' ?>"
+  end
+
+  def write_suites_header( stream )
+    stream.puts "<testsuites>"
+  end
+
+  def write_suite_header( counts, stream )
+    stream.puts "\t<testsuite errors=\"0\" skipped=\"#{counts[:ignored]}\" failures=\"#{counts[:failed]}\" tests=\"#{counts[:total]}\" name=\"unity\">"
+  end
+
+  def write_failures( results, stream )
+    result = results[:failures]
+    result.each do |item|
+      filename = File.join(results[:source][:path], File.basename(results[:source][:file], '.*'))
+      stream.puts "\t\t<testcase classname=\"#{@unit_name}\" name=\"#{item[:test]}\" time=\"0\">"
+      stream.puts "\t\t\t<failure message=\"#{item[:message]}\" type=\"Assertion\"/>"
+      stream.puts "\t\t\t<system-err>&#xD;[File] #{filename}&#xD;[Line] #{item[:line]}&#xD;</system-err>"
+      stream.puts "\t\t</testcase>"
+    end
+  end
+
+  def write_tests( results, stream )
+    result = results[:successes]
+    result.each do |item|
+      filename = File.join(results[:source][:path], File.basename(results[:source][:file], '.*'))
+      stream.puts "\t\t<testcase classname=\"#{@unit_name}\" name=\"#{item[:test]}\" time=\"0\" />"
+    end
+  end
+
+  def write_ignored( results, stream )
+    result = results[:ignores]
+    result.each do |item|
+      filename = File.join(results[:source][:path], File.basename(results[:source][:file], '.*'))
+      puts "Writing ignored tests for test harness: #{filename}"
+      stream.puts "\t\t<testcase classname=\"#{@unit_name}\" name=\"#{item[:test]}\" time=\"0\">"
+      stream.puts "\t\t\t<skipped message=\"#{item[:message]}\" type=\"Assertion\"/>"
+      stream.puts "\t\t\t<system-err>&#xD;[File] #{filename}&#xD;[Line] #{item[:line]}&#xD;</system-err>"
+      stream.puts "\t\t</testcase>"
+    end
+  end
+
+  def write_suite_footer( stream )
+    stream.puts "\t</testsuite>"
+  end
+
+  def write_suites_footer( stream )
+    stream.puts "</testsuites>"
+  end
+end #UnityToJUnit
+
+if __FILE__ == $0
+  #parse out the command options
+  options = ArgvParser.parse(ARGV)
+
+  #create an instance to work with
+  utj = UnityToJUnit.new
+  begin
+    #look in the specified or current directory for result files
+    targets = "#{options.results_dir.gsub(/\\/, '/')}**/*.test*"
+
+    results = Dir[targets]
+    raise "No *.testpass, *.testfail, or *.testresults files found in '#{targets}'" if results.empty?
+    utj.set_targets(results)
+
+    #set the root path
+    utj.set_root_path(options.root_path)
+
+    #set the output XML file name
+    #puts "Output File from options: #{options.out_file}"
+    utj.set_out_file(options.out_file)
+
+    #run the summarizer
+    puts utj.run
+  rescue Exception => e
+    utj.usage e.message
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/test_file_filter.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,23 @@
+# ==========================================
+#   Unity Project - A Test Framework for C
+#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+#   [Released under MIT License. Please refer to license.txt for details]
+# ========================================== 
+
+require'yaml'
+
+module RakefileHelpers
+  class TestFileFilter
+    def initialize(all_files = false)
+      @all_files = all_files
+      if not @all_files == true
+        if File.exist?('test_file_filter.yml')
+          filters = YAML.load_file( 'test_file_filter.yml' )
+          @all_files, @only_files, @exclude_files = 
+            filters[:all_files], filters[:only_files], filters[:exclude_files] 
+        end
+      end
+    end		
+    attr_accessor :all_files, :only_files, :exclude_files
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/type_sanitizer.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,8 @@
+module TypeSanitizer
+  
+  def self.sanitize_c_identifier(unsanitized)
+    # convert filename to valid C identifier by replacing invalid chars with '_'
+    return unsanitized.gsub(/[-\/\\\.\,\s]/, "_")
+  end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/unity_test_summary.py	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,135 @@
+#! python3
+# ==========================================
+#   Unity Project - A Test Framework for C
+#   Copyright (c) 2015 Alexander Mueller / XelaRellum@web.de
+#   [Released under MIT License. Please refer to license.txt for details]
+#   Based on the ruby script by  Mike Karlesky, Mark VanderVoord, Greg Williams
+# ==========================================
+import sys
+import os
+import re
+from glob import glob
+
+class UnityTestSummary:
+    def __init__(self):
+        self.report = ''
+        self.total_tests = 0
+        self.failures = 0
+        self.ignored = 0
+
+    def run(self):
+        # Clean up result file names
+        results = []
+        for target in self.targets:
+            results.append(target.replace('\\', '/'))
+
+        # Dig through each result file, looking for details on pass/fail:
+        failure_output = []
+        ignore_output = []
+
+        for result_file in results:
+            lines = list(map(lambda line: line.rstrip(), open(result_file, "r").read().split('\n')))
+            if len(lines) == 0:
+                raise Exception("Empty test result file: %s" % result_file)
+
+            details = self.get_details(result_file, lines)
+            failures = details['failures']
+            ignores = details['ignores']
+            if len(failures) > 0: failure_output.append('\n'.join(failures))
+            if len(ignores) > 0: ignore_output.append('n'.join(ignores))
+            tests,failures,ignored = self.parse_test_summary('\n'.join(lines))
+            self.total_tests += tests
+            self.failures += failures
+            self.ignored += ignored
+
+        if self.ignored > 0:
+            self.report += "\n"
+            self.report += "--------------------------\n"
+            self.report += "UNITY IGNORED TEST SUMMARY\n"
+            self.report += "--------------------------\n"
+            self.report += "\n".join(ignore_output)
+
+        if self.failures > 0:
+            self.report += "\n"
+            self.report += "--------------------------\n"
+            self.report += "UNITY FAILED TEST SUMMARY\n"
+            self.report += "--------------------------\n"
+            self.report += '\n'.join(failure_output)
+
+        self.report += "\n"
+        self.report += "--------------------------\n"
+        self.report += "OVERALL UNITY TEST SUMMARY\n"
+        self.report += "--------------------------\n"
+        self.report += "{total_tests} TOTAL TESTS {failures} TOTAL FAILURES {ignored} IGNORED\n".format(total_tests = self.total_tests, failures=self.failures, ignored=self.ignored)
+        self.report += "\n"
+
+        return self.report
+
+    def set_targets(self, target_array):
+            self.targets = target_array
+
+    def set_root_path(self, path):
+        self.root = path
+
+    def usage(self, err_msg=None):
+        print("\nERROR: ")
+        if err_msg:
+            print(err_msg)
+        print("\nUsage: unity_test_summary.py result_file_directory/ root_path/")
+        print("     result_file_directory - The location of your results files.")
+        print("                             Defaults to current directory if not specified.")
+        print("                             Should end in / if specified.")
+        print("     root_path - Helpful for producing more verbose output if using relative paths.")
+        sys.exit(1)
+
+    def get_details(self, result_file, lines):
+        results = { 'failures': [], 'ignores': [], 'successes': [] }
+        for line in lines:
+            parts = line.split(':')
+            if len(parts) != 5:
+                continue
+            src_file,src_line,test_name,status,msg = parts
+            if len(self.root) > 0:
+                line_out = "%s%s" % (self.root, line)
+            else:
+                line_out = line
+            if status == 'IGNORE':
+                results['ignores'].append(line_out)
+            elif status == 'FAIL':
+                results['failures'].append(line_out)
+            elif status == 'PASS':
+                results['successes'].append(line_out)
+        return results
+
+    def parse_test_summary(self, summary):
+        m = re.search(r"([0-9]+) Tests ([0-9]+) Failures ([0-9]+) Ignored", summary)
+        if not m:
+            raise Exception("Couldn't parse test results: %s" % summary)
+
+        return int(m.group(1)), int(m.group(2)), int(m.group(3))
+
+
+if __name__ == '__main__':
+  uts = UnityTestSummary()
+  try:
+    #look in the specified or current directory for result files
+    if len(sys.argv) > 1:
+        targets_dir = sys.argv[1]
+    else:
+        targets_dir = './'
+    targets = list(map(lambda x: x.replace('\\', '/'), glob(targets_dir + '*.test*')))
+    if len(targets) == 0:
+        raise Exception("No *.testpass or *.testfail files found in '%s'" % targets_dir)
+    uts.set_targets(targets)
+
+    #set the root path
+    if len(sys.argv) > 2:
+        root_path = sys.argv[2]
+    else:
+        root_path = os.path.split(__file__)[0]
+    uts.set_root_path(root_path)
+
+    #run the summarizer
+    print(uts.run())
+  except Exception as e:
+    uts.usage(e)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/unity_test_summary.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,148 @@
+# ==========================================
+#   Unity Project - A Test Framework for C
+#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+#   [Released under MIT License. Please refer to license.txt for details]
+# ==========================================
+
+#!/usr/bin/ruby
+#
+# unity_test_summary.rb
+#
+require 'fileutils'
+require 'set'
+
+class UnityTestSummary
+  include FileUtils::Verbose
+
+  attr_reader :report, :total_tests, :failures, :ignored
+
+  def initialize(opts = {})
+    @report = ''
+    @total_tests = 0
+    @failures = 0
+    @ignored = 0
+
+
+  end
+
+  def run
+    # Clean up result file names
+    results = @targets.map {|target| target.gsub(/\\/,'/')}
+
+    # Dig through each result file, looking for details on pass/fail:
+    failure_output = []
+    ignore_output = []
+
+    results.each do |result_file|
+      lines = File.readlines(result_file).map { |line| line.chomp }
+      if lines.length == 0
+        raise "Empty test result file: #{result_file}"
+      else
+        output = get_details(result_file, lines)
+        failure_output << output[:failures] unless output[:failures].empty?
+        ignore_output  << output[:ignores]  unless output[:ignores].empty?
+        tests,failures,ignored = parse_test_summary(lines)
+        @total_tests += tests
+        @failures += failures
+        @ignored += ignored
+      end
+    end
+
+    if @ignored > 0
+      @report += "\n"
+      @report += "--------------------------\n"
+      @report += "UNITY IGNORED TEST SUMMARY\n"
+      @report += "--------------------------\n"
+      @report += ignore_output.flatten.join("\n")
+    end
+
+    if @failures > 0
+      @report += "\n"
+      @report += "--------------------------\n"
+      @report += "UNITY FAILED TEST SUMMARY\n"
+      @report += "--------------------------\n"
+      @report += failure_output.flatten.join("\n")
+    end
+
+    @report += "\n"
+    @report += "--------------------------\n"
+    @report += "OVERALL UNITY TEST SUMMARY\n"
+    @report += "--------------------------\n"
+    @report += "#{@total_tests} TOTAL TESTS #{@failures} TOTAL FAILURES #{@ignored} IGNORED\n"
+    @report += "\n"
+  end
+
+  def set_targets(target_array)
+    @targets = target_array
+  end
+
+  def set_root_path(path)
+    @root = path
+  end
+
+  def usage(err_msg=nil)
+    puts "\nERROR: "
+    puts err_msg if err_msg
+    puts "\nUsage: unity_test_summary.rb result_file_directory/ root_path/"
+    puts "     result_file_directory - The location of your results files."
+    puts "                             Defaults to current directory if not specified."
+    puts "                             Should end in / if specified."
+    puts "     root_path - Helpful for producing more verbose output if using relative paths."
+    exit 1
+  end
+
+  protected
+
+  def get_details(result_file, lines)
+    results = { :failures => [], :ignores => [], :successes => [] }
+    lines.each do |line|
+      src_file,src_line,test_name,status,msg = line.split(/:/)
+      line_out = ((@root && (@root != 0)) ? "#{@root}#{line}" : line ).gsub(/\//, "\\")
+      case(status)
+        when 'IGNORE' then results[:ignores]   << line_out
+        when 'FAIL'   then results[:failures]  << line_out
+        when 'PASS'   then results[:successes] << line_out
+      end
+    end
+    return results
+  end
+
+  def parse_test_summary(summary)
+    if summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ }
+      [$1.to_i,$2.to_i,$3.to_i]
+    else
+      raise "Couldn't parse test results: #{summary}"
+    end
+  end
+
+  def here; File.expand_path(File.dirname(__FILE__)); end
+
+end
+
+if $0 == __FILE__
+
+  #parse out the command options
+  opts, args = ARGV.partition {|v| v =~ /^--\w+/}
+  opts.map! {|v| v[2..-1].to_sym }
+
+  #create an instance to work with
+  uts = UnityTestSummary.new(opts)
+
+  begin
+    #look in the specified or current directory for result files
+    args[0] ||= './'
+    targets = "#{ARGV[0].gsub(/\\/, '/')}**/*.test*"
+    results = Dir[targets]
+    raise "No *.testpass, *.testfail, or *.testresults files found in '#{targets}'" if results.empty?
+    uts.set_targets(results)
+
+    #set the root path
+    args[1] ||= Dir.pwd + '/'
+    uts.set_root_path(ARGV[1])
+
+    #run the summarizer
+    puts uts.run
+  rescue Exception => e
+    uts.usage e.message
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/auto/unity_to_junit.py	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,146 @@
+import sys
+import os
+from glob import glob
+
+from pyparsing import *
+from junit_xml import TestSuite, TestCase
+
+
+class UnityTestSummary:
+    def __init__(self):
+        self.report = ''
+        self.total_tests = 0
+        self.failures = 0
+        self.ignored = 0
+        self.targets = 0
+        self.root = None
+        self.test_suites = dict()
+
+    def run(self):
+        # Clean up result file names
+        results = []
+        for target in self.targets:
+            results.append(target.replace('\\', '/'))
+
+        # Dig through each result file, looking for details on pass/fail:
+        for result_file in results:
+            lines = list(map(lambda line: line.rstrip(), open(result_file, "r").read().split('\n')))
+            if len(lines) == 0:
+                raise Exception("Empty test result file: %s" % result_file)
+
+            # define an expression for your file reference
+            entry_one = Combine(
+                oneOf(list(alphas)) + ':/' +
+                Word(alphanums + '_-./'))
+
+            entry_two = Word(printables + ' ', excludeChars=':')
+            entry = entry_one | entry_two
+
+            delimiter = Literal(':').suppress()
+            tc_result_line = Group(entry.setResultsName('tc_file_name') + delimiter + entry.setResultsName(
+                'tc_line_nr') + delimiter + entry.setResultsName('tc_name') + delimiter + entry.setResultsName(
+                'tc_status') + Optional(
+                delimiter + entry.setResultsName('tc_msg'))).setResultsName("tc_line")
+
+            eol = LineEnd().suppress()
+            sol = LineStart().suppress()
+            blank_line = sol + eol
+
+            tc_summary_line = Group(Word(nums).setResultsName("num_of_tests") + "Tests" + Word(nums).setResultsName(
+                "num_of_fail") + "Failures" + Word(nums).setResultsName("num_of_ignore") + "Ignored").setResultsName(
+                "tc_summary")
+            tc_end_line = Or(Literal("FAIL"), Literal('Ok')).setResultsName("tc_result")
+
+            # run it and see...
+            pp1 = tc_result_line | Optional(tc_summary_line | tc_end_line)
+            pp1.ignore(blank_line | OneOrMore("-"))
+
+            result = list()
+            for l in lines:
+                result.append((pp1.parseString(l)).asDict())
+            # delete empty results
+            result = filter(None, result)
+
+            tc_list = list()
+            for r in result:
+                if 'tc_line' in r:
+                    tmp_tc_line = r['tc_line']
+
+                    # get only the file name which will be used as the classname
+                    file_name = tmp_tc_line['tc_file_name'].split('\\').pop().split('/').pop().rsplit('.', 1)[0]
+                    tmp_tc = TestCase(name=tmp_tc_line['tc_name'], classname=file_name)
+                    if 'tc_status' in tmp_tc_line:
+                        if str(tmp_tc_line['tc_status']) == 'IGNORE':
+                            if 'tc_msg' in tmp_tc_line:
+                                tmp_tc.add_skipped_info(message=tmp_tc_line['tc_msg'],
+                                                        output=r'[File]={0}, [Line]={1}'.format(
+                                                            tmp_tc_line['tc_file_name'], tmp_tc_line['tc_line_nr']))
+                            else:
+                                tmp_tc.add_skipped_info(message=" ")
+                        elif str(tmp_tc_line['tc_status']) == 'FAIL':
+                            if 'tc_msg' in tmp_tc_line:
+                                tmp_tc.add_failure_info(message=tmp_tc_line['tc_msg'],
+                                                        output=r'[File]={0}, [Line]={1}'.format(
+                                                            tmp_tc_line['tc_file_name'], tmp_tc_line['tc_line_nr']))
+                            else:
+                                tmp_tc.add_failure_info(message=" ")
+
+                    tc_list.append((str(result_file), tmp_tc))
+
+            for k, v in tc_list:
+                try:
+                    self.test_suites[k].append(v)
+                except KeyError:
+                    self.test_suites[k] = [v]
+        ts = []
+        for suite_name in self.test_suites:
+            ts.append(TestSuite(suite_name, self.test_suites[suite_name]))
+
+        with open('result.xml', 'w') as f:
+            TestSuite.to_file(f, ts, prettyprint='True', encoding='utf-8')
+
+        return self.report
+
+    def set_targets(self, target_array):
+        self.targets = target_array
+
+    def set_root_path(self, path):
+        self.root = path
+
+    @staticmethod
+    def usage(err_msg=None):
+        print("\nERROR: ")
+        if err_msg:
+            print(err_msg)
+        print("\nUsage: unity_test_summary.py result_file_directory/ root_path/")
+        print("     result_file_directory - The location of your results files.")
+        print("                             Defaults to current directory if not specified.")
+        print("                             Should end in / if specified.")
+        print("     root_path - Helpful for producing more verbose output if using relative paths.")
+        sys.exit(1)
+
+
+if __name__ == '__main__':
+    uts = UnityTestSummary()
+    try:
+        # look in the specified or current directory for result files
+        if len(sys.argv) > 1:
+            targets_dir = sys.argv[1]
+        else:
+            targets_dir = './'
+        targets = list(map(lambda x: x.replace('\\', '/'), glob(targets_dir + '*.test*')))
+        if len(targets) == 0:
+            raise Exception("No *.testpass or *.testfail files found in '%s'" % targets_dir)
+        uts.set_targets(targets)
+
+        # set the root path
+        if len(sys.argv) > 2:
+            root_path = sys.argv[2]
+        else:
+            root_path = os.path.split(__file__)[0]
+        uts.set_root_path(root_path)
+
+        # run the summarizer
+        print(uts.run())
+    except Exception as e:
+        UnityTestSummary.usage(e)
Binary file pal/Test/Unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf has changed
Binary file pal/Test/Unity/docs/UnityAssertionsReference.pdf has changed
Binary file pal/Test/Unity/docs/UnityConfigurationGuide.pdf has changed
Binary file pal/Test/Unity/docs/UnityGettingStartedGuide.pdf has changed
Binary file pal/Test/Unity/docs/UnityHelperScriptsGuide.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/docs/license.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) <year> 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_1/readme.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,5 @@
+Example 1
+=========
+
+Close to the simplest possible example of Unity, using only basic features.
+Run make to build & run the example tests.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_1/src/ProductionCode.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+
+#include "ProductionCode.h"
+
+int Counter = 0;
+int NumbersToFind[9] = { 0, 34, 55, 66, 32, 11, 1, 77, 888 }; /* some obnoxious array to search that is 1-based indexing instead of 0. */
+
+/* This function is supposed to search through NumbersToFind and find a particular number.  
+ * If it finds it, the index is returned.  Otherwise 0 is returned which sorta makes sense since 
+ * NumbersToFind is indexed from 1.  Unfortunately it's broken 
+ * (and should therefore be caught by our tests) */
+int FindFunction_WhichIsBroken(int NumberToFind)
+{
+    int i = 0;
+    while (i <= 8) /* Notice I should have been in braces */
+        i++;
+        if (NumbersToFind[i] == NumberToFind) /* Yikes!  I'm getting run after the loop finishes instead of during it! */
+            return i;
+    return 0;
+}
+
+int FunctionWhichReturnsLocalVariable(void)
+{
+    return Counter;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_1/src/ProductionCode.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,3 @@
+
+int FindFunction_WhichIsBroken(int NumberToFind);
+int FunctionWhichReturnsLocalVariable(void);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_1/src/ProductionCode2.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,11 @@
+
+#include "ProductionCode2.h"
+
+char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction)
+{
+  (void)Poor;
+  (void)LittleFunction;
+  /* Since There Are No Tests Yet, This Function Could Be Empty For All We Know.
+   * Which isn't terribly useful... but at least we put in a TEST_IGNORE so we won't forget */
+  return (char*)0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_1/src/ProductionCode2.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+
+char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_1/test/TestProductionCode.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,62 @@
+
+#include "ProductionCode.h"
+#include "unity.h"
+
+/* sometimes you may want to get at local data in a module.
+ * for example: If you plan to pass by reference, this could be useful
+ * however, it should often be avoided */
+extern int Counter; 
+
+void setUp(void)
+{
+  /* This is run before EACH TEST */
+  Counter = 0x5a5a;
+}
+
+void tearDown(void)
+{
+}
+
+void test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode(void)
+{
+  /* All of these should pass */
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(78));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(1));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(33));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(999));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(-1));
+}
+
+void test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken(void)
+{
+  /* You should see this line fail in your test summary */
+  TEST_ASSERT_EQUAL(1, FindFunction_WhichIsBroken(34));
+  
+  /* Notice the rest of these didn't get a chance to run because the line above failed.  
+   * Unit tests abort each test function on the first sign of trouble. 
+   * Then NEXT test function runs as normal. */
+  TEST_ASSERT_EQUAL(8, FindFunction_WhichIsBroken(8888));
+}
+
+void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue(void)
+{
+    /* This should be true because setUp set this up for us before this test */
+    TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
+    
+    /* This should be true because we can still change our answer */
+    Counter = 0x1234;
+    TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
+}
+
+void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain(void)
+{
+    /* This should be true again because setup was rerun before this test (and after we changed it to 0x1234) */
+    TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
+}
+
+void test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed(void)
+{
+    /* Sometimes you get the test wrong.  When that happens, you get a failure too... and a quick look should tell
+     * you what actually happened...which in this case was a failure to setup the initial condition. */
+    TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_1/test/TestProductionCode2.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,31 @@
+
+#include "ProductionCode2.h"
+#include "unity.h"
+
+/* These should be ignored because they are commented out in various ways:
+#include "whatever.h" 
+#include "somethingelse.h"
+*/
+
+void setUp(void)
+{
+}
+
+void tearDown(void)
+{
+}
+
+void test_IgnoredTest(void)
+{
+    TEST_IGNORE_MESSAGE("This Test Was Ignored On Purpose");
+}
+
+void test_AnotherIgnoredTest(void)
+{
+    TEST_IGNORE_MESSAGE("These Can Be Useful For Leaving Yourself Notes On What You Need To Do Yet");
+}
+
+void test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented(void)
+{
+    TEST_IGNORE(); /* Like This */
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,53 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+  } \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "ProductionCode2.h"
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_IgnoredTest(void);
+extern void test_AnotherIgnoredTest(void);
+extern void test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented(void);
+
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  tearDown();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("test/TestProductionCode2.c");
+  RUN_TEST(test_IgnoredTest, 18);
+  RUN_TEST(test_AnotherIgnoredTest, 23);
+  RUN_TEST(test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented, 28);
+
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,57 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+  } \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "ProductionCode.h"
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode(void);
+extern void test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken(void);
+extern void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue(void);
+extern void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain(void);
+extern void test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed(void);
+
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  tearDown();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("test/TestProductionCode.c");
+  RUN_TEST(test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode, 20);
+  RUN_TEST(test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken, 30);
+  RUN_TEST(test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue, 41);
+  RUN_TEST(test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain, 51);
+  RUN_TEST(test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed, 57);
+
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_2/readme.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,5 @@
+Example 2
+=========
+
+Same as the first example, but now using Unity's test fixture to group tests
+together. Using the test fixture also makes writing test runners much easier.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_2/src/ProductionCode.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+
+#include "ProductionCode.h"
+
+int Counter = 0;
+int NumbersToFind[9] = { 0, 34, 55, 66, 32, 11, 1, 77, 888 }; //some obnoxious array to search that is 1-based indexing instead of 0.
+
+// This function is supposed to search through NumbersToFind and find a particular number.  
+// If it finds it, the index is returned.  Otherwise 0 is returned which sorta makes sense since 
+// NumbersToFind is indexed from 1.  Unfortunately it's broken 
+// (and should therefore be caught by our tests)
+int FindFunction_WhichIsBroken(int NumberToFind)
+{
+    int i = 0;
+    while (i <= 8) //Notice I should have been in braces
+        i++;
+        if (NumbersToFind[i] == NumberToFind) //Yikes!  I'm getting run after the loop finishes instead of during it!
+            return i;
+    return 0;
+}
+
+int FunctionWhichReturnsLocalVariable(void)
+{
+    return Counter;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_2/src/ProductionCode.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,3 @@
+
+int FindFunction_WhichIsBroken(int NumberToFind);
+int FunctionWhichReturnsLocalVariable(void);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_2/src/ProductionCode2.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,11 @@
+
+#include "ProductionCode2.h"
+
+char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction)
+{
+  (void)Poor;
+  (void)LittleFunction;
+  //Since There Are No Tests Yet, This Function Could Be Empty For All We Know.
+  // Which isn't terribly useful... but at least we put in a TEST_IGNORE so we won't forget
+  return (char*)0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_2/src/ProductionCode2.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+
+char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_2/test/TestProductionCode.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,64 @@
+#include "ProductionCode.h"
+#include "unity.h"
+#include "unity_fixture.h"
+
+TEST_GROUP(ProductionCode);
+
+//sometimes you may want to get at local data in a module.
+//for example: If you plan to pass by reference, this could be useful
+//however, it should often be avoided
+extern int Counter;
+
+TEST_SETUP(ProductionCode)
+{
+  //This is run before EACH TEST
+  Counter = 0x5a5a;
+}
+
+TEST_TEAR_DOWN(ProductionCode)
+{
+}
+
+TEST(ProductionCode, FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode)
+{
+  //All of these should pass
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(78));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(1));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(33));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(999));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(-1));
+}
+
+TEST(ProductionCode, FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken)
+{
+  // You should see this line fail in your test summary
+  TEST_ASSERT_EQUAL(1, FindFunction_WhichIsBroken(34));
+
+  // Notice the rest of these didn't get a chance to run because the line above failed.
+  // Unit tests abort each test function on the first sign of trouble.
+  // Then NEXT test function runs as normal.
+  TEST_ASSERT_EQUAL(8, FindFunction_WhichIsBroken(8888));
+}
+
+TEST(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue)
+{
+    //This should be true because setUp set this up for us before this test
+    TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
+
+    //This should be true because we can still change our answer
+    Counter = 0x1234;
+    TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
+}
+
+TEST(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain)
+{
+    //This should be true again because setup was rerun before this test (and after we changed it to 0x1234)
+    TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
+}
+
+TEST(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed)
+{
+    //Sometimes you get the test wrong.  When that happens, you get a failure too... and a quick look should tell
+    // you what actually happened...which in this case was a failure to setup the initial condition.
+    TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_2/test/TestProductionCode2.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,33 @@
+#include "ProductionCode2.h"
+#include "unity.h"
+#include "unity_fixture.h"
+
+TEST_GROUP(ProductionCode2);
+
+/* These should be ignored because they are commented out in various ways:
+#include "whatever.h"
+*/
+//#include "somethingelse.h"
+
+TEST_SETUP(ProductionCode2)
+{
+}
+
+TEST_TEAR_DOWN(ProductionCode2)
+{
+}
+
+TEST(ProductionCode2, IgnoredTest)
+{
+    TEST_IGNORE_MESSAGE("This Test Was Ignored On Purpose");
+}
+
+TEST(ProductionCode2, AnotherIgnoredTest)
+{
+    TEST_IGNORE_MESSAGE("These Can Be Useful For Leaving Yourself Notes On What You Need To Do Yet");
+}
+
+TEST(ProductionCode2, ThisFunctionHasNotBeenTested_NeedsToBeImplemented)
+{
+    TEST_IGNORE(); //Like This
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,9 @@
+#include "unity.h"
+#include "unity_fixture.h"
+
+TEST_GROUP_RUNNER(ProductionCode2)
+{
+  RUN_TEST_CASE(ProductionCode2, IgnoredTest);
+  RUN_TEST_CASE(ProductionCode2, AnotherIgnoredTest);
+  RUN_TEST_CASE(ProductionCode2, ThisFunctionHasNotBeenTested_NeedsToBeImplemented);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,11 @@
+#include "unity.h"
+#include "unity_fixture.h"
+
+TEST_GROUP_RUNNER(ProductionCode)
+{
+  RUN_TEST_CASE(ProductionCode, FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode);
+  RUN_TEST_CASE(ProductionCode, FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken);
+  RUN_TEST_CASE(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue);
+  RUN_TEST_CASE(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain);
+  RUN_TEST_CASE(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_2/test/test_runners/all_tests.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,12 @@
+#include "unity_fixture.h"
+
+static void RunAllTests(void)
+{
+  RUN_TEST_GROUP(ProductionCode);
+  RUN_TEST_GROUP(ProductionCode2);
+}
+
+int main(int argc, const char * argv[])
+{
+  return UnityMain(argc, argv, RunAllTests);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/helper/UnityHelper.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,10 @@
+#include "unity.h"
+#include "UnityHelper.h"
+#include <stdio.h>
+#include <string.h>
+
+void AssertEqualExampleStruct(const EXAMPLE_STRUCT_T expected, const EXAMPLE_STRUCT_T actual, const unsigned short line)
+{
+    UNITY_TEST_ASSERT_EQUAL_INT(expected.x, actual.x, line, "Example Struct Failed For Field x");
+    UNITY_TEST_ASSERT_EQUAL_INT(expected.y, actual.y, line, "Example Struct Failed For Field y");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/helper/UnityHelper.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,12 @@
+#ifndef _TESTHELPER_H
+#define _TESTHELPER_H
+
+#include "Types.h"
+
+void AssertEqualExampleStruct(const EXAMPLE_STRUCT_T expected, const EXAMPLE_STRUCT_T actual, const unsigned short line);
+
+#define UNITY_TEST_ASSERT_EQUAL_EXAMPLE_STRUCT_T(expected, actual, line, message) AssertEqualExampleStruct(expected, actual, line);
+
+#define TEST_ASSERT_EQUAL_EXAMPLE_STRUCT_T(expected, actual) UNITY_TEST_ASSERT_EQUAL_EXAMPLE_STRUCT_T(expected, actual, __LINE__, NULL);
+
+#endif // _TESTHELPER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/rakefile.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,43 @@
+HERE = File.expand_path(File.dirname(__FILE__)) + '/'
+UNITY_ROOT = File.expand_path(File.dirname(__FILE__)) + '/../..'
+
+require 'rake'
+require 'rake/clean'
+require HERE+'rakefile_helper'
+
+TEMP_DIRS = [
+	File.join(HERE, 'build')
+]
+
+TEMP_DIRS.each do |dir|
+  directory(dir)
+  CLOBBER.include(dir)
+end
+
+task :prepare_for_tests => TEMP_DIRS
+
+include RakefileHelpers
+
+# Load default configuration, for now
+DEFAULT_CONFIG_FILE = 'target_gcc_32.yml'
+configure_toolchain(DEFAULT_CONFIG_FILE)
+
+task :unit => [:prepare_for_tests] do
+  run_tests get_unit_test_files
+end
+
+desc "Generate test summary"
+task :summary do
+  report_summary
+end
+
+desc "Build and test Unity"
+task :all => [:clean, :unit, :summary]
+task :default => [:clobber, :all]
+task :ci => [:default]
+task :cruise => [:default]
+
+desc "Load configuration"
+task :config, :config_file do |t, args|
+  configure_toolchain(args[:config_file])
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/rakefile_helper.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,256 @@
+require 'yaml'
+require 'fileutils'
+require UNITY_ROOT+'/auto/unity_test_summary'
+require UNITY_ROOT+'/auto/generate_test_runner'
+require UNITY_ROOT+'/auto/colour_reporter'
+
+module RakefileHelpers
+
+  C_EXTENSION = '.c'
+
+  def load_configuration(config_file)
+    $cfg_file = config_file
+    $cfg = YAML.load(File.read($cfg_file))
+  end
+
+  def configure_clean
+    CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil?
+  end
+
+  def configure_toolchain(config_file=DEFAULT_CONFIG_FILE)
+    config_file += '.yml' unless config_file =~ /\.yml$/
+    load_configuration(config_file)
+    configure_clean
+  end
+
+  def get_unit_test_files
+    path = $cfg['compiler']['unit_tests_path'] + 'Test*' + C_EXTENSION
+    path.gsub!(/\\/, '/')
+    FileList.new(path)
+  end
+
+  def get_local_include_dirs
+    include_dirs = $cfg['compiler']['includes']['items'].dup
+    include_dirs.delete_if {|dir| dir.is_a?(Array)}
+    return include_dirs
+  end
+
+  def extract_headers(filename)
+    includes = []
+    lines = File.readlines(filename)
+    lines.each do |line|
+      m = line.match(/^\s*#include\s+\"\s*(.+\.[hH])\s*\"/)
+      if not m.nil?
+        includes << m[1]
+      end
+    end
+    return includes
+  end
+
+  def find_source_file(header, paths)
+    paths.each do |dir|
+      src_file = dir + header.ext(C_EXTENSION)
+      if (File.exists?(src_file))
+        return src_file
+      end
+    end
+    return nil
+  end
+
+  def tackit(strings)
+    if strings.is_a?(Array)
+      result = "\"#{strings.join}\""
+    else
+      result = strings
+    end
+    return result
+  end
+
+  def squash(prefix, items)
+    result = ''
+    items.each { |item| result += " #{prefix}#{tackit(item)}" }
+    return result
+  end
+
+  def build_compiler_fields
+    command  = tackit($cfg['compiler']['path'])
+    if $cfg['compiler']['defines']['items'].nil?
+      defines  = ''
+    else
+      defines  = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'])
+    end
+    options  = squash('', $cfg['compiler']['options'])
+    includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items'])
+    includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
+    return {:command => command, :defines => defines, :options => options, :includes => includes}
+  end
+
+  def compile(file, defines=[])
+    compiler = build_compiler_fields
+    cmd_str  = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " +
+               "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}"
+    obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}"
+    execute(cmd_str + obj_file)
+    return obj_file
+  end
+
+  def build_linker_fields
+    command  = tackit($cfg['linker']['path'])
+    if $cfg['linker']['options'].nil?
+      options  = ''
+    else
+      options  = squash('', $cfg['linker']['options'])
+    end
+    if ($cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?)
+      includes = ''
+    else
+      includes = squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items'])
+    end
+    includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
+    return {:command => command, :options => options, :includes => includes}
+  end
+
+  def link_it(exe_name, obj_list)
+    linker = build_linker_fields
+    cmd_str = "#{linker[:command]}#{linker[:options]}#{linker[:includes]} " +
+      (obj_list.map{|obj|"#{$cfg['linker']['object_files']['path']}#{obj} "}).join +
+      $cfg['linker']['bin_files']['prefix'] + ' ' +
+      $cfg['linker']['bin_files']['destination'] +
+      exe_name + $cfg['linker']['bin_files']['extension']
+    execute(cmd_str)
+  end
+
+  def build_simulator_fields
+    return nil if $cfg['simulator'].nil?
+    if $cfg['simulator']['path'].nil?
+      command = ''
+    else
+      command = (tackit($cfg['simulator']['path']) + ' ')
+    end
+    if $cfg['simulator']['pre_support'].nil?
+      pre_support = ''
+    else
+      pre_support = squash('', $cfg['simulator']['pre_support'])
+    end
+    if $cfg['simulator']['post_support'].nil?
+      post_support = ''
+    else
+      post_support = squash('', $cfg['simulator']['post_support'])
+    end
+    return {:command => command, :pre_support => pre_support, :post_support => post_support}
+  end
+
+  def execute(command_string, verbose=true, raise_on_fail=true)
+    report command_string
+    output = `#{command_string}`.chomp
+    report(output) if (verbose && !output.nil? && (output.length > 0))
+    if (($?.exitstatus != 0) and (raise_on_fail))
+      raise "Command failed. (Returned #{$?.exitstatus})"
+    end
+    return output
+  end
+
+  def report_summary
+    summary = UnityTestSummary.new
+    summary.set_root_path(HERE)
+    results_glob = "#{$cfg['compiler']['build_path']}*.test*"
+    results_glob.gsub!(/\\/, '/')
+    results = Dir[results_glob]
+    summary.set_targets(results)
+    summary.run
+    fail_out "FAIL: There were failures" if (summary.failures > 0)
+  end
+
+  def run_tests(test_files)
+
+    report 'Running system tests...'
+
+    # Tack on TEST define for compiling unit tests
+    load_configuration($cfg_file)
+    test_defines = ['TEST']
+    $cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil?
+    $cfg['compiler']['defines']['items'] << 'TEST'
+
+    include_dirs = get_local_include_dirs
+
+    # Build and execute each unit test
+    test_files.each do |test|
+      obj_list = []
+
+      # Detect dependencies and build required required modules
+      extract_headers(test).each do |header|
+        # Compile corresponding source file if it exists
+        src_file = find_source_file(header, include_dirs)
+        if !src_file.nil?
+          obj_list << compile(src_file, test_defines)
+        end
+      end
+
+      # Build the test runner (generate if configured to do so)
+      test_base = File.basename(test, C_EXTENSION)
+      runner_name = test_base + '_Runner.c'
+      if $cfg['compiler']['runner_path'].nil?
+        runner_path = $cfg['compiler']['build_path'] + runner_name
+        test_gen = UnityTestRunnerGenerator.new($cfg_file)
+        test_gen.run(test, runner_path)
+      else
+        runner_path = $cfg['compiler']['runner_path'] + runner_name
+      end
+
+      obj_list << compile(runner_path, test_defines)
+
+      # Build the test module
+      obj_list << compile(test, test_defines)
+
+      # Link the test executable
+      link_it(test_base, obj_list)
+
+      # Execute unit test and generate results file
+      simulator = build_simulator_fields
+      executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension']
+      if simulator.nil?
+        cmd_str = executable
+      else
+        cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}"
+      end
+      output = execute(cmd_str, true, false)
+      test_results = $cfg['compiler']['build_path'] + test_base
+      if output.match(/OK$/m).nil?
+        test_results += '.testfail'
+      else
+        test_results += '.testpass'
+      end
+      File.open(test_results, 'w') { |f| f.print output }
+    end
+  end
+
+  def build_application(main)
+
+    report "Building application..."
+
+    obj_list = []
+    load_configuration($cfg_file)
+    main_path = $cfg['compiler']['source_path'] + main + C_EXTENSION
+
+    # Detect dependencies and build required required modules
+    include_dirs = get_local_include_dirs
+    extract_headers(main_path).each do |header|
+      src_file = find_source_file(header, include_dirs)
+      if !src_file.nil?
+        obj_list << compile(src_file)
+      end
+    end
+
+    # Build the main source file
+    main_base = File.basename(main_path, C_EXTENSION)
+    obj_list << compile(main_path)
+
+    # Create the executable
+    link_it(main_base, obj_list)
+  end
+
+  def fail_out(msg)
+    puts msg
+    exit(-1)
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/readme.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,19 @@
+Example 3
+=========
+
+This example project gives an example of some passing, ignored, and failing tests.
+It's simple and meant for you to look over and get an idea for what all of this stuff does.
+
+You can build and test using the makefile if you have gcc installed (you may need to tweak
+the locations of some tools in the makefile).  Otherwise, the rake version will let you
+test with gcc or a couple versions of IAR.  You can tweak the yaml files to get those versions
+running.
+
+Ruby is required if you're using the rake version (obviously).  This version shows off most of
+Unity's advanced features (automatically creating test runners, fancy summaries, etc.)
+
+The makefile version doesn't require anything outside of your normal build tools, but won't do the
+extras for you.  So that you can test right away, we've written the test runners for you and
+put them in the test\no_ruby subdirectory.  If you make changes to the tests or source, you might
+need to update these (like when you add or remove tests).  Do that for a while and you'll learn
+why you really want to start using the Ruby tools.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/src/ProductionCode.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+
+#include "ProductionCode.h"
+
+int Counter = 0;
+int NumbersToFind[9] = { 0, 34, 55, 66, 32, 11, 1, 77, 888 }; //some obnoxious array to search that is 1-based indexing instead of 0.
+
+// This function is supposed to search through NumbersToFind and find a particular number.  
+// If it finds it, the index is returned.  Otherwise 0 is returned which sorta makes sense since 
+// NumbersToFind is indexed from 1.  Unfortunately it's broken 
+// (and should therefore be caught by our tests)
+int FindFunction_WhichIsBroken(int NumberToFind)
+{
+    int i = 0;
+    while (i <= 8) //Notice I should have been in braces
+        i++;
+        if (NumbersToFind[i] == NumberToFind) //Yikes!  I'm getting run after the loop finishes instead of during it!
+            return i;
+    return 0;
+}
+
+int FunctionWhichReturnsLocalVariable(void)
+{
+    return Counter;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/src/ProductionCode.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,3 @@
+
+int FindFunction_WhichIsBroken(int NumberToFind);
+int FunctionWhichReturnsLocalVariable(void);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/src/ProductionCode2.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,11 @@
+
+#include "ProductionCode2.h"
+
+char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction)
+{
+  (void)Poor;
+  (void)LittleFunction;
+  //Since There Are No Tests Yet, This Function Could Be Empty For All We Know.
+  // Which isn't terribly useful... but at least we put in a TEST_IGNORE so we won't forget
+  return (char*)0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/src/ProductionCode2.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+
+char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/target_gcc_32.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,46 @@
+# Copied from ~Unity/targets/gcc_32.yml
+unity_root:  &unity_root '../..'
+compiler:
+  path: gcc
+  source_path:     'src/'
+  unit_tests_path: &unit_tests_path 'test/'
+  build_path:      &build_path 'build/'
+  options:
+    - '-c'
+    - '-m32'
+    - '-Wall'
+    - '-Wno-address'
+    - '-std=c99'
+    - '-pedantic'
+  includes:
+    prefix: '-I'
+    items:
+      - 'src/'
+      - '../../src/'
+      - *unit_tests_path
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_INCLUDE_DOUBLE
+      - UNITY_SUPPORT_TEST_CASES
+  object_files:
+    prefix: '-o'
+    extension: '.o'
+    destination: *build_path
+linker:
+  path: gcc
+  options:
+    - -lm
+    - '-m32'
+  includes:
+    prefix: '-I'
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.exe'
+    destination: *build_path
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/test/TestProductionCode.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,62 @@
+
+#include "ProductionCode.h"
+#include "unity.h"
+
+//sometimes you may want to get at local data in a module.
+//for example: If you plan to pass by reference, this could be useful
+//however, it should often be avoided
+extern int Counter; 
+
+void setUp(void)
+{
+  //This is run before EACH TEST
+  Counter = 0x5a5a;
+}
+
+void tearDown(void)
+{
+}
+
+void test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode(void)
+{
+  //All of these should pass
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(78));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(1));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(33));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(999));
+  TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(-1));
+}
+
+void test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken(void)
+{
+  // You should see this line fail in your test summary
+  TEST_ASSERT_EQUAL(1, FindFunction_WhichIsBroken(34));
+  
+  // Notice the rest of these didn't get a chance to run because the line above failed.  
+  // Unit tests abort each test function on the first sign of trouble. 
+  // Then NEXT test function runs as normal.
+  TEST_ASSERT_EQUAL(8, FindFunction_WhichIsBroken(8888));
+}
+
+void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue(void)
+{
+    //This should be true because setUp set this up for us before this test
+    TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
+    
+    //This should be true because we can still change our answer
+    Counter = 0x1234;
+    TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
+}
+
+void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain(void)
+{
+    //This should be true again because setup was rerun before this test (and after we changed it to 0x1234)
+    TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
+}
+
+void test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed(void)
+{
+    //Sometimes you get the test wrong.  When that happens, you get a failure too... and a quick look should tell
+    // you what actually happened...which in this case was a failure to setup the initial condition.
+    TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/example_3/test/TestProductionCode2.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,31 @@
+
+#include "ProductionCode2.h"
+#include "unity.h"
+
+/* These should be ignored because they are commented out in various ways:
+#include "whatever.h" 
+*/
+//#include "somethingelse.h"
+
+void setUp(void)
+{
+}
+
+void tearDown(void)
+{
+}
+
+void test_IgnoredTest(void)
+{
+    TEST_IGNORE_MESSAGE("This Test Was Ignored On Purpose");
+}
+
+void test_AnotherIgnoredTest(void)
+{
+    TEST_IGNORE_MESSAGE("These Can Be Useful For Leaving Yourself Notes On What You Need To Do Yet");
+}
+
+void test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented(void)
+{
+    TEST_IGNORE(); //Like This
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/examples/unity_config.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,257 @@
+/* Unity Configuration
+ * As of May 11th, 2016 at ThrowTheSwitch/Unity commit 837c529
+ * See Also: Unity/docs/UnityConfigurationGuide.pdf
+ *
+ * Unity is designed to run on almost anything that is targeted by a C compiler.
+ * It would be awesome if this could be done with zero configuration. While
+ * there are some targets that come close to this dream, it is sadly not
+ * universal. It is likely that you are going to need at least a couple of the
+ * configuration options described in this document.
+ *
+ * All of Unity's configuration options are `#defines`. Most of these are simple
+ * definitions. A couple are macros with arguments. They live inside the
+ * unity_internals.h header file. We don't necessarily recommend opening that
+ * file unless you really need to. That file is proof that a cross-platform
+ * library is challenging to build. From a more positive perspective, it is also
+ * proof that a great deal of complexity can be centralized primarily to one
+ * place in order to provide a more consistent and simple experience elsewhere.
+ *
+ * Using These Options
+ * It doesn't matter if you're using a target-specific compiler and a simulator
+ * or a native compiler. In either case, you've got a couple choices for
+ * configuring these options:
+ *
+ *  1. Because these options are specified via C defines, you can pass most of
+ *     these options to your compiler through command line compiler flags. Even
+ *     if you're using an embedded target that forces you to use their
+ *     overbearing IDE for all configuration, there will be a place somewhere in
+ *     your project to configure defines for your compiler.
+ *  2. You can create a custom `unity_config.h` configuration file (present in
+ *     your toolchain's search paths). In this file, you will list definitions
+ *     and macros specific to your target. All you must do is define
+ *     `UNITY_INCLUDE_CONFIG_H` and Unity will rely on `unity_config.h` for any
+ *     further definitions it may need.
+ */
+
+#ifndef UNITY_CONFIG_H
+#define UNITY_CONFIG_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* ************************* AUTOMATIC INTEGER TYPES ***************************
+ * C's concept of an integer varies from target to target. The C Standard has
+ * rules about the `int` matching the register size of the target
+ * microprocessor. It has rules about the `int` and how its size relates to
+ * other integer types. An `int` on one target might be 16 bits while on another
+ * target it might be 64. There are more specific types in compilers compliant
+ * with C99 or later, but that's certainly not every compiler you are likely to
+ * encounter. Therefore, Unity has a number of features for helping to adjust
+ * itself to match your required integer sizes. It starts off by trying to do it
+ * automatically.
+ **************************************************************************** */
+
+/* The first thing that Unity does to guess your types is check `stdint.h`. This
+ * file includes defines like `UINT_MAX` that Unity can make use of to learn a
+ * lot about your system. It's possible you don't want it to do this or it's
+ * possible that your system doesn't support `stdint.h`. If that's the case,
+ * you're going to want to define this. That way, Unity will know to skip the
+ * inclusion of this file and you won't be left with a compiler error.
+ */
+/* #define UNITY_EXCLUDE_STDINT_H */
+
+/* The second attempt to guess your types is to check `limits.h`. Some compilers
+ * that don't support `stdint.h` could include `limits.h` instead. If you don't
+ * want Unity to check this file either, define this to make it skip the
+ * inclusion.
+ */
+/* #define UNITY_EXCLUDE_LIMITS_H */
+
+/* The third and final attempt to guess your types is to use the `sizeof()`
+ * operator. Even if the first two options don't work, this one covers most
+ * cases. There _is_ a rare compiler or two out there that doesn't support
+ * `sizeof()` in the preprocessing stage, though. For these, you have the
+ * ability to disable this feature as well.
+ */
+/* #define UNITY_EXCLUDE_SIZEOF */
+
+
+/* ********************** MANUAL INTEGER TYPE DEFINITION ***********************
+ * If you've disabled all of the automatic options above, you're going to have
+ * to do the configuration yourself. There are just a handful of defines that
+ * you are going to specify if you don't like the defaults.
+ **************************************************************************** */
+
+ /* Define this to be the number of bits an `int` takes up on your system. The
+ * default, if not auto-detected, is 32 bits.
+ *
+ * Example:
+ */
+/* #define UNITY_INT_WIDTH 16 */
+
+/* Define this to be the number of bits a `long` takes up on your system. The
+ * default, if not autodetected, is 32 bits. This is used to figure out what
+ * kind of 64-bit support your system can handle.  Does it need to specify a
+ * `long` or a `long long` to get a 64-bit value. On 16-bit systems, this option
+ * is going to be ignored.
+ *
+ * Example:
+ */
+/* #define UNITY_LONG_WIDTH 16 */
+
+/* Define this to be the number of bits a pointer takes up on your system. The
+ * default, if not autodetected, is 32-bits. If you're getting ugly compiler
+ * warnings about casting from pointers, this is the one to look at.
+ *
+ * Example:
+ */
+/* #define UNITY_POINTER_WIDTH 64 */
+
+/* Unity will automatically include 64-bit support if it auto-detects it, or if
+ * your `int`, `long`, or pointer widths are greater than 32-bits. Define this
+ * to enable 64-bit support if none of the other options already did it for you.
+ * There can be a significant size and speed impact to enabling 64-bit support
+ * on small targets, so don't define it if you don't need it.
+ */
+/* #define UNITY_INCLUDE_64 */
+
+
+/* *************************** FLOATING POINT TYPES ****************************
+ * In the embedded world, it's not uncommon for targets to have no support for
+ * floating point operations at all or to have support that is limited to only
+ * single precision. We are able to guess integer sizes on the fly because
+ * integers are always available in at least one size. Floating point, on the
+ * other hand, is sometimes not available at all. Trying to include `float.h` on
+ * these platforms would result in an error. This leaves manual configuration as
+ * the only option.
+ **************************************************************************** */
+
+ /* By default, Unity guesses that you will want single precision floating point
+  * support, but not double precision. It's easy to change either of these using
+  * the include and exclude options here. You may include neither, either, or
+  * both, as suits your needs.
+  */
+/* #define UNITY_INCLUDE_FLOAT  */
+/* #define UNITY_EXCLUDE_FLOAT  */
+/* #define UNITY_INCLUDE_DOUBLE */
+/* #define UNITY_EXCLUDE_DOUBLE */
+
+/* For features that are enabled, the following floating point options also
+ * become available.
+ */
+
+/* Unity aims for as small of a footprint as possible and avoids most standard
+ * library calls (some embedded platforms don't have a standard library!).
+ * Because of this, its routines for printing integer values are minimalist and
+ * hand-coded. To keep Unity universal, though, we chose to _not_ develop our
+ * own floating point print routines. Instead, the display of floating point
+ * values during a failure are optional. By default, Unity will not print the
+ * actual results of floating point assertion failure. So a failed assertion
+ * will produce a message like `"Values Not Within Delta"`. If you would like
+ * verbose failure messages for floating point assertions, use these options to
+ * give more explicit failure messages (e.g. `"Expected 4.56 Was 4.68"`). Note
+ * that this feature requires the use of `sprintf` so might not be desirable in
+ * all cases.
+ */
+/* #define UNITY_FLOAT_VERBOSE  */
+/* #define UNITY_DOUBLE_VERBOSE */
+
+/* If enabled, Unity assumes you want your `FLOAT` asserts to compare standard C
+ * floats. If your compiler supports a specialty floating point type, you can
+ * always override this behavior by using this definition.
+ *
+ * Example:
+ */
+/* #define UNITY_FLOAT_TYPE float16_t */
+
+/* If enabled, Unity assumes you want your `DOUBLE` asserts to compare standard
+ * C doubles. If you would like to change this, you can specify something else
+ * by using this option. For example, defining `UNITY_DOUBLE_TYPE` to `long
+ * double` could enable gargantuan floating point types on your 64-bit processor
+ * instead of the standard `double`.
+ *
+ * Example:
+ */
+/* #define UNITY_DOUBLE_TYPE long double */
+
+/* If you look up `UNITY_ASSERT_EQUAL_FLOAT` and `UNITY_ASSERT_EQUAL_DOUBLE` as
+ * documented in the Unity Assertion Guide, you will learn that they are not
+ * really asserting that two values are equal but rather that two values are
+ * "close enough" to equal. "Close enough" is controlled by these precision
+ * configuration options. If you are working with 32-bit floats and/or 64-bit
+ * doubles (the normal on most processors), you should have no need to change
+ * these options. They are both set to give you approximately 1 significant bit
+ * in either direction. The float precision is 0.00001 while the double is
+ * 10^-12. For further details on how this works, see the appendix of the Unity
+ * Assertion Guide.
+ *
+ * Example:
+ */
+/* #define UNITY_FLOAT_PRECISION 0.001f  */
+/* #define UNITY_DOUBLE_PRECISION 0.001f */
+
+
+/* *************************** TOOLSET CUSTOMIZATION ***************************
+ * In addition to the options listed above, there are a number of other options
+ * which will come in handy to customize Unity's behavior for your specific
+ * toolchain. It is possible that you may not need to touch any of these but
+ * certain platforms, particularly those running in simulators, may need to jump
+ * through extra hoops to operate properly. These macros will help in those
+ * situations.
+ **************************************************************************** */
+
+/* By default, Unity prints its results to `stdout` as it runs. This works
+ * perfectly fine in most situations where you are using a native compiler for
+ * testing. It works on some simulators as well so long as they have `stdout`
+ * routed back to the command line. There are times, however, where the
+ * simulator will lack support for dumping results or you will want to route
+ * results elsewhere for other reasons. In these cases, you should define the
+ * `UNITY_OUTPUT_CHAR` macro. This macro accepts a single character at a time
+ * (as an `int`, since this is the parameter type of the standard C `putchar`
+ * function most commonly used). You may replace this with whatever function
+ * call you like.
+ *
+ * Example:
+ * Say you are forced to run your test suite on an embedded processor with no
+ * `stdout` option. You decide to route your test result output to a custom
+ * serial `RS232_putc()` function you wrote like thus:
+ */
+/* #define UNITY_OUTPUT_CHAR(a)    RS232_putc(a) */
+/* #define UNITY_OUTPUT_FLUSH()    RS232_config(115200,1,8,0) */
+/* #define UNITY_OUTPUT_START()    RS232_flush() */
+/* #define UNITY_OUTPUT_COMPLETE() RS232_close() */
+
+/* For some targets, Unity can make the otherwise required `setUp()` and
+ * `tearDown()` functions optional. This is a nice convenience for test writers
+ * since `setUp` and `tearDown` don't often actually _do_ anything. If you're
+ * using gcc or clang, this option is automatically defined for you. Other
+ * compilers can also support this behavior, if they support a C feature called
+ * weak functions. A weak function is a function that is compiled into your
+ * executable _unless_ a non-weak version of the same function is defined
+ * elsewhere. If a non-weak version is found, the weak version is ignored as if
+ * it never existed. If your compiler supports this feature, you can let Unity
+ * know by defining `UNITY_SUPPORT_WEAK` as the function attributes that would
+ * need to be applied to identify a function as weak. If your compiler lacks
+ * support for weak functions, you will always need to define `setUp` and
+ * `tearDown` functions (though they can be and often will be just empty). The
+ * most common options for this feature are:
+ */
+/* #define UNITY_SUPPORT_WEAK weak */
+/* #define UNITY_SUPPORT_WEAK __attribute__((weak)) */
+
+/* Some compilers require a custom attribute to be assigned to pointers, like
+ * `near` or `far`. In these cases, you can give Unity a safe default for these
+ * by defining this option with the attribute you would like.
+ *
+ * Example:
+ */
+/* #define UNITY_PTR_ATTRIBUTE __attribute__((far)) */
+/* #define UNITY_PTR_ATTRIBUTE near */
+
+#ifdef __cplusplus
+}
+#endif /* extern "C" */
+
+#endif /* UNITY_CONFIG_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/eclipse/error_parsers.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,26 @@
+Eclipse error parsers
+=====================
+
+These are a godsend for extracting  & quickly navigating to
+warnings & error messages from console output. Unforunately
+I don't know how to write an Eclipse plugin so you'll have
+to add them manually.
+
+To add a console parser to Eclipse, go to Window --> Preferences
+--> C/C++ --> Build --> Settings. Click on the 'Error Parsers'
+tab and then click the 'Add...' button. See the table below for
+the parser fields to add.
+
+Eclipse will only parse the console output during a build, so
+running your unit tests must be part of your build process.
+Either add this to your make/rakefile, or add it as a post-
+build step in your Eclipse project settings.
+
+
+Unity unit test error parsers
+-----------------------------
+Severity    Pattern                                 File    Line    Description
+-------------------------------------------------------------------------------
+Error       (\.+)(.*?):(\d+):(.*?):FAIL: (.*)       $2      $3      $5
+Warning     (\.+)(.*?):(\d+):(.*?):IGNORE: (.*)     $2      $3      $5
+Warning     (\.+)(.*?):(\d+):(.*?):IGNORE\s*$       $2      $3      Ignored test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/rakefile.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,48 @@
+# ==========================================
+#   Unity Project - A Test Framework for C
+#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+#   [Released under MIT License. Please refer to license.txt for details]
+# ==========================================
+
+HERE = File.expand_path(File.dirname(__FILE__)) + '/'
+
+require 'rake'
+require 'rake/clean'
+require 'rake/testtask'
+require HERE + 'rakefile_helper'
+
+TEMP_DIRS = [
+    File.join(HERE, 'build')
+]
+
+TEMP_DIRS.each do |dir|
+  directory(dir)
+  CLOBBER.include(dir)
+end
+
+task :prepare_for_tests => TEMP_DIRS
+
+include RakefileHelpers
+
+# Load default configuration, for now
+DEFAULT_CONFIG_FILE = 'gcc_auto_stdint.yml'
+configure_toolchain(DEFAULT_CONFIG_FILE)
+
+task :unit => [:prepare_for_tests] do
+  run_tests
+end
+
+desc "Build and test Unity Framework"
+task :all => [:clean, :unit]
+task :default => [:clobber, :all]
+task :ci => [:no_color, :default]
+task :cruise => [:no_color, :default]
+
+desc "Load configuration"
+task :config, :config_file do |t, args|
+  configure_toolchain(args[:config_file])
+end
+
+task :no_color do
+  $colour_output = false
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/rakefile_helper.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,179 @@
+# ==========================================
+#   Unity Project - A Test Framework for C
+#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+#   [Released under MIT License. Please refer to license.txt for details]
+# ==========================================
+
+require 'yaml'
+require 'fileutils'
+require HERE+'../../auto/unity_test_summary'
+require HERE+'../../auto/generate_test_runner'
+require HERE+'../../auto/colour_reporter'
+
+module RakefileHelpers
+
+  C_EXTENSION = '.c'
+
+  def load_configuration(config_file)
+    unless ($configured)
+      $cfg_file = HERE+"../../test/targets/#{config_file}" unless (config_file =~ /[\\|\/]/)
+      $cfg = YAML.load(File.read($cfg_file))
+      $colour_output = false unless $cfg['colour']
+      $configured = true if (config_file != DEFAULT_CONFIG_FILE)
+    end
+  end
+
+  def configure_clean
+    CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil?
+  end
+
+  def configure_toolchain(config_file=DEFAULT_CONFIG_FILE)
+    config_file += '.yml' unless config_file =~ /\.yml$/
+    config_file = config_file unless config_file =~ /[\\|\/]/
+    load_configuration(config_file)
+    configure_clean
+  end
+
+  def tackit(strings)
+    if strings.is_a?(Array)
+      result = "\"#{strings.join}\""
+    else
+      result = strings
+    end
+    return result
+  end
+
+  def squash(prefix, items)
+    result = ''
+    items.each { |item| result += " #{prefix}#{tackit(item)}" }
+    return result
+  end
+
+  def build_compiler_fields
+    command  = tackit($cfg['compiler']['path'])
+    if $cfg['compiler']['defines']['items'].nil?
+      defines  = ''
+    else
+      defines  = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'] + ['UNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar'])
+    end
+    options  = squash('', $cfg['compiler']['options'])
+    includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items'])
+    includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
+    return {:command => command, :defines => defines, :options => options, :includes => includes}
+  end
+
+  def compile(file, defines=[])
+    compiler = build_compiler_fields
+    unity_include = $cfg['compiler']['includes']['prefix']+'../../src'
+    cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{unity_include} #{file} " +
+      "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}" +
+      "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}"
+    execute(cmd_str)
+  end
+
+  def build_linker_fields
+    command  = tackit($cfg['linker']['path'])
+    if $cfg['linker']['options'].nil?
+      options  = ''
+    else
+      options  = squash('', $cfg['linker']['options'])
+    end
+    if ($cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?)
+      includes = ''
+    else
+      includes = squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items'])
+    end
+    includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
+    return {:command => command, :options => options, :includes => includes}
+  end
+
+  def link_it(exe_name, obj_list)
+    linker = build_linker_fields
+    cmd_str = "#{linker[:command]}#{linker[:options]}#{linker[:includes]} " +
+      (obj_list.map{|obj|"#{$cfg['linker']['object_files']['path']}#{obj} "}).join +
+      $cfg['linker']['bin_files']['prefix'] + ' ' +
+      $cfg['linker']['bin_files']['destination'] +
+      exe_name + $cfg['linker']['bin_files']['extension']
+    execute(cmd_str)
+  end
+
+  def build_simulator_fields
+    return nil if $cfg['simulator'].nil?
+    if $cfg['simulator']['path'].nil?
+      command = ''
+    else
+      command = (tackit($cfg['simulator']['path']) + ' ')
+    end
+    if $cfg['simulator']['pre_support'].nil?
+      pre_support = ''
+    else
+      pre_support = squash('', $cfg['simulator']['pre_support'])
+    end
+    if $cfg['simulator']['post_support'].nil?
+      post_support = ''
+    else
+      post_support = squash('', $cfg['simulator']['post_support'])
+    end
+    return {:command => command, :pre_support => pre_support, :post_support => post_support}
+  end
+
+  def execute(command_string, verbose=true)
+    report command_string
+    output = `#{command_string}`.chomp
+    report(output) if (verbose && !output.nil? && (output.length > 0))
+    if ($?.exitstatus != 0)
+      raise "Command failed. (Returned #{$?.exitstatus})"
+    end
+    return output
+  end
+
+  def report_summary
+    summary = UnityTestSummary.new
+    summary.set_root_path(HERE)
+    results_glob = "#{$cfg['compiler']['build_path']}*.test*"
+    results_glob.gsub!(/\\/, '/')
+    results = Dir[results_glob]
+    summary.set_targets(results)
+    summary.run
+  end
+
+  def run_tests
+    report 'Running Unity system tests...'
+
+    # Tack on TEST define for compiling unit tests
+    load_configuration($cfg_file)
+    test_defines = ['TEST']
+    $cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil?
+
+    # Get a list of all source files needed
+    src_files  = Dir[HERE+'src/*.c']
+    src_files += Dir[HERE+'test/*.c']
+    src_files += Dir[HERE+'test/main/*.c']
+    src_files << '../../src/unity.c'
+
+    # Build object files
+    src_files.each { |f| compile(f, test_defines) }
+    obj_list = src_files.map {|f| File.basename(f.ext($cfg['compiler']['object_files']['extension'])) }
+
+    # Link the test executable
+    test_base = "framework_test"
+    link_it(test_base, obj_list)
+
+    # Execute unit test and generate results file
+    simulator = build_simulator_fields
+    executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension']
+    if simulator.nil?
+      cmd_str = executable + " -v -r"
+    else
+      cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}"
+    end
+    output = execute(cmd_str)
+    test_results = $cfg['compiler']['build_path'] + test_base
+    if output.match(/OK$/m).nil?
+      test_results += '.testfail'
+    else
+      test_results += '.testpass'
+    end
+    File.open(test_results, 'w') { |f| f.print output }
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/readme.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,9 @@
+Copyright (c) 2010 James Grenning and Contributed to Unity Project
+
+Unity Project - A Test Framework for C
+Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+[Released under MIT License. Please refer to license.txt for details]
+
+This Framework is an optional add-on to Unity.  By including unity_framework.h in place of unity.h,
+you may now work with Unity in a manner similar to CppUTest.  This framework adds the concepts of 
+test groups and gives finer control of your tests over the command line.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/src/unity_fixture.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,456 @@
+//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#include <string.h>
+#include "unity_fixture.h"
+#include "unity_internals.h"
+
+#define UNITY_RESULTS_TAGS_TEST_START   "<***UnityTest***>"
+#define UNITY_RESULTS_TAGS_TEST_END     "</***UnityTest***>"
+
+#define UNITY_RESULTS_TAGS_RESULT_START "<***UnityResult***>"
+#define UNITY_RESULTS_TAGS_RESULT_END   "</***UnityResult***>"
+
+#define UNITY_RESULTS_TAGS_IGNORE_START "<***UnityIgnoredTest***>"
+#define UNITY_RESULTS_TAGS_IGNORE_END   "</***UnityIgnoredTest***>"
+
+struct _UnityFixture UnityFixture;
+
+//If you decide to use the function pointer approach.
+//Build with -D UNITY_OUTPUT_CHAR=outputChar and include <stdio.h>
+//int (*outputChar)(int) = putchar;
+
+#if !defined(UNITY_WEAK_ATTRIBUTE) && !defined(UNITY_WEAK_PRAGMA)
+void setUp(void)    { /*does nothing*/ }
+void tearDown(void) { /*does nothing*/ }
+#endif
+
+static void announceTestRun(unsigned int runNumber)
+{
+    UnityPrint("Unity test run ");
+    UnityPrintNumberUnsigned(runNumber+1);
+    UnityPrint(" of ");
+    UnityPrintNumberUnsigned(UnityFixture.RepeatCount);
+    UNITY_PRINT_EOL();
+}
+
+int UnityMain(int argc, const char* argv[], void (*runAllTests)(void))
+{
+    int result = UnityGetCommandLineOptions(argc, argv);
+    unsigned int r;
+    if (result != 0)
+        return result;
+
+    for (r = 0; r < UnityFixture.RepeatCount; r++)
+    {
+        UnityBegin(argv[0]);
+        announceTestRun(r);
+        runAllTests();
+        UNITY_PRINT_EOL();
+        UnityEnd();
+    }
+
+    return (int)Unity.TestFailures;
+}
+
+static int selected(const char* filter, const char* name)
+{
+    if (filter == 0)
+        return 1;
+    return strstr(name, filter) ? 1 : 0;
+}
+
+static int testSelected(const char* test)
+{
+    return selected(UnityFixture.NameFilter, test);
+}
+
+static int groupSelected(const char* group)
+{
+    return selected(UnityFixture.GroupFilter, group);
+}
+
+void UnityTestRunner(unityfunction* setup,
+                     unityfunction* testBody,
+                     unityfunction* teardown,
+                     const char* printableName,
+                     const char* group,
+                     const char* name,
+                     const char* file, unsigned int line)
+{
+    if (testSelected(name) && groupSelected(group))
+    {
+        Unity.TestFile = file;
+        Unity.CurrentTestName = printableName;
+        Unity.CurrentTestLineNumber = line;
+        if (!UnityFixture.Verbose)
+            UNITY_OUTPUT_CHAR('.');
+        else
+        {
+            /* SA_PATCH: Output results using easy to parse tags. */
+            UnityPrint(UNITY_RESULTS_TAGS_TEST_START);
+            UnityPrint(printableName);
+            /* SA_PATCH: Output results using easy to parse tags. */
+            UnityPrint(UNITY_RESULTS_TAGS_TEST_END);
+           //UnityPrint(printableName);
+        }
+
+        Unity.NumberOfTests++;
+        UnityMalloc_StartTest();
+        UnityPointer_Init();
+
+        if (TEST_PROTECT())
+        {
+            setup();
+            testBody();
+        }
+        if (TEST_PROTECT())
+        {
+            teardown();
+        }
+        if (TEST_PROTECT())
+        {
+            UnityPointer_UndoAllSets();
+            if (!Unity.CurrentTestFailed)
+                UnityMalloc_EndTest();
+        }
+        UnityConcludeFixtureTest();
+    }
+}
+
+void UnityIgnoreTest(const char* printableName, const char* group, const char* name)
+{
+    if (testSelected(name) && groupSelected(group))
+    {
+        Unity.NumberOfTests++;
+        Unity.TestIgnores++;
+        if (!UnityFixture.Verbose)
+            UNITY_OUTPUT_CHAR('!');
+        else
+        {
+            /* SA_PATCH: Output results using easy to parse tags. */
+            UnityPrint(UNITY_RESULTS_TAGS_IGNORE_START);
+            UnityPrint(printableName);
+            /* SA_PATCH: Output results using easy to parse tags. */
+            UnityPrint(UNITY_RESULTS_TAGS_IGNORE_END);
+            //UnityPrint(printableName);
+            //UNITY_PRINT_EOL();
+        }
+    }
+}
+
+
+//-------------------------------------------------
+//Malloc and free stuff
+//
+#define MALLOC_DONT_FAIL -1
+static int malloc_count;
+static int malloc_fail_countdown = MALLOC_DONT_FAIL;
+
+void UnityMalloc_StartTest(void)
+{
+    malloc_count = 0;
+    malloc_fail_countdown = MALLOC_DONT_FAIL;
+}
+
+void UnityMalloc_EndTest(void)
+{
+    malloc_fail_countdown = MALLOC_DONT_FAIL;
+    if (malloc_count != 0)
+    {
+        UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "This test leaks!");
+    }
+}
+
+void UnityMalloc_MakeMallocFailAfterCount(int countdown)
+{
+    malloc_fail_countdown = countdown;
+}
+
+// These definitions are always included from unity_fixture_malloc_overrides.h
+// We undef to use them or avoid conflict with <stdlib.h> per the C standard
+#undef malloc
+#undef free
+#undef calloc
+#undef realloc
+
+#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
+static unsigned char unity_heap[UNITY_INTERNAL_HEAP_SIZE_BYTES];
+static size_t heap_index;
+#else
+#include <stdlib.h>
+#endif
+
+typedef struct GuardBytes
+{
+    size_t size;
+    size_t guard_space;
+} Guard;
+
+
+static const char end[] = "END";
+
+void* unity_malloc(size_t size)
+{
+    char* mem;
+    Guard* guard;
+    size_t total_size = size + sizeof(Guard) + sizeof(end);
+
+    if (malloc_fail_countdown != MALLOC_DONT_FAIL)
+    {
+        if (malloc_fail_countdown == 0)
+            return NULL;
+        malloc_fail_countdown--;
+    }
+
+    if (size == 0) return NULL;
+#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
+    if (heap_index + total_size > UNITY_INTERNAL_HEAP_SIZE_BYTES)
+    {
+        guard = NULL;
+    }
+    else
+    {
+        guard = (Guard*) &unity_heap[heap_index];
+        heap_index += total_size;
+    }
+#else
+    guard = (Guard*)UNITY_FIXTURE_MALLOC(total_size);
+#endif
+    if (guard == NULL) return NULL;
+    malloc_count++;
+    guard->size = size;
+    guard->guard_space = 0;
+    mem = (char*)&(guard[1]);
+    memcpy(&mem[size], end, sizeof(end));
+
+    return (void*)mem;
+}
+
+static int isOverrun(void* mem)
+{
+    Guard* guard = (Guard*)mem;
+    char* memAsChar = (char*)mem;
+    guard--;
+
+    return guard->guard_space != 0 || strcmp(&memAsChar[guard->size], end) != 0;
+}
+
+static void release_memory(void* mem)
+{
+    Guard* guard = (Guard*)mem;
+    guard--;
+
+    malloc_count--;
+#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
+    if (mem == unity_heap + heap_index - guard->size - sizeof(end))
+    {
+        heap_index -= (guard->size + sizeof(Guard) + sizeof(end));
+    }
+#else
+    UNITY_FIXTURE_FREE(guard);
+#endif
+}
+
+void unity_free(void* mem)
+{
+    int overrun;
+
+    if (mem == NULL)
+    {
+        return;
+    }
+
+    overrun = isOverrun(mem);
+    release_memory(mem);
+    if (overrun)
+    {
+        UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "Buffer overrun detected during free()");
+    }
+}
+
+void* unity_calloc(size_t num, size_t size)
+{
+    void* mem = unity_malloc(num * size);
+    if (mem == NULL) return NULL;
+    memset(mem, 0, num * size);
+    return mem;
+}
+
+void* unity_realloc(void* oldMem, size_t size)
+{
+    Guard* guard = (Guard*)oldMem;
+    void* newMem;
+
+    if (oldMem == NULL) return unity_malloc(size);
+
+    guard--;
+    if (isOverrun(oldMem))
+    {
+        release_memory(oldMem);
+        UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "Buffer overrun detected during realloc()");
+    }
+
+    if (size == 0)
+    {
+        release_memory(oldMem);
+        return NULL;
+    }
+
+    if (guard->size >= size) return oldMem;
+
+#ifdef UNITY_EXCLUDE_STDLIB_MALLOC // Optimization if memory is expandable
+    if (oldMem == unity_heap + heap_index - guard->size - sizeof(end) &&
+        heap_index + size - guard->size <= UNITY_INTERNAL_HEAP_SIZE_BYTES)
+    {
+        release_memory(oldMem); // Not thread-safe, like unity_heap generally
+        return unity_malloc(size); // No memcpy since data is in place
+    }
+#endif
+    newMem = unity_malloc(size);
+    if (newMem == NULL) return NULL; // Do not release old memory
+    memcpy(newMem, oldMem, guard->size);
+    release_memory(oldMem);
+    return newMem;
+}
+
+
+//--------------------------------------------------------
+//Automatic pointer restoration functions
+struct PointerPair
+{
+    void** pointer;
+    void* old_value;
+};
+
+enum { MAX_POINTERS = 50 };
+static struct PointerPair pointer_store[MAX_POINTERS];
+static int pointer_index = 0;
+
+void UnityPointer_Init(void)
+{
+    pointer_index = 0;
+}
+
+void UnityPointer_Set(void** pointer, void* newValue, UNITY_LINE_TYPE line)
+{
+    if (pointer_index >= MAX_POINTERS)
+    {
+        UNITY_TEST_FAIL(line, "Too many pointers set");
+    }
+    else
+    {
+        pointer_store[pointer_index].pointer = pointer;
+        pointer_store[pointer_index].old_value = *pointer;
+        *pointer = newValue;
+        pointer_index++;
+    }
+}
+
+void UnityPointer_UndoAllSets(void)
+{
+    while (pointer_index > 0)
+    {
+        pointer_index--;
+        *(pointer_store[pointer_index].pointer) =
+            pointer_store[pointer_index].old_value;
+    }
+}
+
+int UnityGetCommandLineOptions(int argc, const char* argv[])
+{
+    int i;
+    UnityFixture.Verbose = 0;
+    UnityFixture.GroupFilter = 0;
+    UnityFixture.NameFilter = 0;
+    UnityFixture.RepeatCount = 1;
+
+    if (argc == 1)
+        return 0;
+
+    for (i = 1; i < argc; )
+    {
+        if (strcmp(argv[i], "-v") == 0)
+        {
+            UnityFixture.Verbose = 1;
+            i++;
+        }
+        else if (strcmp(argv[i], "-g") == 0)
+        {
+            i++;
+            if (i >= argc)
+                return 1;
+            UnityFixture.GroupFilter = argv[i];
+            i++;
+        }
+        else if (strcmp(argv[i], "-n") == 0)
+        {
+            i++;
+            if (i >= argc)
+                return 1;
+            UnityFixture.NameFilter = argv[i];
+            i++;
+        }
+        else if (strcmp(argv[i], "-r") == 0)
+        {
+            UnityFixture.RepeatCount = 2;
+            i++;
+            if (i < argc)
+            {
+                if (*(argv[i]) >= '0' && *(argv[i]) <= '9')
+                {
+                    unsigned int digit = 0;
+                    UnityFixture.RepeatCount = 0;
+                    while (argv[i][digit] >= '0' && argv[i][digit] <= '9')
+                    {
+                        UnityFixture.RepeatCount *= 10;
+                        UnityFixture.RepeatCount += (unsigned int)argv[i][digit++] - '0';
+                    }
+                    i++;
+                }
+            }
+        } else {
+            // ignore unknown parameter
+            i++;
+        }
+    }
+    return 0;
+}
+
+void UnityConcludeFixtureTest(void)
+{
+    if (Unity.CurrentTestIgnored)
+    {
+        Unity.TestIgnores++;
+        UNITY_PRINT_EOL();
+    }
+    else if (!Unity.CurrentTestFailed)
+    {
+        if (UnityFixture.Verbose)
+        {
+            UnityPrint(" ");
+            /* SA_PATCH: Output results using easy to parse tags. */
+            UnityPrint(UNITY_RESULTS_TAGS_RESULT_START);
+            UnityPrint("PASS");
+            /* SA_PATCH: Output results using easy to parse tags. */
+            UnityPrint(UNITY_RESULTS_TAGS_RESULT_END);
+            UNITY_OUTPUT_CHAR('\n');
+        }
+//        {
+//            UnityPrint(" PASS");
+//            UNITY_PRINT_EOL();
+//        }
+    }
+    else // Unity.CurrentTestFailed
+    {
+        Unity.TestFailures++;
+        UNITY_PRINT_EOL();
+    }
+
+    Unity.CurrentTestFailed = 0;
+    Unity.CurrentTestIgnored = 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/src/unity_fixture.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,78 @@
+//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#ifndef UNITY_FIXTURE_H_
+#define UNITY_FIXTURE_H_
+
+#include "unity.h"
+#include "unity_internals.h"
+#include "unity_fixture_malloc_overrides.h"
+#include "unity_fixture_internals.h"
+
+int UnityMain(int argc, const char* argv[], void (*runAllTests)(void));
+
+
+#define TEST_GROUP(group)\
+    static const char* TEST_GROUP_##group = #group
+
+#define TEST_SETUP(group) void TEST_##group##_SETUP(void);\
+    void TEST_##group##_SETUP(void)
+
+#define TEST_TEAR_DOWN(group) void TEST_##group##_TEAR_DOWN(void);\
+    void TEST_##group##_TEAR_DOWN(void)
+
+
+#define TEST(group, name) \
+    void TEST_##group##_##name##_(void);\
+    void TEST_##group##_##name##_run(void);\
+    void TEST_##group##_##name##_run(void)\
+    {\
+        UnityTestRunner(TEST_##group##_SETUP,\
+            TEST_##group##_##name##_,\
+            TEST_##group##_TEAR_DOWN,\
+            "TEST(" #group ", " #name ")",\
+            TEST_GROUP_##group, #name,\
+            __FILE__, __LINE__);\
+    }\
+    void  TEST_##group##_##name##_(void)
+
+#define IGNORE_TEST(group, name) \
+    void TEST_##group##_##name##_(void);\
+    void TEST_##group##_##name##_run(void);\
+    void TEST_##group##_##name##_run(void)\
+    {\
+        UnityIgnoreTest("IGNORE_TEST(" #group ", " #name ")", TEST_GROUP_##group, #name);\
+    }\
+    void TEST_##group##_##name##_(void)
+
+#define RUN_TEST_CASE(group, name) \
+    { void TEST_##group##_##name##_run(void);\
+      TEST_##group##_##name##_run(); }
+
+//This goes at the bottom of each test file or in a separate c file
+#define TEST_GROUP_RUNNER(group)\
+    void TEST_##group##_GROUP_RUNNER(void);\
+    void TEST_##group##_GROUP_RUNNER(void)
+
+//Call this from main
+#define RUN_TEST_GROUP(group)\
+    { void TEST_##group##_GROUP_RUNNER(void);\
+      TEST_##group##_GROUP_RUNNER(); }
+
+//CppUTest Compatibility Macros
+#define UT_PTR_SET(ptr, newPointerValue)               UnityPointer_Set((void**)&(ptr), (void*)(newPointerValue), __LINE__)
+#define TEST_ASSERT_POINTERS_EQUAL(expected, actual)   TEST_ASSERT_EQUAL_PTR((expected), (actual))
+#define TEST_ASSERT_BYTES_EQUAL(expected, actual)      TEST_ASSERT_EQUAL_HEX8(0xff & (expected), 0xff & (actual))
+#define FAIL(message)                                  TEST_FAIL_MESSAGE((message))
+#define CHECK(condition)                               TEST_ASSERT_TRUE((condition))
+#define LONGS_EQUAL(expected, actual)                  TEST_ASSERT_EQUAL_INT((expected), (actual))
+#define STRCMP_EQUAL(expected, actual)                 TEST_ASSERT_EQUAL_STRING((expected), (actual))
+#define DOUBLES_EQUAL(expected, actual, delta)         TEST_ASSERT_FLOAT_WITHIN(((expected), (actual), (delta))
+
+void UnityMalloc_MakeMallocFailAfterCount(int count);
+
+#endif /* UNITY_FIXTURE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/src/unity_fixture_internals.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,39 @@
+//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#ifndef UNITY_FIXTURE_INTERNALS_H_
+#define UNITY_FIXTURE_INTERNALS_H_
+
+struct _UnityFixture
+{
+    int Verbose;
+    unsigned int RepeatCount;
+    const char* NameFilter;
+    const char* GroupFilter;
+};
+extern struct _UnityFixture UnityFixture;
+
+typedef void unityfunction(void);
+void UnityTestRunner(unityfunction* setup,
+                     unityfunction* body,
+                     unityfunction* teardown,
+                     const char* printableName,
+                     const char* group,
+                     const char* name,
+                     const char* file, unsigned int line);
+
+void UnityIgnoreTest(const char* printableName, const char* group, const char* name);
+void UnityMalloc_StartTest(void);
+void UnityMalloc_EndTest(void);
+int UnityGetCommandLineOptions(int argc, const char* argv[]);
+void UnityConcludeFixtureTest(void);
+
+void UnityPointer_Set(void** ptr, void* newValue, UNITY_LINE_TYPE line);
+void UnityPointer_UndoAllSets(void);
+void UnityPointer_Init(void);
+
+#endif /* UNITY_FIXTURE_INTERNALS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/src/unity_fixture_malloc_overrides.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,46 @@
+//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#ifndef UNITY_FIXTURE_MALLOC_OVERRIDES_H_
+#define UNITY_FIXTURE_MALLOC_OVERRIDES_H_
+
+#include <stddef.h>
+
+#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
+// Define this macro to remove the use of stdlib.h, malloc, and free.
+// Many embedded systems do not have a heap or malloc/free by default.
+// This internal unity_malloc() provides allocated memory deterministically from
+// the end of an array only, unity_free() only releases from end-of-array,
+// blocks are not coalesced, and memory not freed in LIFO order is stranded.
+    #ifndef UNITY_INTERNAL_HEAP_SIZE_BYTES
+    #define UNITY_INTERNAL_HEAP_SIZE_BYTES 256
+    #endif
+#endif
+
+// These functions are used by the Unity Fixture to allocate and release memory
+// on the heap and can be overridden with platform-specific implementations.
+// For example, when using FreeRTOS UNITY_FIXTURE_MALLOC becomes pvPortMalloc()
+// and UNITY_FIXTURE_FREE becomes vPortFree().
+#if !defined(UNITY_FIXTURE_MALLOC) || !defined(UNITY_FIXTURE_FREE)
+    #define UNITY_FIXTURE_MALLOC(size) malloc(size)
+    #define UNITY_FIXTURE_FREE(ptr)    free(ptr)
+#else
+    extern void* UNITY_FIXTURE_MALLOC(size_t size);
+    extern void UNITY_FIXTURE_FREE(void* ptr);
+#endif
+
+#define malloc  unity_malloc
+#define calloc  unity_calloc
+#define realloc unity_realloc
+#define free    unity_free
+
+void* unity_malloc(size_t size);
+void* unity_calloc(size_t num, size_t size);
+void* unity_realloc(void * oldMem, size_t size);
+void unity_free(void * mem);
+
+#endif /* UNITY_FIXTURE_MALLOC_OVERRIDES_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/test/main/AllTests.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,22 @@
+//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#include "unity_fixture.h"
+
+static void runAllTests(void)
+{
+    RUN_TEST_GROUP(UnityFixture);
+    RUN_TEST_GROUP(UnityCommandOptions);
+    RUN_TEST_GROUP(LeakDetection);
+    RUN_TEST_GROUP(InternalMalloc);
+}
+
+int main(int argc, const char* argv[])
+{
+    return UnityMain(argc, argv, runAllTests);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/test/template_fixture_tests.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,39 @@
+//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#include "unity_fixture.h"
+
+static int data = -1;
+
+TEST_GROUP(mygroup);
+
+TEST_SETUP(mygroup)
+{
+    data = 0;
+}
+
+TEST_TEAR_DOWN(mygroup)
+{
+    data = -1;
+}
+
+TEST(mygroup, test1)
+{
+    TEST_ASSERT_EQUAL_INT(0, data);
+}
+
+TEST(mygroup, test2)
+{
+    TEST_ASSERT_EQUAL_INT(0, data);
+    data = 5;
+}
+
+TEST(mygroup, test3)
+{
+    data = 7;
+    TEST_ASSERT_EQUAL_INT(7, data);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/test/unity_fixture_Test.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,533 @@
+//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#include "unity_fixture.h"
+#include "unity_output_Spy.h"
+#include <stdlib.h>
+#include <string.h>
+
+TEST_GROUP(UnityFixture);
+
+TEST_SETUP(UnityFixture)
+{
+}
+
+TEST_TEAR_DOWN(UnityFixture)
+{
+}
+
+static int* pointer1 = 0;
+static int* pointer2 = (int*)2;
+static int* pointer3 = (int*)3;
+static int int1;
+static int int2;
+static int int3;
+static int int4;
+
+TEST(UnityFixture, PointerSetting)
+{
+    TEST_ASSERT_POINTERS_EQUAL(pointer1, 0);
+    UT_PTR_SET(pointer1, &int1);
+    UT_PTR_SET(pointer2, &int2);
+    UT_PTR_SET(pointer3, &int3);
+    TEST_ASSERT_POINTERS_EQUAL(pointer1, &int1);
+    TEST_ASSERT_POINTERS_EQUAL(pointer2, &int2);
+    TEST_ASSERT_POINTERS_EQUAL(pointer3, &int3);
+    UT_PTR_SET(pointer1, &int4);
+    UnityPointer_UndoAllSets();
+    TEST_ASSERT_POINTERS_EQUAL(pointer1, 0);
+    TEST_ASSERT_POINTERS_EQUAL(pointer2, (int*)2);
+    TEST_ASSERT_POINTERS_EQUAL(pointer3, (int*)3);
+}
+
+TEST(UnityFixture, ForceMallocFail)
+{
+    void* m;
+    void* mfails;
+    UnityMalloc_MakeMallocFailAfterCount(1);
+    m = malloc(10);
+    CHECK(m);
+    mfails = malloc(10);
+    TEST_ASSERT_POINTERS_EQUAL(0, mfails);
+    free(m);
+}
+
+TEST(UnityFixture, ReallocSmallerIsUnchanged)
+{
+    void* m1 = malloc(10);
+    void* m2 = realloc(m1, 5);
+    TEST_ASSERT_POINTERS_EQUAL(m1, m2);
+    free(m2);
+}
+
+TEST(UnityFixture, ReallocSameIsUnchanged)
+{
+    void* m1 = malloc(10);
+    void* m2 = realloc(m1, 10);
+    TEST_ASSERT_POINTERS_EQUAL(m1, m2);
+    free(m2);
+}
+
+TEST(UnityFixture, ReallocLargerNeeded)
+{
+    void* m1 = malloc(10);
+    void* m2;
+    CHECK(m1);
+    strcpy((char*)m1, "123456789");
+    m2 = realloc(m1, 15);
+    // CHECK(m1 != m2); //Depends on implementation
+    STRCMP_EQUAL("123456789", m2);
+    free(m2);
+}
+
+TEST(UnityFixture, ReallocNullPointerIsLikeMalloc)
+{
+    void* m = realloc(0, 15);
+    CHECK(m != 0);
+    free(m);
+}
+
+TEST(UnityFixture, ReallocSizeZeroFreesMemAndReturnsNullPointer)
+{
+    void* m1 = malloc(10);
+    void* m2 = realloc(m1, 0);
+    TEST_ASSERT_POINTERS_EQUAL(0, m2);
+}
+
+TEST(UnityFixture, CallocFillsWithZero)
+{
+    void* m = calloc(3, sizeof(char));
+    char* s = (char*)m;
+    CHECK(m);
+    TEST_ASSERT_BYTES_EQUAL(0, s[0]);
+    TEST_ASSERT_BYTES_EQUAL(0, s[1]);
+    TEST_ASSERT_BYTES_EQUAL(0, s[2]);
+    free(m);
+}
+
+static char *p1;
+static char *p2;
+
+TEST(UnityFixture, PointerSet)
+{
+    char c1;
+    char c2;
+    char newC1;
+    char newC2;
+    p1 = &c1;
+    p2 = &c2;
+
+    UnityPointer_Init();
+    UT_PTR_SET(p1, &newC1);
+    UT_PTR_SET(p2, &newC2);
+    TEST_ASSERT_POINTERS_EQUAL(&newC1, p1);
+    TEST_ASSERT_POINTERS_EQUAL(&newC2, p2);
+    UnityPointer_UndoAllSets();
+    TEST_ASSERT_POINTERS_EQUAL(&c1, p1);
+    TEST_ASSERT_POINTERS_EQUAL(&c2, p2);
+}
+
+TEST(UnityFixture, FreeNULLSafety)
+{
+    free(NULL);
+}
+
+TEST(UnityFixture, ConcludeTestIncrementsFailCount)
+{
+    _U_UINT savedFails = Unity.TestFailures;
+    _U_UINT savedIgnores = Unity.TestIgnores;
+    UnityOutputCharSpy_Enable(1);
+    Unity.CurrentTestFailed = 1;
+    UnityConcludeFixtureTest(); // Resets TestFailed for this test to pass
+    Unity.CurrentTestIgnored = 1;
+    UnityConcludeFixtureTest(); // Resets TestIgnored
+    UnityOutputCharSpy_Enable(0);
+    TEST_ASSERT_EQUAL(savedFails + 1, Unity.TestFailures);
+    TEST_ASSERT_EQUAL(savedIgnores + 1, Unity.TestIgnores);
+    Unity.TestFailures = savedFails;
+    Unity.TestIgnores = savedIgnores;
+}
+
+//------------------------------------------------------------
+
+TEST_GROUP(UnityCommandOptions);
+
+static int savedVerbose;
+static unsigned int savedRepeat;
+static const char* savedName;
+static const char* savedGroup;
+
+TEST_SETUP(UnityCommandOptions)
+{
+    savedVerbose = UnityFixture.Verbose;
+    savedRepeat = UnityFixture.RepeatCount;
+    savedName = UnityFixture.NameFilter;
+    savedGroup = UnityFixture.GroupFilter;
+}
+
+TEST_TEAR_DOWN(UnityCommandOptions)
+{
+    UnityFixture.Verbose = savedVerbose;
+    UnityFixture.RepeatCount= savedRepeat;
+    UnityFixture.NameFilter = savedName;
+    UnityFixture.GroupFilter = savedGroup;
+}
+
+
+static const char* noOptions[] = {
+        "testrunner.exe"
+};
+
+TEST(UnityCommandOptions, DefaultOptions)
+{
+    UnityGetCommandLineOptions(1, noOptions);
+    TEST_ASSERT_EQUAL(0, UnityFixture.Verbose);
+    TEST_ASSERT_POINTERS_EQUAL(0, UnityFixture.GroupFilter);
+    TEST_ASSERT_POINTERS_EQUAL(0, UnityFixture.NameFilter);
+    TEST_ASSERT_EQUAL(1, UnityFixture.RepeatCount);
+}
+
+static const char* verbose[] = {
+        "testrunner.exe",
+        "-v"
+};
+
+TEST(UnityCommandOptions, OptionVerbose)
+{
+    TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(2, verbose));
+    TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
+}
+
+static const char* group[] = {
+        "testrunner.exe",
+        "-g", "groupname"
+};
+
+TEST(UnityCommandOptions, OptionSelectTestByGroup)
+{
+    TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, group));
+    STRCMP_EQUAL("groupname", UnityFixture.GroupFilter);
+}
+
+static const char* name[] = {
+        "testrunner.exe",
+        "-n", "testname"
+};
+
+TEST(UnityCommandOptions, OptionSelectTestByName)
+{
+    TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, name));
+    STRCMP_EQUAL("testname", UnityFixture.NameFilter);
+}
+
+static const char* repeat[] = {
+        "testrunner.exe",
+        "-r", "99"
+};
+
+TEST(UnityCommandOptions, OptionSelectRepeatTestsDefaultCount)
+{
+    TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(2, repeat));
+    TEST_ASSERT_EQUAL(2, UnityFixture.RepeatCount);
+}
+
+TEST(UnityCommandOptions, OptionSelectRepeatTestsSpecificCount)
+{
+    TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, repeat));
+    TEST_ASSERT_EQUAL(99, UnityFixture.RepeatCount);
+}
+
+static const char* multiple[] = {
+        "testrunner.exe",
+        "-v",
+        "-g", "groupname",
+        "-n", "testname",
+        "-r", "98"
+};
+
+TEST(UnityCommandOptions, MultipleOptions)
+{
+    TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(8, multiple));
+    TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
+    STRCMP_EQUAL("groupname", UnityFixture.GroupFilter);
+    STRCMP_EQUAL("testname", UnityFixture.NameFilter);
+    TEST_ASSERT_EQUAL(98, UnityFixture.RepeatCount);
+}
+
+static const char* dashRNotLast[] = {
+        "testrunner.exe",
+        "-v",
+        "-g", "gggg",
+        "-r",
+        "-n", "tttt",
+};
+
+TEST(UnityCommandOptions, MultipleOptionsDashRNotLastAndNoValueSpecified)
+{
+    TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(7, dashRNotLast));
+    TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
+    STRCMP_EQUAL("gggg", UnityFixture.GroupFilter);
+    STRCMP_EQUAL("tttt", UnityFixture.NameFilter);
+    TEST_ASSERT_EQUAL(2, UnityFixture.RepeatCount);
+}
+
+static const char* unknownCommand[] = {
+        "testrunner.exe",
+        "-v",
+        "-g", "groupname",
+        "-n", "testname",
+        "-r", "98",
+        "-z"
+};
+TEST(UnityCommandOptions, UnknownCommandIsIgnored)
+{
+    TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(9, unknownCommand));
+    TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
+    STRCMP_EQUAL("groupname", UnityFixture.GroupFilter);
+    STRCMP_EQUAL("testname", UnityFixture.NameFilter);
+    TEST_ASSERT_EQUAL(98, UnityFixture.RepeatCount);
+}
+
+TEST(UnityCommandOptions, GroupOrNameFilterWithoutStringFails)
+{
+    TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(3, unknownCommand));
+    TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(5, unknownCommand));
+    TEST_ASSERT_EQUAL(1, UnityMain(3, unknownCommand, NULL));
+}
+
+TEST(UnityCommandOptions, GroupFilterReallyFilters)
+{
+    _U_UINT saved = Unity.NumberOfTests;
+    TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(4, unknownCommand));
+    UnityIgnoreTest(NULL, "non-matching", NULL);
+    TEST_ASSERT_EQUAL(saved, Unity.NumberOfTests);
+}
+
+IGNORE_TEST(UnityCommandOptions, TestShouldBeIgnored)
+{
+    TEST_FAIL_MESSAGE("This test should not run!");
+}
+
+//------------------------------------------------------------
+
+TEST_GROUP(LeakDetection);
+
+TEST_SETUP(LeakDetection)
+{
+#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
+    UnityOutputCharSpy_Create(200);
+#else
+    UnityOutputCharSpy_Create(1000);
+#endif
+}
+
+TEST_TEAR_DOWN(LeakDetection)
+{
+    UnityOutputCharSpy_Destroy();
+}
+
+#define EXPECT_ABORT_BEGIN \
+  { \
+    jmp_buf TestAbortFrame;   \
+    memcpy(TestAbortFrame, Unity.AbortFrame, sizeof(jmp_buf)); \
+    if (TEST_PROTECT()) \
+    {
+
+#define EXPECT_ABORT_END \
+    } \
+    memcpy(Unity.AbortFrame, TestAbortFrame, sizeof(jmp_buf)); \
+  }
+
+// This tricky set of defines lets us see if we are using the Spy, returns 1 if true
+#ifdef __STDC_VERSION__
+
+#if __STDC_VERSION__ >= 199901L
+#define USING_SPY_AS(a)                    EXPAND_AND_USE_2ND(ASSIGN_VALUE(a), 0)
+#define ASSIGN_VALUE(a)                    VAL_##a
+#define VAL_UnityOutputCharSpy_OutputChar  0, 1
+#define EXPAND_AND_USE_2ND(a, b)           SECOND_PARAM(a, b, throwaway)
+#define SECOND_PARAM(a, b, ...)            b
+#if USING_SPY_AS(UNITY_OUTPUT_CHAR)
+  #define USING_OUTPUT_SPY // UNITY_OUTPUT_CHAR = UnityOutputCharSpy_OutputChar
+#endif
+#endif // >= 199901
+
+#else  // __STDC_VERSION__ else
+#define UnityOutputCharSpy_OutputChar 42
+#if UNITY_OUTPUT_CHAR == UnityOutputCharSpy_OutputChar // Works if no -Wundef -Werror
+  #define USING_OUTPUT_SPY
+#endif
+#undef UnityOutputCharSpy_OutputChar
+#endif // __STDC_VERSION__
+
+TEST(LeakDetection, DetectsLeak)
+{
+#ifndef USING_OUTPUT_SPY
+    TEST_IGNORE_MESSAGE("Build with '-D UNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar' to enable tests");
+#else
+    void* m = malloc(10);
+    TEST_ASSERT_NOT_NULL(m);
+    UnityOutputCharSpy_Enable(1);
+    EXPECT_ABORT_BEGIN
+    UnityMalloc_EndTest();
+    EXPECT_ABORT_END
+    UnityOutputCharSpy_Enable(0);
+    Unity.CurrentTestFailed = 0;
+    CHECK(strstr(UnityOutputCharSpy_Get(), "This test leaks!"));
+    free(m);
+#endif
+}
+
+TEST(LeakDetection, BufferOverrunFoundDuringFree)
+{
+#ifndef USING_OUTPUT_SPY
+    TEST_IGNORE();
+#else
+    void* m = malloc(10);
+    char* s = (char*)m;
+    TEST_ASSERT_NOT_NULL(m);
+    s[10] = (char)0xFF;
+    UnityOutputCharSpy_Enable(1);
+    EXPECT_ABORT_BEGIN
+    free(m);
+    EXPECT_ABORT_END
+    UnityOutputCharSpy_Enable(0);
+    Unity.CurrentTestFailed = 0;
+    CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during free()"));
+#endif
+}
+
+TEST(LeakDetection, BufferOverrunFoundDuringRealloc)
+{
+#ifndef USING_OUTPUT_SPY
+    TEST_IGNORE();
+#else
+    void* m = malloc(10);
+    char* s = (char*)m;
+    TEST_ASSERT_NOT_NULL(m);
+    s[10] = (char)0xFF;
+    UnityOutputCharSpy_Enable(1);
+    EXPECT_ABORT_BEGIN
+    m = realloc(m, 100);
+    EXPECT_ABORT_END
+    UnityOutputCharSpy_Enable(0);
+    Unity.CurrentTestFailed = 0;
+    CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during realloc()"));
+#endif
+}
+
+TEST(LeakDetection, BufferGuardWriteFoundDuringFree)
+{
+#ifndef USING_OUTPUT_SPY
+    TEST_IGNORE();
+#else
+    void* m = malloc(10);
+    char* s = (char*)m;
+    TEST_ASSERT_NOT_NULL(m);
+    s[-1] = (char)0x00; // Will not detect 0
+    s[-2] = (char)0x01;
+    UnityOutputCharSpy_Enable(1);
+    EXPECT_ABORT_BEGIN
+    free(m);
+    EXPECT_ABORT_END
+    UnityOutputCharSpy_Enable(0);
+    Unity.CurrentTestFailed = 0;
+    CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during free()"));
+#endif
+}
+
+TEST(LeakDetection, BufferGuardWriteFoundDuringRealloc)
+{
+#ifndef USING_OUTPUT_SPY
+    TEST_IGNORE();
+#else
+    void* m = malloc(10);
+    char* s = (char*)m;
+    TEST_ASSERT_NOT_NULL(m);
+    s[-1] = (char)0x0A;
+    UnityOutputCharSpy_Enable(1);
+    EXPECT_ABORT_BEGIN
+    m = realloc(m, 100);
+    EXPECT_ABORT_END
+    UnityOutputCharSpy_Enable(0);
+    Unity.CurrentTestFailed = 0;
+    CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during realloc()"));
+#endif
+}
+
+TEST(LeakDetection, PointerSettingMax)
+{
+#ifndef USING_OUTPUT_SPY
+    TEST_IGNORE();
+#else
+    int i;
+    for (i = 0; i < 50; i++) UT_PTR_SET(pointer1, &int1);
+    UnityOutputCharSpy_Enable(1);
+    EXPECT_ABORT_BEGIN
+    UT_PTR_SET(pointer1, &int1);
+    EXPECT_ABORT_END
+    UnityOutputCharSpy_Enable(0);
+    Unity.CurrentTestFailed = 0;
+    CHECK(strstr(UnityOutputCharSpy_Get(), "Too many pointers set"));
+#endif
+}
+
+//------------------------------------------------------------
+
+TEST_GROUP(InternalMalloc);
+
+TEST_SETUP(InternalMalloc) { }
+TEST_TEAR_DOWN(InternalMalloc) { }
+
+TEST(InternalMalloc, MallocPastBufferFails)
+{
+#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
+    void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
+    void* n = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2);
+    TEST_ASSERT_NOT_NULL(m);
+    TEST_ASSERT_NULL(n);
+    free(m);
+#endif
+}
+
+TEST(InternalMalloc, CallocPastBufferFails)
+{
+#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
+    void* m = calloc(1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
+    void* n = calloc(1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2);
+    TEST_ASSERT_NOT_NULL(m);
+    TEST_ASSERT_NULL(n);
+    free(m);
+#endif
+}
+
+TEST(InternalMalloc, MallocThenReallocGrowsMemoryInPlace)
+{
+#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
+    void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
+    void* n = realloc(m, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 9);
+    TEST_ASSERT_NOT_NULL(m);
+    TEST_ASSERT_EQUAL(m, n);
+    free(n);
+#endif
+}
+
+TEST(InternalMalloc, ReallocFailDoesNotFreeMem)
+{
+#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
+    void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2);
+    void* n1 = malloc(10);
+    void* out_of_mem = realloc(n1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
+    void* n2 = malloc(10);
+    TEST_ASSERT_NOT_NULL(m);
+    TEST_ASSERT_NULL(out_of_mem);
+    TEST_ASSERT_NOT_EQUAL(n2, n1);
+    free(n2);
+    free(n1);
+    free(m);
+#endif
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/test/unity_fixture_TestRunner.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,57 @@
+//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#include "unity_fixture.h"
+
+TEST_GROUP_RUNNER(UnityFixture)
+{
+    RUN_TEST_CASE(UnityFixture, PointerSetting);
+    RUN_TEST_CASE(UnityFixture, ForceMallocFail);
+    RUN_TEST_CASE(UnityFixture, ReallocSmallerIsUnchanged);
+    RUN_TEST_CASE(UnityFixture, ReallocSameIsUnchanged);
+    RUN_TEST_CASE(UnityFixture, ReallocLargerNeeded);
+    RUN_TEST_CASE(UnityFixture, ReallocNullPointerIsLikeMalloc);
+    RUN_TEST_CASE(UnityFixture, ReallocSizeZeroFreesMemAndReturnsNullPointer);
+    RUN_TEST_CASE(UnityFixture, CallocFillsWithZero);
+    RUN_TEST_CASE(UnityFixture, PointerSet);
+    RUN_TEST_CASE(UnityFixture, FreeNULLSafety);
+    RUN_TEST_CASE(UnityFixture, ConcludeTestIncrementsFailCount);
+}
+
+TEST_GROUP_RUNNER(UnityCommandOptions)
+{
+    RUN_TEST_CASE(UnityCommandOptions, DefaultOptions);
+    RUN_TEST_CASE(UnityCommandOptions, OptionVerbose);
+    RUN_TEST_CASE(UnityCommandOptions, OptionSelectTestByGroup);
+    RUN_TEST_CASE(UnityCommandOptions, OptionSelectTestByName);
+    RUN_TEST_CASE(UnityCommandOptions, OptionSelectRepeatTestsDefaultCount);
+    RUN_TEST_CASE(UnityCommandOptions, OptionSelectRepeatTestsSpecificCount);
+    RUN_TEST_CASE(UnityCommandOptions, MultipleOptions);
+    RUN_TEST_CASE(UnityCommandOptions, MultipleOptionsDashRNotLastAndNoValueSpecified);
+    RUN_TEST_CASE(UnityCommandOptions, UnknownCommandIsIgnored);
+    RUN_TEST_CASE(UnityCommandOptions, GroupOrNameFilterWithoutStringFails);
+    RUN_TEST_CASE(UnityCommandOptions, GroupFilterReallyFilters);
+    RUN_TEST_CASE(UnityCommandOptions, TestShouldBeIgnored);
+}
+
+TEST_GROUP_RUNNER(LeakDetection)
+{
+    RUN_TEST_CASE(LeakDetection, DetectsLeak);
+    RUN_TEST_CASE(LeakDetection, BufferOverrunFoundDuringFree);
+    RUN_TEST_CASE(LeakDetection, BufferOverrunFoundDuringRealloc);
+    RUN_TEST_CASE(LeakDetection, BufferGuardWriteFoundDuringFree);
+    RUN_TEST_CASE(LeakDetection, BufferGuardWriteFoundDuringRealloc);
+    RUN_TEST_CASE(LeakDetection, PointerSettingMax);
+}
+
+TEST_GROUP_RUNNER(InternalMalloc)
+{
+    RUN_TEST_CASE(InternalMalloc, MallocPastBufferFails);
+    RUN_TEST_CASE(InternalMalloc, CallocPastBufferFails);
+    RUN_TEST_CASE(InternalMalloc, MallocThenReallocGrowsMemoryInPlace);
+    RUN_TEST_CASE(InternalMalloc, ReallocFailDoesNotFreeMem);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/test/unity_output_Spy.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,57 @@
+//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+
+#include "unity_output_Spy.h"
+#include "unity_fixture.h"
+
+#include <stdio.h>
+#include <string.h>
+
+static int size;
+static int count;
+static char* buffer;
+static int spy_enable;
+
+void UnityOutputCharSpy_Create(int s)
+{
+    size = (s > 0) ? s : 0;
+    count = 0;
+    spy_enable = 0;
+    buffer = malloc((size_t)size);
+    TEST_ASSERT_NOT_NULL_MESSAGE(buffer, "Internal malloc failed in Spy Create():" __FILE__);
+    memset(buffer, 0, (size_t)size);
+}
+
+void UnityOutputCharSpy_Destroy(void)
+{
+    size = 0;
+    free(buffer);
+}
+
+void UnityOutputCharSpy_OutputChar(int c)
+{
+    if (spy_enable)
+    {
+        if (count < (size-1))
+            buffer[count++] = (char)c;
+    }
+    else
+    {
+        putchar(c);
+    }
+}
+
+const char * UnityOutputCharSpy_Get(void)
+{
+    return buffer;
+}
+
+void UnityOutputCharSpy_Enable(int enable)
+{
+    spy_enable = enable;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/extras/fixture/test/unity_output_Spy.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,17 @@
+//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#ifndef D_unity_output_Spy_H
+#define D_unity_output_Spy_H
+
+void UnityOutputCharSpy_Create(int s);
+void UnityOutputCharSpy_Destroy(void);
+void UnityOutputCharSpy_OutputChar(int c);
+const char * UnityOutputCharSpy_Get(void);
+void UnityOutputCharSpy_Enable(int enable);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/release/build.info	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+119
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/release/version.info	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+2.3.2
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/src/unity.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1320 @@
+/* =========================================================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+============================================================================ */
+
+#include "unity.h"
+#include <stddef.h>
+
+/* If omitted from header, declare overrideable prototypes here so they're ready for use */
+#ifdef UNITY_OMIT_OUTPUT_CHAR_HEADER_DECLARATION
+void UNITY_OUTPUT_CHAR(int);
+#endif
+
+/* Helpful macros for us to use here */
+#define UNITY_FAIL_AND_BAIL   { Unity.CurrentTestFailed  = 1; longjmp(Unity.AbortFrame, 1); }
+#define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; longjmp(Unity.AbortFrame, 1); }
+
+/* return prematurely if we are already in failure or ignore state */
+#define UNITY_SKIP_EXECUTION  { if ((Unity.CurrentTestFailed != 0) || (Unity.CurrentTestIgnored != 0)) {return;} }
+
+struct _Unity Unity;
+
+static const char UnityStrOk[]                     = "OK";
+static const char UnityStrPass[]                   = "PASS";
+static const char UnityStrFail[]                   = "FAIL";
+static const char UnityStrIgnore[]                 = "IGNORE";
+static const char UnityStrNull[]                   = "NULL";
+static const char UnityStrSpacer[]                 = ". ";
+static const char UnityStrExpected[]               = " Expected ";
+static const char UnityStrWas[]                    = " Was ";
+static const char UnityStrElement[]                = " Element ";
+static const char UnityStrByte[]                   = " Byte ";
+static const char UnityStrMemory[]                 = " Memory Mismatch.";
+static const char UnityStrDelta[]                  = " Values Not Within Delta ";
+static const char UnityStrPointless[]              = " You Asked Me To Compare Nothing, Which Was Pointless.";
+static const char UnityStrNullPointerForExpected[] = " Expected pointer to be NULL";
+static const char UnityStrNullPointerForActual[]   = " Actual pointer was NULL";
+static const char UnityStrNot[]                    = "Not ";
+static const char UnityStrInf[]                    = "Infinity";
+static const char UnityStrNegInf[]                 = "Negative Infinity";
+static const char UnityStrNaN[]                    = "NaN";
+static const char UnityStrDet[]                    = "Determinate";
+static const char UnityStrInvalidFloatTrait[]      = "Invalid Float Trait";
+const char UnityStrErrFloat[]                      = "Unity Floating Point Disabled";
+const char UnityStrErrDouble[]                     = "Unity Double Precision Disabled";
+const char UnityStrErr64[]                         = "Unity 64-bit Support Disabled";
+static const char UnityStrBreaker[]                = "-----------------------";
+static const char UnityStrResultsTests[]           = " Tests ";
+static const char UnityStrResultsFailures[]        = " Failures ";
+static const char UnityStrResultsIgnored[]         = " Ignored ";
+static const char UnityStrDetail1Name[]            = UNITY_DETAIL1_NAME " ";
+static const char UnityStrDetail2Name[]            = " " UNITY_DETAIL2_NAME " ";
+
+#ifdef UNITY_FLOAT_NEEDS_ZERO
+/* Dividing by these constants produces +/- infinity.
+ * The rationale is given in UnityAssertFloatIsInf's body. */
+static const _UF f_zero = 0.0f;
+#endif
+
+/* compiler-generic print formatting masks */
+static const _U_UINT UnitySizeMask[] =
+{
+    255u,         /* 0xFF */
+    65535u,       /* 0xFFFF */
+    65535u,
+    4294967295u,  /* 0xFFFFFFFF */
+    4294967295u,
+    4294967295u,
+    4294967295u
+#ifdef UNITY_SUPPORT_64
+    ,0xFFFFFFFFFFFFFFFF
+#endif
+};
+
+/*-----------------------------------------------
+ * Pretty Printers & Test Result Output Handlers
+ *-----------------------------------------------*/
+
+void UnityPrint(const char* string)
+{
+    const char* pch = string;
+
+    if (pch != NULL)
+    {
+        while (*pch)
+        {
+            /* printable characters plus CR & LF are printed */
+            if ((*pch <= 126) && (*pch >= 32))
+            {
+                UNITY_OUTPUT_CHAR(*pch);
+            }
+            /* write escaped carriage returns */
+            else if (*pch == 13)
+            {
+                UNITY_OUTPUT_CHAR('\\');
+                UNITY_OUTPUT_CHAR('r');
+            }
+            /* write escaped line feeds */
+            else if (*pch == 10)
+            {
+                UNITY_OUTPUT_CHAR('\\');
+                UNITY_OUTPUT_CHAR('n');
+            }
+            /* unprintable characters are shown as codes */
+            else
+            {
+                UNITY_OUTPUT_CHAR('\\');
+                UnityPrintNumberHex((_U_UINT)*pch, 2);
+            }
+            pch++;
+        }
+    }
+}
+
+void UnityPrintLen(const char* string, const _UU32 length);
+void UnityPrintLen(const char* string, const _UU32 length)
+{
+    const char* pch = string;
+
+    if (pch != NULL)
+    {
+        while (*pch && (_UU32)(pch - string) < length)
+        {
+            /* printable characters plus CR & LF are printed */
+            if ((*pch <= 126) && (*pch >= 32))
+            {
+                UNITY_OUTPUT_CHAR(*pch);
+            }
+            /* write escaped carriage returns */
+            else if (*pch == 13)
+            {
+                UNITY_OUTPUT_CHAR('\\');
+                UNITY_OUTPUT_CHAR('r');
+            }
+            /* write escaped line feeds */
+            else if (*pch == 10)
+            {
+                UNITY_OUTPUT_CHAR('\\');
+                UNITY_OUTPUT_CHAR('n');
+            }
+            /* unprintable characters are shown as codes */
+            else
+            {
+                UNITY_OUTPUT_CHAR('\\');
+                UnityPrintNumberHex((_U_UINT)*pch, 2);
+            }
+            pch++;
+        }
+    }
+}
+
+/*-----------------------------------------------*/
+void UnityPrintNumberByStyle(const _U_SINT number, const UNITY_DISPLAY_STYLE_T style)
+{
+    if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT)
+    {
+        UnityPrintNumber(number);
+    }
+    else if ((style & UNITY_DISPLAY_RANGE_UINT) == UNITY_DISPLAY_RANGE_UINT)
+    {
+        UnityPrintNumberUnsigned(  (_U_UINT)number  &  UnitySizeMask[((_U_UINT)style & (_U_UINT)0x0F) - 1]  );
+    }
+    else
+    {
+        UnityPrintNumberHex((_U_UINT)number, (char)((style & 0x000F) << 1));
+    }
+}
+
+/*-----------------------------------------------*/
+void UnityPrintNumber(const _U_SINT number_to_print)
+{
+    _U_UINT number = (_U_UINT)number_to_print;
+
+    if (number_to_print < 0)
+    {
+        /* A negative number, including MIN negative */
+        UNITY_OUTPUT_CHAR('-');
+        number = (_U_UINT)(-number_to_print);
+    }
+    UnityPrintNumberUnsigned(number);
+}
+
+/*-----------------------------------------------
+ * basically do an itoa using as little ram as possible */
+void UnityPrintNumberUnsigned(const _U_UINT number)
+{
+    _U_UINT divisor = 1;
+
+    /* figure out initial divisor */
+    while (number / divisor > 9)
+    {
+        divisor *= 10;
+    }
+
+    /* now mod and print, then divide divisor */
+    do
+    {
+        UNITY_OUTPUT_CHAR((char)('0' + (number / divisor % 10)));
+        divisor /= 10;
+    }
+    while (divisor > 0);
+}
+
+/*-----------------------------------------------*/
+void UnityPrintNumberHex(const _U_UINT number, const char nibbles_to_print)
+{
+    _U_UINT nibble;
+    char nibbles = nibbles_to_print;
+    UNITY_OUTPUT_CHAR('0');
+    UNITY_OUTPUT_CHAR('x');
+
+    while (nibbles > 0)
+    {
+        nibble = (number >> (--nibbles << 2)) & 0x0000000F;
+        if (nibble <= 9)
+        {
+            UNITY_OUTPUT_CHAR((char)('0' + nibble));
+        }
+        else
+        {
+            UNITY_OUTPUT_CHAR((char)('A' - 10 + nibble));
+        }
+    }
+}
+
+/*-----------------------------------------------*/
+void UnityPrintMask(const _U_UINT mask, const _U_UINT number)
+{
+    _U_UINT current_bit = (_U_UINT)1 << (UNITY_INT_WIDTH - 1);
+    _US32 i;
+
+    for (i = 0; i < UNITY_INT_WIDTH; i++)
+    {
+        if (current_bit & mask)
+        {
+            if (current_bit & number)
+            {
+                UNITY_OUTPUT_CHAR('1');
+            }
+            else
+            {
+                UNITY_OUTPUT_CHAR('0');
+            }
+        }
+        else
+        {
+            UNITY_OUTPUT_CHAR('X');
+        }
+        current_bit = current_bit >> 1;
+    }
+}
+
+/*-----------------------------------------------*/
+#ifdef UNITY_FLOAT_VERBOSE
+#include <stdio.h>
+
+#ifndef UNITY_VERBOSE_NUMBER_MAX_LENGTH
+# ifdef UNITY_DOUBLE_VERBOSE
+#  define UNITY_VERBOSE_NUMBER_MAX_LENGTH 317
+# else
+#  define UNITY_VERBOSE_NUMBER_MAX_LENGTH 47
+# endif
+#endif
+
+void UnityPrintFloat(_UF number)
+{
+    char TempBuffer[UNITY_VERBOSE_NUMBER_MAX_LENGTH + 1];
+    snprintf(TempBuffer, sizeof(TempBuffer), "%.6f", number);
+    UnityPrint(TempBuffer);
+}
+#endif
+
+/*-----------------------------------------------*/
+
+void UnityPrintFail(void);
+void UnityPrintFail(void)
+{
+    UnityPrint(UnityStrFail);
+}
+
+void UnityPrintOk(void);
+void UnityPrintOk(void)
+{
+    UnityPrint(UnityStrOk);
+}
+
+/*-----------------------------------------------*/
+static void UnityTestResultsBegin(const char* file, const UNITY_LINE_TYPE line);
+static void UnityTestResultsBegin(const char* file, const UNITY_LINE_TYPE line)
+{
+#ifndef UNITY_FIXTURES
+    UnityPrint(file);
+    UNITY_OUTPUT_CHAR(':');
+    UnityPrintNumber((_U_SINT)line);
+    UNITY_OUTPUT_CHAR(':');
+    UnityPrint(Unity.CurrentTestName);
+    UNITY_OUTPUT_CHAR(':');
+#else
+    UNITY_UNUSED(file);
+    UNITY_UNUSED(line);
+#endif
+}
+
+/* SA_PATCH: Make failures more noticable. */
+static void UnityPrintVisibleFailure(void);
+static void UnityPrintVisibleFailure(void)
+{
+    UNITY_OUTPUT_CHAR('\n');
+    UnityPrint("===!!!===> ");
+    /* SA_PATCH: Output results using easy to parse tags. */
+    UnityPrint(UNITY_RESULTS_TAGS_RESULT_START);
+    UnityPrint(UnityStrFail);
+    /* SA_PATCH: Output results using easy to parse tags. */
+    UnityPrint(UNITY_RESULTS_TAGS_RESULT_END);
+    UnityPrint(" <===!!!===");
+}
+/*-----------------------------------------------*/
+static void UnityTestResultsFailBegin(const UNITY_LINE_TYPE line);
+static void UnityTestResultsFailBegin(const UNITY_LINE_TYPE line)
+{
+#ifndef UNITY_FIXTURES
+    UnityTestResultsBegin(Unity.TestFile, line);
+#else
+    UNITY_UNUSED(line);
+#endif
+    /* SA_PATCH: Make failures more noticable. */
+    UnityPrintVisibleFailure();
+    //UnityPrint(UnityStrFail);
+    UNITY_OUTPUT_CHAR(':');
+}
+
+/*-----------------------------------------------*/
+void UnityConcludeTest(void)
+{
+    if (Unity.CurrentTestIgnored)
+    {
+        Unity.TestIgnores++;
+    }
+    else if (!Unity.CurrentTestFailed)
+    {
+        UnityTestResultsBegin(Unity.TestFile, Unity.CurrentTestLineNumber);
+        UnityPrint(UnityStrPass);
+    }
+    else
+    {
+        Unity.TestFailures++;
+    }
+
+    Unity.CurrentTestFailed = 0;
+    Unity.CurrentTestIgnored = 0;
+    UNITY_PRINT_EOL();
+    UNITY_FLUSH_CALL();
+}
+
+/*-----------------------------------------------*/
+static void UnityAddMsgIfSpecified(const char* msg);
+static void UnityAddMsgIfSpecified(const char* msg)
+{
+    if (msg)
+    {
+        UnityPrint(UnityStrSpacer);
+#ifndef UNITY_EXCLUDE_DETAILS
+        if (Unity.CurrentDetail1)
+        {
+            UnityPrint(UnityStrDetail1Name);
+            UnityPrint(Unity.CurrentDetail1);
+            if (Unity.CurrentDetail2)
+            {
+                UnityPrint(UnityStrDetail2Name);
+                UnityPrint(Unity.CurrentDetail2);
+            }
+            UnityPrint(UnityStrSpacer);
+        }
+#endif
+        UnityPrint(msg);
+    }
+}
+
+/*-----------------------------------------------*/
+static void UnityPrintExpectedAndActualStrings(const char* expected, const char* actual);
+static void UnityPrintExpectedAndActualStrings(const char* expected, const char* actual)
+{
+    UnityPrint(UnityStrExpected);
+    if (expected != NULL)
+    {
+        UNITY_OUTPUT_CHAR('\'');
+        UnityPrint(expected);
+        UNITY_OUTPUT_CHAR('\'');
+    }
+    else
+    {
+      UnityPrint(UnityStrNull);
+    }
+    UnityPrint(UnityStrWas);
+    if (actual != NULL)
+    {
+        UNITY_OUTPUT_CHAR('\'');
+        UnityPrint(actual);
+        UNITY_OUTPUT_CHAR('\'');
+    }
+    else
+    {
+      UnityPrint(UnityStrNull);
+    }
+}
+
+/*-----------------------------------------------*/
+static void UnityPrintExpectedAndActualStringsLen(const char* expected, const char* actual, const _UU32 length)
+{
+    UnityPrint(UnityStrExpected);
+    if (expected != NULL)
+    {
+        UNITY_OUTPUT_CHAR('\'');
+        UnityPrintLen(expected, length);
+        UNITY_OUTPUT_CHAR('\'');
+    }
+    else
+    {
+      UnityPrint(UnityStrNull);
+    }
+    UnityPrint(UnityStrWas);
+    if (actual != NULL)
+    {
+        UNITY_OUTPUT_CHAR('\'');
+        UnityPrintLen(actual, length);
+        UNITY_OUTPUT_CHAR('\'');
+    }
+    else
+    {
+      UnityPrint(UnityStrNull);
+    }
+}
+
+
+
+/*-----------------------------------------------
+ * Assertion & Control Helpers
+ *-----------------------------------------------*/
+
+static int UnityCheckArraysForNull(UNITY_INTERNAL_PTR expected, UNITY_INTERNAL_PTR actual, const UNITY_LINE_TYPE lineNumber, const char* msg)
+{
+    /* return true if they are both NULL */
+    if ((expected == NULL) && (actual == NULL))
+        return 1;
+
+    /* throw error if just expected is NULL */
+    if (expected == NULL)
+    {
+        UnityTestResultsFailBegin(lineNumber);
+        UnityPrint(UnityStrNullPointerForExpected);
+        UnityAddMsgIfSpecified(msg);
+        UNITY_FAIL_AND_BAIL;
+    }
+
+    /* throw error if just actual is NULL */
+    if (actual == NULL)
+    {
+        UnityTestResultsFailBegin(lineNumber);
+        UnityPrint(UnityStrNullPointerForActual);
+        UnityAddMsgIfSpecified(msg);
+        UNITY_FAIL_AND_BAIL;
+    }
+
+    /* return false if neither is NULL */
+    return 0;
+}
+
+/*-----------------------------------------------
+ * Assertion Functions
+ *-----------------------------------------------*/
+
+void UnityAssertBits(const _U_SINT mask,
+                     const _U_SINT expected,
+                     const _U_SINT actual,
+                     const char* msg,
+                     const UNITY_LINE_TYPE lineNumber)
+{
+    UNITY_SKIP_EXECUTION;
+
+    if ((mask & expected) != (mask & actual))
+    {
+        UnityTestResultsFailBegin(lineNumber);
+        UnityPrint(UnityStrExpected);
+        UnityPrintMask((_U_UINT)mask, (_U_UINT)expected);
+        UnityPrint(UnityStrWas);
+        UnityPrintMask((_U_UINT)mask, (_U_UINT)actual);
+        UnityAddMsgIfSpecified(msg);
+        UNITY_FAIL_AND_BAIL;
+    }
+}
+
+/*-----------------------------------------------*/
+void UnityAssertEqualNumber(const _U_SINT expected,
+                            const _U_SINT actual,
+                            const char* msg,
+                            const UNITY_LINE_TYPE lineNumber,
+                            const UNITY_DISPLAY_STYLE_T style)
+{
+    UNITY_SKIP_EXECUTION;
+
+    if (expected != actual)
+    {
+        UnityTestResultsFailBegin(lineNumber);
+        UnityPrint(UnityStrExpected);
+        UnityPrintNumberByStyle(expected, style);
+        UnityPrint(UnityStrWas);
+        UnityPrintNumberByStyle(actual, style);
+        UnityAddMsgIfSpecified(msg);
+        UNITY_FAIL_AND_BAIL;
+    }
+}
+
+#define UnityPrintPointlessAndBail()       \
+{                                          \
+    UnityTestResultsFailBegin(lineNumber); \
+    UnityPrint(UnityStrPointless);         \
+    UnityAddMsgIfSpecified(msg);           \
+    UNITY_FAIL_AND_BAIL; }
+
+/*-----------------------------------------------*/
+void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected,
+                              UNITY_INTERNAL_PTR actual,
+                              const _UU32 num_elements,
+                              const char* msg,
+                              const UNITY_LINE_TYPE lineNumber,
+                              const UNITY_DISPLAY_STYLE_T style)
+{
+    _UU32 elements = num_elements;
+    UNITY_INTERNAL_PTR ptr_exp = (UNITY_INTERNAL_PTR)expected;
+    UNITY_INTERNAL_PTR ptr_act = (UNITY_INTERNAL_PTR)actual;
+
+    UNITY_SKIP_EXECUTION;
+
+    if (elements == 0)
+    {
+        UnityPrintPointlessAndBail();
+    }
+
+    if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
+        return;
+
+    /* If style is UNITY_DISPLAY_STYLE_INT, we'll fall into the default case rather than the INT16 or INT32 (etc) case
+     * as UNITY_DISPLAY_STYLE_INT includes a flag for UNITY_DISPLAY_RANGE_AUTO, which the width-specific
+     * variants do not. Therefore remove this flag. */
+    switch(style & (UNITY_DISPLAY_STYLE_T)(~UNITY_DISPLAY_RANGE_AUTO))
+    {
+        case UNITY_DISPLAY_STYLE_HEX8:
+        case UNITY_DISPLAY_STYLE_INT8:
+        case UNITY_DISPLAY_STYLE_UINT8:
+            while (elements--)
+            {
+                if (*(UNITY_PTR_ATTRIBUTE const _US8*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US8*)ptr_act)
+                {
+                    UnityTestResultsFailBegin(lineNumber);
+                    UnityPrint(UnityStrElement);
+                    UnityPrintNumberUnsigned(num_elements - elements - 1);
+                    UnityPrint(UnityStrExpected);
+                    UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US8*)ptr_exp, style);
+                    UnityPrint(UnityStrWas);
+                    UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US8*)ptr_act, style);
+                    UnityAddMsgIfSpecified(msg);
+                    UNITY_FAIL_AND_BAIL;
+                }
+                ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 1);
+                ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 1);
+            }
+            break;
+        case UNITY_DISPLAY_STYLE_HEX16:
+        case UNITY_DISPLAY_STYLE_INT16:
+        case UNITY_DISPLAY_STYLE_UINT16:
+            while (elements--)
+            {
+                if (*(UNITY_PTR_ATTRIBUTE const _US16*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US16*)ptr_act)
+                {
+                    UnityTestResultsFailBegin(lineNumber);
+                    UnityPrint(UnityStrElement);
+                    UnityPrintNumberUnsigned(num_elements - elements - 1);
+                    UnityPrint(UnityStrExpected);
+                    UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US16*)ptr_exp, style);
+                    UnityPrint(UnityStrWas);
+                    UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US16*)ptr_act, style);
+                    UnityAddMsgIfSpecified(msg);
+                    UNITY_FAIL_AND_BAIL;
+                }
+                ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 2);
+                ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 2);
+            }
+            break;
+#ifdef UNITY_SUPPORT_64
+        case UNITY_DISPLAY_STYLE_HEX64:
+        case UNITY_DISPLAY_STYLE_INT64:
+        case UNITY_DISPLAY_STYLE_UINT64:
+            while (elements--)
+            {
+                if (*(UNITY_PTR_ATTRIBUTE const _US64*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US64*)ptr_act)
+                {
+                    UnityTestResultsFailBegin(lineNumber);
+                    UnityPrint(UnityStrElement);
+                    UnityPrintNumberUnsigned(num_elements - elements - 1);
+                    UnityPrint(UnityStrExpected);
+                    UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US64*)ptr_exp, style);
+                    UnityPrint(UnityStrWas);
+                    UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US64*)ptr_act, style);
+                    UnityAddMsgIfSpecified(msg);
+                    UNITY_FAIL_AND_BAIL;
+                }
+                ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 8);
+                ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 8);
+            }
+            break;
+#endif
+        default:
+            while (elements--)
+            {
+                if (*(UNITY_PTR_ATTRIBUTE const _US32*)ptr_exp != *(UNITY_PTR_ATTRIBUTE const _US32*)ptr_act)
+                {
+                    UnityTestResultsFailBegin(lineNumber);
+                    UnityPrint(UnityStrElement);
+                    UnityPrintNumberUnsigned(num_elements - elements - 1);
+                    UnityPrint(UnityStrExpected);
+                    UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US32*)ptr_exp, style);
+                    UnityPrint(UnityStrWas);
+                    UnityPrintNumberByStyle(*(UNITY_PTR_ATTRIBUTE const _US32*)ptr_act, style);
+                    UnityAddMsgIfSpecified(msg);
+                    UNITY_FAIL_AND_BAIL;
+                }
+                ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 4);
+                ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 4);
+            }
+            break;
+    }
+}
+
+/*-----------------------------------------------*/
+#ifndef UNITY_EXCLUDE_FLOAT
+void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const _UF* expected,
+                                UNITY_PTR_ATTRIBUTE const _UF* actual,
+                                const _UU32 num_elements,
+                                const char* msg,
+                                const UNITY_LINE_TYPE lineNumber)
+{
+    _UU32 elements = num_elements;
+    UNITY_PTR_ATTRIBUTE const _UF* ptr_expected = expected;
+    UNITY_PTR_ATTRIBUTE const _UF* ptr_actual = actual;
+    _UF diff, tol;
+
+    UNITY_SKIP_EXECUTION;
+
+    if (elements == 0)
+    {
+        UnityPrintPointlessAndBail();
+    }
+
+    if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
+        return;
+
+    while (elements--)
+    {
+        diff = *ptr_expected - *ptr_actual;
+        if (diff < 0.0f)
+            diff = 0.0f - diff;
+        tol = UNITY_FLOAT_PRECISION * *ptr_expected;
+        if (tol < 0.0f)
+            tol = 0.0f - tol;
+
+        /* This first part of this condition will catch any NaN or Infinite values */
+        if (isnan(diff) || isinf(diff) || (diff > tol))
+        {
+            UnityTestResultsFailBegin(lineNumber);
+            UnityPrint(UnityStrElement);
+            UnityPrintNumberUnsigned(num_elements - elements - 1);
+#ifdef UNITY_FLOAT_VERBOSE
+            UnityPrint(UnityStrExpected);
+            UnityPrintFloat(*ptr_expected);
+            UnityPrint(UnityStrWas);
+            UnityPrintFloat(*ptr_actual);
+#else
+            UnityPrint(UnityStrDelta);
+#endif
+            UnityAddMsgIfSpecified(msg);
+            UNITY_FAIL_AND_BAIL;
+        }
+        ptr_expected++;
+        ptr_actual++;
+    }
+}
+
+/*-----------------------------------------------*/
+void UnityAssertFloatsWithin(const _UF delta,
+                             const _UF expected,
+                             const _UF actual,
+                             const char* msg,
+                             const UNITY_LINE_TYPE lineNumber)
+{
+    _UF diff = actual - expected;
+    _UF pos_delta = delta;
+
+    UNITY_SKIP_EXECUTION;
+
+    if (diff < 0.0f)
+    {
+        diff = 0.0f - diff;
+    }
+    if (pos_delta < 0.0f)
+    {
+        pos_delta = 0.0f - pos_delta;
+    }
+
+    /* This first part of this condition will catch any NaN or Infinite values */
+    if (isnan(diff) || isinf(diff) || (pos_delta < diff))
+    {
+        UnityTestResultsFailBegin(lineNumber);
+#ifdef UNITY_FLOAT_VERBOSE
+        UnityPrint(UnityStrExpected);
+        UnityPrintFloat(expected);
+        UnityPrint(UnityStrWas);
+        UnityPrintFloat(actual);
+#else
+        UnityPrint(UnityStrDelta);
+#endif
+        UnityAddMsgIfSpecified(msg);
+        UNITY_FAIL_AND_BAIL;
+    }
+}
+
+/*-----------------------------------------------*/
+void UnityAssertFloatSpecial(const _UF actual,
+                             const char* msg,
+                             const UNITY_LINE_TYPE lineNumber,
+                             const UNITY_FLOAT_TRAIT_T style)
+{
+    const char* trait_names[] = { UnityStrInf, UnityStrNegInf, UnityStrNaN, UnityStrDet };
+    _U_SINT should_be_trait   = ((_U_SINT)style & 1);
+    _U_SINT is_trait          = !should_be_trait;
+    _U_SINT trait_index       = (_U_SINT)(style >> 1);
+
+    UNITY_SKIP_EXECUTION;
+
+    switch(style)
+    {
+        /* To determine Inf / Neg Inf, we compare to an Inf / Neg Inf value we create on the fly
+         * We are using a variable to hold the zero value because some compilers complain about dividing by zero otherwise */
+        case UNITY_FLOAT_IS_INF:
+        case UNITY_FLOAT_IS_NOT_INF:
+            is_trait = isinf(actual) & ispos(actual);
+            break;
+        case UNITY_FLOAT_IS_NEG_INF:
+        case UNITY_FLOAT_IS_NOT_NEG_INF:
+            is_trait = isinf(actual) & isneg(actual);
+            break;
+
+        /* NaN is the only floating point value that does NOT equal itself. Therefore if Actual == Actual, then it is NOT NaN. */
+        case UNITY_FLOAT_IS_NAN:
+        case UNITY_FLOAT_IS_NOT_NAN:
+            is_trait = isnan(actual);
+            break;
+
+        /* A determinate number is non infinite and not NaN. (therefore the opposite of the two above) */
+        case UNITY_FLOAT_IS_DET:
+        case UNITY_FLOAT_IS_NOT_DET:
+            if (isinf(actual) | isnan(actual))
+                is_trait = 0;
+            else
+                is_trait = 1;
+            break;
+
+        default:
+            trait_index = 0;
+            trait_names[0] = UnityStrInvalidFloatTrait;
+            break;
+    }
+
+    if (is_trait != should_be_trait)
+    {
+        UnityTestResultsFailBegin(lineNumber);
+        UnityPrint(UnityStrExpected);
+        if (!should_be_trait)
+            UnityPrint(UnityStrNot);
+        UnityPrint(trait_names[trait_index]);
+        UnityPrint(UnityStrWas);
+#ifdef UNITY_FLOAT_VERBOSE
+        UnityPrintFloat(actual);
+#else
+        if (should_be_trait)
+            UnityPrint(UnityStrNot);
+        UnityPrint(trait_names[trait_index]);
+#endif
+        UnityAddMsgIfSpecified(msg);
+        UNITY_FAIL_AND_BAIL;
+    }
+}
+
+#endif /* not UNITY_EXCLUDE_FLOAT */
+
+/*-----------------------------------------------*/
+#ifndef UNITY_EXCLUDE_DOUBLE
+void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const _UD* expected,
+                                 UNITY_PTR_ATTRIBUTE const _UD* actual,
+                                 const _UU32 num_elements,
+                                 const char* msg,
+                                 const UNITY_LINE_TYPE lineNumber)
+{
+    _UU32 elements = num_elements;
+    UNITY_PTR_ATTRIBUTE const _UD* ptr_expected = expected;
+    UNITY_PTR_ATTRIBUTE const _UD* ptr_actual = actual;
+    _UD diff, tol;
+
+    UNITY_SKIP_EXECUTION;
+
+    if (elements == 0)
+    {
+        UnityPrintPointlessAndBail();
+    }
+
+    if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
+        return;
+
+    while (elements--)
+    {
+        diff = *ptr_expected - *ptr_actual;
+        if (diff < 0.0)
+          diff = 0.0 - diff;
+        tol = UNITY_DOUBLE_PRECISION * *ptr_expected;
+        if (tol < 0.0)
+            tol = 0.0 - tol;
+
+        /* This first part of this condition will catch any NaN or Infinite values */
+        if (isnan(diff) || isinf(diff) || (diff > tol))
+        {
+            UnityTestResultsFailBegin(lineNumber);
+            UnityPrint(UnityStrElement);
+            UnityPrintNumberUnsigned(num_elements - elements - 1);
+#ifdef UNITY_DOUBLE_VERBOSE
+            UnityPrint(UnityStrExpected);
+            UnityPrintFloat((float)(*ptr_expected));
+            UnityPrint(UnityStrWas);
+            UnityPrintFloat((float)(*ptr_actual));
+#else
+            UnityPrint(UnityStrDelta);
+#endif
+            UnityAddMsgIfSpecified(msg);
+            UNITY_FAIL_AND_BAIL;
+        }
+        ptr_expected++;
+        ptr_actual++;
+    }
+}
+
+/*-----------------------------------------------*/
+void UnityAssertDoublesWithin(const _UD delta,
+                              const _UD expected,
+                              const _UD actual,
+                              const char* msg,
+                              const UNITY_LINE_TYPE lineNumber)
+{
+    _UD diff = actual - expected;
+    _UD pos_delta = delta;
+
+    UNITY_SKIP_EXECUTION;
+
+    if (diff < 0.0)
+    {
+        diff = 0.0 - diff;
+    }
+    if (pos_delta < 0.0)
+    {
+        pos_delta = 0.0 - pos_delta;
+    }
+
+    /* This first part of this condition will catch any NaN or Infinite values */
+    if (isnan(diff) || isinf(diff) || (pos_delta < diff))
+    {
+        UnityTestResultsFailBegin(lineNumber);
+#ifdef UNITY_DOUBLE_VERBOSE
+        UnityPrint(UnityStrExpected);
+        UnityPrintFloat((float)expected);
+        UnityPrint(UnityStrWas);
+        UnityPrintFloat((float)actual);
+#else
+        UnityPrint(UnityStrDelta);
+#endif
+        UnityAddMsgIfSpecified(msg);
+        UNITY_FAIL_AND_BAIL;
+    }
+}
+
+/*-----------------------------------------------*/
+
+void UnityAssertDoubleSpecial(const _UD actual,
+                              const char* msg,
+                              const UNITY_LINE_TYPE lineNumber,
+                              const UNITY_FLOAT_TRAIT_T style)
+{
+    const char* trait_names[] = { UnityStrInf, UnityStrNegInf, UnityStrNaN, UnityStrDet };
+    _U_SINT should_be_trait   = ((_U_SINT)style & 1);
+    _U_SINT is_trait          = !should_be_trait;
+    _U_SINT trait_index       = (_U_SINT)(style >> 1);
+
+    UNITY_SKIP_EXECUTION;
+
+     switch(style)
+    {
+        /* To determine Inf / Neg Inf, we compare to an Inf / Neg Inf value we create on the fly
+         * We are using a variable to hold the zero value because some compilers complain about dividing by zero otherwise */
+        case UNITY_FLOAT_IS_INF:
+        case UNITY_FLOAT_IS_NOT_INF:
+            is_trait = isinf(actual) & ispos(actual);
+            break;
+        case UNITY_FLOAT_IS_NEG_INF:
+        case UNITY_FLOAT_IS_NOT_NEG_INF:
+            is_trait = isinf(actual) & isneg(actual);
+            break;
+
+        /* NaN is the only floating point value that does NOT equal itself. Therefore if Actual == Actual, then it is NOT NaN. */
+        case UNITY_FLOAT_IS_NAN:
+        case UNITY_FLOAT_IS_NOT_NAN:
+            is_trait = isnan(actual);
+            break;
+
+        /* A determinate number is non infinite and not NaN. (therefore the opposite of the two above) */
+        case UNITY_FLOAT_IS_DET:
+        case UNITY_FLOAT_IS_NOT_DET:
+            if (isinf(actual) | isnan(actual))
+                is_trait = 0;
+            else
+                is_trait = 1;
+            break;
+
+        default:
+            trait_index = 0;
+            trait_names[0] = UnityStrInvalidFloatTrait;
+            break;
+    }
+
+    if (is_trait != should_be_trait)
+    {
+        UnityTestResultsFailBegin(lineNumber);
+        UnityPrint(UnityStrExpected);
+        if (!should_be_trait)
+            UnityPrint(UnityStrNot);
+        UnityPrint(trait_names[trait_index]);
+        UnityPrint(UnityStrWas);
+#ifdef UNITY_DOUBLE_VERBOSE
+        UnityPrintFloat(actual);
+#else
+        if (should_be_trait)
+            UnityPrint(UnityStrNot);
+        UnityPrint(trait_names[trait_index]);
+#endif
+        UnityAddMsgIfSpecified(msg);
+        UNITY_FAIL_AND_BAIL;
+    }
+}
+
+
+#endif /* not UNITY_EXCLUDE_DOUBLE */
+
+/*-----------------------------------------------*/
+void UnityAssertNumbersWithin( const _U_UINT delta,
+                               const _U_SINT expected,
+                               const _U_SINT actual,
+                               const char* msg,
+                               const UNITY_LINE_TYPE lineNumber,
+                               const UNITY_DISPLAY_STYLE_T style)
+{
+    UNITY_SKIP_EXECUTION;
+
+    if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT)
+    {
+        if (actual > expected)
+            Unity.CurrentTestFailed = ((_U_UINT)(actual - expected) > delta);
+        else
+            Unity.CurrentTestFailed = ((_U_UINT)(expected - actual) > delta);
+    }
+    else
+    {
+        if ((_U_UINT)actual > (_U_UINT)expected)
+            Unity.CurrentTestFailed = ((_U_UINT)(actual - expected) > delta);
+        else
+            Unity.CurrentTestFailed = ((_U_UINT)(expected - actual) > delta);
+    }
+
+    if (Unity.CurrentTestFailed)
+    {
+        UnityTestResultsFailBegin(lineNumber);
+        UnityPrint(UnityStrDelta);
+        UnityPrintNumberByStyle((_U_SINT)delta, style);
+        UnityPrint(UnityStrExpected);
+        UnityPrintNumberByStyle(expected, style);
+        UnityPrint(UnityStrWas);
+        UnityPrintNumberByStyle(actual, style);
+        UnityAddMsgIfSpecified(msg);
+        UNITY_FAIL_AND_BAIL;
+    }
+}
+
+/*-----------------------------------------------*/
+void UnityAssertEqualString(const char* expected,
+                            const char* actual,
+                            const char* msg,
+                            const UNITY_LINE_TYPE lineNumber)
+{
+    _UU32 i;
+
+    UNITY_SKIP_EXECUTION;
+
+    /* if both pointers not null compare the strings */
+    if (expected && actual)
+    {
+        for (i = 0; expected[i] || actual[i]; i++)
+        {
+            if (expected[i] != actual[i])
+            {
+                Unity.CurrentTestFailed = 1;
+                break;
+            }
+        }
+    }
+    else
+    { /* handle case of one pointers being null (if both null, test should pass) */
+        if (expected != actual)
+        {
+            Unity.CurrentTestFailed = 1;
+        }
+    }
+
+    if (Unity.CurrentTestFailed)
+    {
+      UnityTestResultsFailBegin(lineNumber);
+      UnityPrintExpectedAndActualStrings(expected, actual);
+      UnityAddMsgIfSpecified(msg);
+      UNITY_FAIL_AND_BAIL;
+    }
+}
+
+/*-----------------------------------------------*/
+void UnityAssertEqualStringLen(const char* expected,
+                            const char* actual,
+                            const _UU32 length,
+                            const char* msg,
+                            const UNITY_LINE_TYPE lineNumber)
+{
+    _UU32 i;
+
+    UNITY_SKIP_EXECUTION;
+
+    /* if both pointers not null compare the strings */
+    if (expected && actual)
+    {
+        for (i = 0; (expected[i] || actual[i]) && i < length; i++)
+        {
+            if (expected[i] != actual[i])
+            {
+                Unity.CurrentTestFailed = 1;
+                break;
+            }
+        }
+    }
+    else
+    { /* handle case of one pointers being null (if both null, test should pass) */
+        if (expected != actual)
+        {
+            Unity.CurrentTestFailed = 1;
+        }
+    }
+
+    if (Unity.CurrentTestFailed)
+    {
+      UnityTestResultsFailBegin(lineNumber);
+      UnityPrintExpectedAndActualStringsLen(expected, actual, length);
+      UnityAddMsgIfSpecified(msg);
+      UNITY_FAIL_AND_BAIL;
+    }
+}
+
+
+/*-----------------------------------------------*/
+void UnityAssertEqualStringArray( const char** expected,
+                                  const char** actual,
+                                  const _UU32 num_elements,
+                                  const char* msg,
+                                  const UNITY_LINE_TYPE lineNumber)
+{
+    _UU32 i, j = 0;
+
+    UNITY_SKIP_EXECUTION;
+
+    /* if no elements, it's an error */
+    if (num_elements == 0)
+    {
+        UnityPrintPointlessAndBail();
+    }
+
+    if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
+        return;
+
+    do
+    {
+        /* if both pointers not null compare the strings */
+        if (expected[j] && actual[j])
+        {
+            for (i = 0; expected[j][i] || actual[j][i]; i++)
+            {
+                if (expected[j][i] != actual[j][i])
+                {
+                    Unity.CurrentTestFailed = 1;
+                    break;
+                }
+            }
+        }
+        else
+        { /* handle case of one pointers being null (if both null, test should pass) */
+            if (expected[j] != actual[j])
+            {
+                Unity.CurrentTestFailed = 1;
+            }
+        }
+
+        if (Unity.CurrentTestFailed)
+        {
+            UnityTestResultsFailBegin(lineNumber);
+            if (num_elements > 1)
+            {
+                UnityPrint(UnityStrElement);
+                UnityPrintNumberUnsigned(j);
+            }
+            UnityPrintExpectedAndActualStrings((const char*)(expected[j]), (const char*)(actual[j]));
+            UnityAddMsgIfSpecified(msg);
+            UNITY_FAIL_AND_BAIL;
+        }
+    } while (++j < num_elements);
+}
+
+/*-----------------------------------------------*/
+void UnityAssertEqualMemory( UNITY_INTERNAL_PTR expected,
+                             UNITY_INTERNAL_PTR actual,
+                             const _UU32 length,
+                             const _UU32 num_elements,
+                             const char* msg,
+                             const UNITY_LINE_TYPE lineNumber)
+{
+    UNITY_PTR_ATTRIBUTE const unsigned char* ptr_exp = (UNITY_PTR_ATTRIBUTE const unsigned char*)expected;
+    UNITY_PTR_ATTRIBUTE const unsigned char* ptr_act = (UNITY_PTR_ATTRIBUTE const unsigned char*)actual;
+    _UU32 elements = num_elements;
+    _UU32 bytes;
+
+    UNITY_SKIP_EXECUTION;
+
+    if ((elements == 0) || (length == 0))
+    {
+        UnityPrintPointlessAndBail();
+    }
+
+    if (UnityCheckArraysForNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg) == 1)
+        return;
+
+    while (elements--)
+    {
+        /* /////////////////////////////////// */
+        bytes = length;
+        while (bytes--)
+        {
+            if (*ptr_exp != *ptr_act)
+            {
+                UnityTestResultsFailBegin(lineNumber);
+                UnityPrint(UnityStrMemory);
+                if (num_elements > 1)
+                {
+                    UnityPrint(UnityStrElement);
+                    UnityPrintNumberUnsigned(num_elements - elements - 1);
+                }
+                UnityPrint(UnityStrByte);
+                UnityPrintNumberUnsigned(length - bytes - 1);
+                UnityPrint(UnityStrExpected);
+                UnityPrintNumberByStyle(*ptr_exp, UNITY_DISPLAY_STYLE_HEX8);
+                UnityPrint(UnityStrWas);
+                UnityPrintNumberByStyle(*ptr_act, UNITY_DISPLAY_STYLE_HEX8);
+                UnityAddMsgIfSpecified(msg);
+                UNITY_FAIL_AND_BAIL;
+            }
+            ptr_exp = (UNITY_INTERNAL_PTR)((_UP)ptr_exp + 1);
+            ptr_act = (UNITY_INTERNAL_PTR)((_UP)ptr_act + 1);
+        }
+        /* /////////////////////////////////// */
+
+    }
+}
+
+/*-----------------------------------------------
+ * Control Functions
+ *-----------------------------------------------*/
+
+void UnityFail(const char* msg, const UNITY_LINE_TYPE line)
+{
+   UNITY_SKIP_EXECUTION;
+
+    UnityTestResultsBegin(Unity.TestFile, line);
+    /* SA_PATCH: Make failures more noticable. */
+    UnityPrintVisibleFailure();
+    //UnityPrintFail();
+    if (msg != NULL)
+    {
+        UNITY_OUTPUT_CHAR(':');
+
+#ifndef UNITY_EXCLUDE_DETAILS
+        if (Unity.CurrentDetail1)
+        {
+            UnityPrint(UnityStrDetail1Name);
+            UnityPrint(Unity.CurrentDetail1);
+            if (Unity.CurrentDetail2)
+            {
+                UnityPrint(UnityStrDetail2Name);
+                UnityPrint(Unity.CurrentDetail2);
+            }
+            UnityPrint(UnityStrSpacer);
+        }
+#endif
+        if (msg[0] != ' ')
+        {
+            UNITY_OUTPUT_CHAR(' ');
+        }
+        UnityPrint(msg);
+    }
+
+    UNITY_FAIL_AND_BAIL;
+}
+
+/*-----------------------------------------------*/
+void UnityIgnore(const char* msg, const UNITY_LINE_TYPE line)
+{
+    UNITY_SKIP_EXECUTION;
+
+    UnityTestResultsBegin(Unity.TestFile, line);
+    UnityPrint(UnityStrIgnore);
+    if (msg != NULL)
+    {
+      UNITY_OUTPUT_CHAR(':');
+      UNITY_OUTPUT_CHAR(' ');
+      UnityPrint(msg);
+    }
+    UNITY_IGNORE_AND_BAIL;
+}
+
+/*-----------------------------------------------*/
+#if defined(UNITY_WEAK_ATTRIBUTE)
+    UNITY_WEAK_ATTRIBUTE void setUp(void) { }
+    UNITY_WEAK_ATTRIBUTE void tearDown(void) { }
+#elif defined(UNITY_WEAK_PRAGMA)
+#   pragma weak setUp
+    void setUp(void) { }
+#   pragma weak tearDown
+    void tearDown(void) { }
+#endif
+/*-----------------------------------------------*/
+void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum)
+{
+    Unity.CurrentTestName = FuncName;
+    Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)FuncLineNum;
+    Unity.NumberOfTests++;
+    UNITY_CLR_DETAILS();
+    if (TEST_PROTECT())
+    {
+        setUp();
+        Func();
+    }
+    if (TEST_PROTECT() && !(Unity.CurrentTestIgnored))
+    {
+        tearDown();
+    }
+    UnityConcludeTest();
+}
+
+/*-----------------------------------------------*/
+void UnityBegin(const char* filename)
+{
+    Unity.TestFile = filename;
+    Unity.CurrentTestName = NULL;
+    Unity.CurrentTestLineNumber = 0;
+    Unity.NumberOfTests = 0;
+    Unity.TestFailures = 0;
+    Unity.TestIgnores = 0;
+    Unity.CurrentTestFailed = 0;
+    Unity.CurrentTestIgnored = 0;
+
+    UNITY_CLR_DETAILS();
+    UNITY_OUTPUT_START();
+}
+
+/*-----------------------------------------------*/
+int UnityEnd(void)
+{
+    UNITY_PRINT_EOL();
+    UnityPrint(UnityStrBreaker);
+    UNITY_PRINT_EOL();
+    UnityPrintNumber((_U_SINT)(Unity.NumberOfTests));
+    UnityPrint(UnityStrResultsTests);
+    UnityPrintNumber((_U_SINT)(Unity.TestFailures));
+    UnityPrint(UnityStrResultsFailures);
+    UnityPrintNumber((_U_SINT)(Unity.TestIgnores));
+    UnityPrint(UnityStrResultsIgnored);
+    UNITY_PRINT_EOL();
+    if (Unity.TestFailures == 0U)
+    {
+        UnityPrintOk();
+    }
+    else
+    {
+        UnityPrintFail();
+#ifdef UNITY_DIFFERENTIATE_FINAL_FAIL
+        UNITY_OUTPUT_CHAR('E'); UNITY_OUTPUT_CHAR('D');
+#endif
+    }
+    UNITY_PRINT_EOL();
+    UNITY_FLUSH_CALL();
+    UNITY_OUTPUT_COMPLETE();
+    return (int)(Unity.TestFailures);
+}
+
+/*-----------------------------------------------*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/src/unity.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,291 @@
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#ifndef UNITY_FRAMEWORK_H
+#define UNITY_FRAMEWORK_H
+#define UNITY
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include "unity_internals.h"
+
+void setUp(void);
+void tearDown(void);
+
+/*-------------------------------------------------------
+ * Configuration Options
+ *-------------------------------------------------------
+ * All options described below should be passed as a compiler flag to all files using Unity. If you must add #defines, place them BEFORE the #include above.
+
+ * Integers/longs/pointers
+ *     - Unity attempts to automatically discover your integer sizes
+ *       - define UNITY_EXCLUDE_STDINT_H to stop attempting to look in <stdint.h>
+ *       - define UNITY_EXCLUDE_LIMITS_H to stop attempting to look in <limits.h>
+ *       - define UNITY_EXCLUDE_SIZEOF to stop attempting to use sizeof in macros
+ *     - If you cannot use the automatic methods above, you can force Unity by using these options:
+ *       - define UNITY_SUPPORT_64
+ *       - define UNITY_INT_WIDTH
+ *       - UNITY_LONG_WIDTH
+ *       - UNITY_POINTER_WIDTH
+
+ * Floats
+ *     - define UNITY_EXCLUDE_FLOAT to disallow floating point comparisons
+ *     - define UNITY_FLOAT_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_FLOAT
+ *     - define UNITY_FLOAT_TYPE to specify doubles instead of single precision floats
+ *     - define UNITY_FLOAT_VERBOSE to print floating point values in errors (uses sprintf)
+ *     - define UNITY_INCLUDE_DOUBLE to allow double floating point comparisons
+ *     - define UNITY_EXCLUDE_DOUBLE to disallow double floating point comparisons (default)
+ *     - define UNITY_DOUBLE_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_DOUBLE
+ *     - define UNITY_DOUBLE_TYPE to specify something other than double
+ *     - define UNITY_DOUBLE_VERBOSE to print floating point values in errors (uses sprintf)
+ *     - define UNITY_VERBOSE_NUMBER_MAX_LENGTH to change maximum length of printed numbers (used by sprintf)
+
+ * Output
+ *     - by default, Unity prints to standard out with putchar.  define UNITY_OUTPUT_CHAR(a) with a different function if desired
+ *     - define UNITY_DIFFERENTIATE_FINAL_FAIL to print FAILED (vs. FAIL) at test end summary - for automated search for failure
+
+ * Optimization
+ *     - by default, line numbers are stored in unsigned shorts.  Define UNITY_LINE_TYPE with a different type if your files are huge
+ *     - by default, test and failure counters are unsigned shorts.  Define UNITY_COUNTER_TYPE with a different type if you want to save space or have more than 65535 Tests.
+
+ * Test Cases
+ *     - define UNITY_SUPPORT_TEST_CASES to include the TEST_CASE macro, though really it's mostly about the runner generator script
+
+ * Parameterized Tests
+ *     - you'll want to create a define of TEST_CASE(...) which basically evaluates to nothing
+
+ *-------------------------------------------------------
+ * Basic Fail and Ignore
+ *-------------------------------------------------------*/
+
+#define TEST_FAIL_MESSAGE(message)                                                                 UNITY_TEST_FAIL(__LINE__, (message))
+#define TEST_FAIL()                                                                                UNITY_TEST_FAIL(__LINE__, NULL)
+#define TEST_IGNORE_MESSAGE(message)                                                               UNITY_TEST_IGNORE(__LINE__, (message))
+#define TEST_IGNORE()                                                                              UNITY_TEST_IGNORE(__LINE__, NULL)
+#define TEST_ONLY()
+
+/* It is not necessary for you to call PASS. A PASS condition is assumed if nothing fails.
+ * This method allows you to abort a test immediately with a PASS state, ignoring the remainder of the test. */
+#define TEST_PASS()                                                                                longjmp(Unity.AbortFrame, 1)
+
+/*-------------------------------------------------------
+ * Test Asserts (simple)
+ *-------------------------------------------------------*/
+
+/* Boolean */
+#define TEST_ASSERT(condition)                                                                     UNITY_TEST_ASSERT(       (condition), __LINE__, " Expression Evaluated To FALSE")
+#define TEST_ASSERT_TRUE(condition)                                                                UNITY_TEST_ASSERT(       (condition), __LINE__, " Expected TRUE Was FALSE")
+#define TEST_ASSERT_UNLESS(condition)                                                              UNITY_TEST_ASSERT(      !(condition), __LINE__, " Expression Evaluated To TRUE")
+#define TEST_ASSERT_FALSE(condition)                                                               UNITY_TEST_ASSERT(      !(condition), __LINE__, " Expected FALSE Was TRUE")
+#define TEST_ASSERT_NULL(pointer)                                                                  UNITY_TEST_ASSERT_NULL(    (pointer), __LINE__, " Expected NULL")
+#define TEST_ASSERT_NOT_NULL(pointer)                                                              UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, " Expected Non-NULL")
+
+/* Integers (of all sizes) */
+#define TEST_ASSERT_EQUAL_INT(expected, actual)                                                    UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_INT8(expected, actual)                                                   UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_INT16(expected, actual)                                                  UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_INT32(expected, actual)                                                  UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_INT64(expected, actual)                                                  UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL(expected, actual)                                                        UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_NOT_EQUAL(expected, actual)                                                    UNITY_TEST_ASSERT(((expected) !=  (actual)), __LINE__, " Expected Not-Equal")
+#define TEST_ASSERT_EQUAL_UINT(expected, actual)                                                   UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_UINT8(expected, actual)                                                  UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_UINT16(expected, actual)                                                 UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_UINT32(expected, actual)                                                 UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_UINT64(expected, actual)                                                 UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_HEX(expected, actual)                                                    UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_HEX8(expected, actual)                                                   UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_HEX16(expected, actual)                                                  UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_HEX32(expected, actual)                                                  UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_HEX64(expected, actual)                                                  UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_BITS(mask, expected, actual)                                                   UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_BITS_HIGH(mask, actual)                                                        UNITY_TEST_ASSERT_BITS((mask), (_UU32)(-1), (actual), __LINE__, NULL)
+#define TEST_ASSERT_BITS_LOW(mask, actual)                                                         UNITY_TEST_ASSERT_BITS((mask), (_UU32)(0), (actual), __LINE__, NULL)
+#define TEST_ASSERT_BIT_HIGH(bit, actual)                                                          UNITY_TEST_ASSERT_BITS(((_UU32)1 << (bit)), (_UU32)(-1), (actual), __LINE__, NULL)
+#define TEST_ASSERT_BIT_LOW(bit, actual)                                                           UNITY_TEST_ASSERT_BITS(((_UU32)1 << (bit)), (_UU32)(0), (actual), __LINE__, NULL)
+
+/* Integer Ranges (of all sizes) */
+#define TEST_ASSERT_INT_WITHIN(delta, expected, actual)                                            UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_INT8_WITHIN(delta, expected, actual)                                           UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_INT16_WITHIN(delta, expected, actual)                                          UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_INT32_WITHIN(delta, expected, actual)                                          UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_INT64_WITHIN(delta, expected, actual)                                          UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_UINT_WITHIN(delta, expected, actual)                                           UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_UINT8_WITHIN(delta, expected, actual)                                          UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_UINT16_WITHIN(delta, expected, actual)                                         UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_UINT32_WITHIN(delta, expected, actual)                                         UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_UINT64_WITHIN(delta, expected, actual)                                         UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_HEX_WITHIN(delta, expected, actual)                                            UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_HEX8_WITHIN(delta, expected, actual)                                           UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_HEX16_WITHIN(delta, expected, actual)                                          UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_HEX32_WITHIN(delta, expected, actual)                                          UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_HEX64_WITHIN(delta, expected, actual)                                          UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+
+/* Structs and Strings */
+#define TEST_ASSERT_EQUAL_PTR(expected, actual)                                                    UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_STRING(expected, actual)                                                 UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len)                                        UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_MEMORY(expected, actual, len)                                            UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, NULL)
+
+/* Arrays */
+#define TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements)                                UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements)                               UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements)                              UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements)                              UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements)                              UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements)                               UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements)                              UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements)                             UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements)                             UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements)                             UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_HEX_ARRAY(expected, actual, num_elements)                                UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements)                               UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements)                              UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements)                              UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements)                              UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements)                                UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements)                             UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements)                        UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, NULL)
+
+/* Floating Point (If Enabled) */
+#define TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual)                                          UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_FLOAT(expected, actual)                                                  UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements)                              UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_FLOAT_IS_INF(actual)                                                           UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, NULL)
+#define TEST_ASSERT_FLOAT_IS_NEG_INF(actual)                                                       UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, NULL)
+#define TEST_ASSERT_FLOAT_IS_NAN(actual)                                                           UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, NULL)
+#define TEST_ASSERT_FLOAT_IS_DETERMINATE(actual)                                                   UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, NULL)
+#define TEST_ASSERT_FLOAT_IS_NOT_INF(actual)                                                       UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, NULL)
+#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual)                                                   UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, NULL)
+#define TEST_ASSERT_FLOAT_IS_NOT_NAN(actual)                                                       UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, NULL)
+#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual)                                               UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, NULL)
+
+/* Double (If Enabled) */
+#define TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual)                                         UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_DOUBLE(expected, actual)                                                 UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, NULL)
+#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements)                             UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
+#define TEST_ASSERT_DOUBLE_IS_INF(actual)                                                          UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, NULL)
+#define TEST_ASSERT_DOUBLE_IS_NEG_INF(actual)                                                      UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, NULL)
+#define TEST_ASSERT_DOUBLE_IS_NAN(actual)                                                          UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, NULL)
+#define TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual)                                                  UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, NULL)
+#define TEST_ASSERT_DOUBLE_IS_NOT_INF(actual)                                                      UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, NULL)
+#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual)                                                  UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, NULL)
+#define TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual)                                                      UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, NULL)
+#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual)                                              UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, NULL)
+
+/*-------------------------------------------------------
+ * Test Asserts (with additional messages)
+ *-------------------------------------------------------*/
+
+/* Boolean */
+#define TEST_ASSERT_MESSAGE(condition, message)                                                    UNITY_TEST_ASSERT(       (condition), __LINE__, (message))
+#define TEST_ASSERT_TRUE_MESSAGE(condition, message)                                               UNITY_TEST_ASSERT(       (condition), __LINE__, (message))
+#define TEST_ASSERT_UNLESS_MESSAGE(condition, message)                                             UNITY_TEST_ASSERT(      !(condition), __LINE__, (message))
+#define TEST_ASSERT_FALSE_MESSAGE(condition, message)                                              UNITY_TEST_ASSERT(      !(condition), __LINE__, (message))
+#define TEST_ASSERT_NULL_MESSAGE(pointer, message)                                                 UNITY_TEST_ASSERT_NULL(    (pointer), __LINE__, (message))
+#define TEST_ASSERT_NOT_NULL_MESSAGE(pointer, message)                                             UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, (message))
+
+/* Integers (of all sizes) */
+#define TEST_ASSERT_EQUAL_INT_MESSAGE(expected, actual, message)                                   UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_INT8_MESSAGE(expected, actual, message)                                  UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_INT16_MESSAGE(expected, actual, message)                                 UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_INT32_MESSAGE(expected, actual, message)                                 UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_INT64_MESSAGE(expected, actual, message)                                 UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message)                                       UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message)                                   UNITY_TEST_ASSERT(((expected) !=  (actual)), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_UINT_MESSAGE(expected, actual, message)                                  UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_UINT8_MESSAGE(expected, actual, message)                                 UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_UINT16_MESSAGE(expected, actual, message)                                UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_UINT32_MESSAGE(expected, actual, message)                                UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_UINT64_MESSAGE(expected, actual, message)                                UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_HEX_MESSAGE(expected, actual, message)                                   UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_HEX8_MESSAGE(expected, actual, message)                                  UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_HEX16_MESSAGE(expected, actual, message)                                 UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_HEX32_MESSAGE(expected, actual, message)                                 UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_HEX64_MESSAGE(expected, actual, message)                                 UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_BITS_MESSAGE(mask, expected, actual, message)                                  UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_BITS_HIGH_MESSAGE(mask, actual, message)                                       UNITY_TEST_ASSERT_BITS((mask), (_UU32)(-1), (actual), __LINE__, (message))
+#define TEST_ASSERT_BITS_LOW_MESSAGE(mask, actual, message)                                        UNITY_TEST_ASSERT_BITS((mask), (_UU32)(0), (actual), __LINE__, (message))
+#define TEST_ASSERT_BIT_HIGH_MESSAGE(bit, actual, message)                                         UNITY_TEST_ASSERT_BITS(((_UU32)1 << (bit)), (_UU32)(-1), (actual), __LINE__, (message))
+#define TEST_ASSERT_BIT_LOW_MESSAGE(bit, actual, message)                                          UNITY_TEST_ASSERT_BITS(((_UU32)1 << (bit)), (_UU32)(0), (actual), __LINE__, (message))
+
+/* Integer Ranges (of all sizes) */
+#define TEST_ASSERT_INT_WITHIN_MESSAGE(delta, expected, actual, message)                           UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_INT8_WITHIN_MESSAGE(delta, expected, actual, message)                          UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_INT16_WITHIN_MESSAGE(delta, expected, actual, message)                         UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_INT32_WITHIN_MESSAGE(delta, expected, actual, message)                         UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_INT64_WITHIN_MESSAGE(delta, expected, actual, message)                         UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_UINT_WITHIN_MESSAGE(delta, expected, actual, message)                          UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_UINT8_WITHIN_MESSAGE(delta, expected, actual, message)                         UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_UINT16_WITHIN_MESSAGE(delta, expected, actual, message)                        UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_UINT32_WITHIN_MESSAGE(delta, expected, actual, message)                        UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_UINT64_WITHIN_MESSAGE(delta, expected, actual, message)                        UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_HEX_WITHIN_MESSAGE(delta, expected, actual, message)                           UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_HEX8_WITHIN_MESSAGE(delta, expected, actual, message)                          UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_HEX16_WITHIN_MESSAGE(delta, expected, actual, message)                         UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_HEX32_WITHIN_MESSAGE(delta, expected, actual, message)                         UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_HEX64_WITHIN_MESSAGE(delta, expected, actual, message)                         UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, (message))
+
+/* Structs and Strings */
+#define TEST_ASSERT_EQUAL_PTR_MESSAGE(expected, actual, message)                                   UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message)                                UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE(expected, actual, len, message)                       UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_MEMORY_MESSAGE(expected, actual, len, message)                           UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, (message))
+
+/* Arrays */
+#define TEST_ASSERT_EQUAL_INT_ARRAY_MESSAGE(expected, actual, num_elements, message)               UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_INT8_ARRAY_MESSAGE(expected, actual, num_elements, message)              UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_INT16_ARRAY_MESSAGE(expected, actual, num_elements, message)             UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_INT32_ARRAY_MESSAGE(expected, actual, num_elements, message)             UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_INT64_ARRAY_MESSAGE(expected, actual, num_elements, message)             UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_UINT_ARRAY_MESSAGE(expected, actual, num_elements, message)              UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(expected, actual, num_elements, message)             UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_UINT16_ARRAY_MESSAGE(expected, actual, num_elements, message)            UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_UINT32_ARRAY_MESSAGE(expected, actual, num_elements, message)            UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_UINT64_ARRAY_MESSAGE(expected, actual, num_elements, message)            UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_HEX_ARRAY_MESSAGE(expected, actual, num_elements, message)               UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_HEX8_ARRAY_MESSAGE(expected, actual, num_elements, message)              UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_HEX16_ARRAY_MESSAGE(expected, actual, num_elements, message)             UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_HEX32_ARRAY_MESSAGE(expected, actual, num_elements, message)             UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_HEX64_ARRAY_MESSAGE(expected, actual, num_elements, message)             UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_PTR_ARRAY_MESSAGE(expected, actual, num_elements, message)               UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_STRING_ARRAY_MESSAGE(expected, actual, num_elements, message)            UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_MEMORY_ARRAY_MESSAGE(expected, actual, len, num_elements, message)       UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, (message))
+
+/* Floating Point (If Enabled) */
+#define TEST_ASSERT_FLOAT_WITHIN_MESSAGE(delta, expected, actual, message)                         UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_FLOAT_MESSAGE(expected, actual, message)                                 UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_FLOAT_ARRAY_MESSAGE(expected, actual, num_elements, message)             UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_FLOAT_IS_INF_MESSAGE(actual, message)                                          UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, (message))
+#define TEST_ASSERT_FLOAT_IS_NEG_INF_MESSAGE(actual, message)                                      UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, (message))
+#define TEST_ASSERT_FLOAT_IS_NAN_MESSAGE(actual, message)                                          UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, (message))
+#define TEST_ASSERT_FLOAT_IS_DETERMINATE_MESSAGE(actual, message)                                  UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, (message))
+#define TEST_ASSERT_FLOAT_IS_NOT_INF_MESSAGE(actual, message)                                      UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, (message))
+#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF_MESSAGE(actual, message)                                  UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, (message))
+#define TEST_ASSERT_FLOAT_IS_NOT_NAN_MESSAGE(actual, message)                                      UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, (message))
+#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE_MESSAGE(actual, message)                              UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, (message))
+
+/* Double (If Enabled) */
+#define TEST_ASSERT_DOUBLE_WITHIN_MESSAGE(delta, expected, actual, message)                        UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_DOUBLE_MESSAGE(expected, actual, message)                                UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, (message))
+#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY_MESSAGE(expected, actual, num_elements, message)            UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
+#define TEST_ASSERT_DOUBLE_IS_INF_MESSAGE(actual, message)                                         UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, (message))
+#define TEST_ASSERT_DOUBLE_IS_NEG_INF_MESSAGE(actual, message)                                     UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, (message))
+#define TEST_ASSERT_DOUBLE_IS_NAN_MESSAGE(actual, message)                                         UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, (message))
+#define TEST_ASSERT_DOUBLE_IS_DETERMINATE_MESSAGE(actual, message)                                 UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, (message))
+#define TEST_ASSERT_DOUBLE_IS_NOT_INF_MESSAGE(actual, message)                                     UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, (message))
+#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF_MESSAGE(actual, message)                                 UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, (message))
+#define TEST_ASSERT_DOUBLE_IS_NOT_NAN_MESSAGE(actual, message)                                     UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, (message))
+#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE_MESSAGE(actual, message)                             UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, (message))
+
+/* end of UNITY_FRAMEWORK_H */
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/src/unity_internals.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,795 @@
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#ifndef UNITY_INTERNALS_H
+#define UNITY_INTERNALS_H
+
+#ifdef UNITY_INCLUDE_CONFIG_H
+//#include "unity_config.h"
+#endif
+
+#include <setjmp.h>
+
+/* Unity Attempts to Auto-Detect Integer Types
+ * Attempt 1: UINT_MAX, ULONG_MAX, etc in <stdint.h>
+ * Attempt 2: UINT_MAX, ULONG_MAX, etc in <limits.h>
+ * Attempt 3: Deduced from sizeof() macros */
+#ifndef UNITY_EXCLUDE_STDINT_H
+#include <stdint.h>
+#endif
+
+#ifndef UNITY_EXCLUDE_LIMITS_H
+#include <limits.h>
+#endif
+
+#ifndef UNITY_EXCLUDE_SIZEOF
+#ifndef UINT_MAX
+#define UINT_MAX     (sizeof(unsigned int) * 256 - 1)
+#endif
+#ifndef ULONG_MAX
+#define ULONG_MAX    (sizeof(unsigned long) * 256 - 1)
+#endif
+#ifndef UINTPTR_MAX
+/* apparently this is not a constant expression: (sizeof(unsigned int *) * 256 - 1) so we have to just let this fall through */
+#endif
+#endif
+
+#ifndef UNITY_EXCLUDE_MATH_H
+#include <math.h>
+#endif
+
+/*-------------------------------------------------------
+ * Guess Widths If Not Specified
+ *-------------------------------------------------------*/
+
+/* Determine the size of an int, if not already specificied.
+ * We cannot use sizeof(int), because it is not yet defined
+ * at this stage in the trnslation of the C program.
+ * Therefore, infer it from UINT_MAX if possible. */
+#ifndef UNITY_INT_WIDTH
+  #ifdef UINT_MAX
+    #if (UINT_MAX == 0xFFFF)
+      #define UNITY_INT_WIDTH (16)
+    #elif (UINT_MAX == 0xFFFFFFFF)
+      #define UNITY_INT_WIDTH (32)
+    #elif (UINT_MAX == 0xFFFFFFFFFFFFFFFF)
+      #define UNITY_INT_WIDTH (64)
+    #endif
+  #endif
+#endif
+#ifndef UNITY_INT_WIDTH
+  #define UNITY_INT_WIDTH (32)
+#endif
+
+/* Determine the size of a long, if not already specified,
+ * by following the process used above to define
+ * UNITY_INT_WIDTH. */
+#ifndef UNITY_LONG_WIDTH
+  #ifdef ULONG_MAX
+    #if (ULONG_MAX == 0xFFFF)
+      #define UNITY_LONG_WIDTH (16)
+    #elif (ULONG_MAX == 0xFFFFFFFF)
+      #define UNITY_LONG_WIDTH (32)
+    #elif (ULONG_MAX == 0xFFFFFFFFFFFFFFFF)
+      #define UNITY_LONG_WIDTH (64)
+    #endif
+  #endif
+#endif
+#ifndef UNITY_LONG_WIDTH
+  #define UNITY_LONG_WIDTH (32)
+#endif
+
+/* Determine the size of a pointer, if not already specified,
+ * by following the process used above to define
+ * UNITY_INT_WIDTH. */
+#ifndef UNITY_POINTER_WIDTH
+  #ifdef UINTPTR_MAX
+    #if (UINTPTR_MAX+0 <= 0xFFFF)
+      #define UNITY_POINTER_WIDTH (16)
+    #elif (UINTPTR_MAX+0 <= 0xFFFFFFFF)
+      #define UNITY_POINTER_WIDTH (32)
+    #elif (UINTPTR_MAX+0 <= 0xFFFFFFFFFFFFFFFF)
+      #define UNITY_POINTER_WIDTH (64)
+    #endif
+  #endif
+#endif
+#ifndef UNITY_POINTER_WIDTH
+  #ifdef INTPTR_MAX
+    #if (INTPTR_MAX+0 <= 0x7FFF)
+      #define UNITY_POINTER_WIDTH (16)
+    #elif (INTPTR_MAX+0 <= 0x7FFFFFFF)
+      #define UNITY_POINTER_WIDTH (32)
+    #elif (INTPTR_MAX+0 <= 0x7FFFFFFFFFFFFFFF)
+      #define UNITY_POINTER_WIDTH (64)
+    #endif
+  #endif
+#endif
+#ifndef UNITY_POINTER_WIDTH
+  #define UNITY_POINTER_WIDTH UNITY_LONG_WIDTH
+#endif
+
+/*-------------------------------------------------------
+ * Int Support (Define types based on detected sizes)
+ *-------------------------------------------------------*/
+
+#if (UNITY_INT_WIDTH == 32)
+    typedef unsigned char   _UU8;
+    typedef unsigned short  _UU16;
+    typedef unsigned int    _UU32;
+    typedef signed char     _US8;
+    typedef signed short    _US16;
+    typedef signed int      _US32;
+#elif (UNITY_INT_WIDTH == 16)
+    typedef unsigned char   _UU8;
+    typedef unsigned int    _UU16;
+    typedef unsigned long   _UU32;
+    typedef signed char     _US8;
+    typedef signed int      _US16;
+    typedef signed long     _US32;
+#else
+    #error Invalid UNITY_INT_WIDTH specified! (16 or 32 are supported)
+#endif
+
+/*-------------------------------------------------------
+ * 64-bit Support
+ *-------------------------------------------------------*/
+
+#ifndef UNITY_SUPPORT_64
+#if UNITY_LONG_WIDTH > 32
+#define UNITY_SUPPORT_64
+#endif
+#endif
+#ifndef UNITY_SUPPORT_64
+#if UNITY_POINTER_WIDTH > 32
+#define UNITY_SUPPORT_64
+#endif
+#endif
+
+#ifndef UNITY_SUPPORT_64
+
+/* No 64-bit Support */
+typedef _UU32 _U_UINT;
+typedef _US32 _U_SINT;
+
+#else
+
+/* 64-bit Support */
+#if (UNITY_LONG_WIDTH == 32)
+    typedef unsigned long long _UU64;
+    typedef signed long long   _US64;
+#elif (UNITY_LONG_WIDTH == 64)
+    typedef unsigned long      _UU64;
+    typedef signed long        _US64;
+#else
+    #error Invalid UNITY_LONG_WIDTH specified! (32 or 64 are supported)
+#endif
+typedef _UU64 _U_UINT;
+typedef _US64 _U_SINT;
+
+#endif
+
+/*-------------------------------------------------------
+ * Pointer Support
+ *-------------------------------------------------------*/
+
+#if (UNITY_POINTER_WIDTH == 32)
+    typedef _UU32 _UP;
+#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX32
+#elif (UNITY_POINTER_WIDTH == 64)
+    typedef _UU64 _UP;
+#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX64
+#elif (UNITY_POINTER_WIDTH == 16)
+    typedef _UU16 _UP;
+#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX16
+#else
+    #error Invalid UNITY_POINTER_WIDTH specified! (16, 32 or 64 are supported)
+#endif
+
+#ifndef UNITY_PTR_ATTRIBUTE
+#define UNITY_PTR_ATTRIBUTE
+#endif
+
+#ifndef UNITY_INTERNAL_PTR
+#define UNITY_INTERNAL_PTR UNITY_PTR_ATTRIBUTE const void*
+/* #define UNITY_INTERNAL_PTR UNITY_PTR_ATTRIBUTE const _UU8* */
+#endif
+
+/*-------------------------------------------------------
+ * Float Support
+ *-------------------------------------------------------*/
+
+#ifdef UNITY_EXCLUDE_FLOAT
+
+/* No Floating Point Support */
+#undef UNITY_INCLUDE_FLOAT
+#undef UNITY_FLOAT_PRECISION
+#undef UNITY_FLOAT_TYPE
+#undef UNITY_FLOAT_VERBOSE
+
+#else
+
+#ifndef UNITY_INCLUDE_FLOAT
+#define UNITY_INCLUDE_FLOAT
+#endif
+
+/* Floating Point Support */
+#ifndef UNITY_FLOAT_PRECISION
+#define UNITY_FLOAT_PRECISION (0.00001f)
+#endif
+#ifndef UNITY_FLOAT_TYPE
+#define UNITY_FLOAT_TYPE float
+#endif
+typedef UNITY_FLOAT_TYPE _UF;
+
+#ifndef isinf
+#define isinf(n) (((1.0f / f_zero) == n) ? 1 : 0) || (((-1.0f / f_zero) == n) ? 1 : 0)
+#define UNITY_FLOAT_NEEDS_ZERO
+#endif
+
+#ifndef isnan
+#define isnan(n) ((n != n) ? 1 : 0)
+#endif
+
+#ifndef isneg
+#define isneg(n) ((n < 0.0f) ? 1 : 0)
+#endif
+
+#ifndef ispos
+#define ispos(n) ((n > 0.0f) ? 1 : 0)
+#endif
+
+#endif
+
+/*-------------------------------------------------------
+ * Double Float Support
+ *-------------------------------------------------------*/
+
+/* unlike FLOAT, we DON'T include by default */
+#ifndef UNITY_EXCLUDE_DOUBLE
+#ifndef UNITY_INCLUDE_DOUBLE
+#define UNITY_EXCLUDE_DOUBLE
+#endif
+#endif
+
+#ifdef UNITY_EXCLUDE_DOUBLE
+
+/* No Floating Point Support */
+#undef UNITY_DOUBLE_PRECISION
+#undef UNITY_DOUBLE_TYPE
+#undef UNITY_DOUBLE_VERBOSE
+
+#ifdef UNITY_INCLUDE_DOUBLE
+#undef UNITY_INCLUDE_DOUBLE
+#endif
+
+#else
+
+/* Double Floating Point Support */
+#ifndef UNITY_DOUBLE_PRECISION
+#define UNITY_DOUBLE_PRECISION (1e-12f)
+#endif
+#ifndef UNITY_DOUBLE_TYPE
+#define UNITY_DOUBLE_TYPE double
+#endif
+typedef UNITY_DOUBLE_TYPE _UD;
+
+#endif
+
+#ifdef UNITY_DOUBLE_VERBOSE
+#ifndef UNITY_FLOAT_VERBOSE
+#define UNITY_FLOAT_VERBOSE
+#endif
+#endif
+
+/*-------------------------------------------------------
+ * Output Method: stdout (DEFAULT)
+ *-------------------------------------------------------*/
+#ifndef UNITY_OUTPUT_CHAR
+/* Default to using putchar, which is defined in stdio.h */
+#include <stdio.h>
+#define UNITY_OUTPUT_CHAR(a) (void)putchar(a)
+#else
+  /* If defined as something else, make sure we declare it here so it's ready for use */
+  #ifndef UNITY_OMIT_OUTPUT_CHAR_HEADER_DECLARATION
+extern void UNITY_OUTPUT_CHAR(int);
+  #endif
+#endif
+
+#ifndef UNITY_OUTPUT_FLUSH
+/* Default to using fflush, which is defined in stdio.h */
+#include <stdio.h>
+#define UNITY_OUTPUT_FLUSH (void)fflush(stdout)
+#else
+  /* If defined as something else, make sure we declare it here so it's ready for use */
+  #ifndef UNITY_OMIT_OUTPUT_FLUSH_HEADER_DECLARATION
+extern void UNITY_OUTPUT_FLUSH(void);
+  #endif
+#endif
+
+#ifndef UNITY_OUTPUT_FLUSH
+#define UNITY_FLUSH_CALL()
+#else
+#define UNITY_FLUSH_CALL() UNITY_OUTPUT_FLUSH
+#endif
+
+#ifndef UNITY_PRINT_EOL
+#define UNITY_PRINT_EOL()    UNITY_OUTPUT_CHAR('\n')
+#endif
+
+#ifndef UNITY_OUTPUT_START
+#define UNITY_OUTPUT_START()
+#endif
+
+#ifndef UNITY_OUTPUT_COMPLETE
+#define UNITY_OUTPUT_COMPLETE()
+#endif
+
+/*-------------------------------------------------------
+ * Footprint
+ *-------------------------------------------------------*/
+
+#ifndef UNITY_LINE_TYPE
+#define UNITY_LINE_TYPE _U_UINT
+#endif
+
+#ifndef UNITY_COUNTER_TYPE
+#define UNITY_COUNTER_TYPE _U_UINT
+#endif
+
+/*-------------------------------------------------------
+ * Language Features Available
+ *-------------------------------------------------------*/
+#if !defined(UNITY_WEAK_ATTRIBUTE) && !defined(UNITY_WEAK_PRAGMA)
+#   ifdef __GNUC__ /* includes clang */
+#       if !(defined(__WIN32__) && defined(__clang__))
+#           define UNITY_WEAK_ATTRIBUTE __attribute__((weak))
+#       endif
+#   endif
+#endif
+
+#ifdef UNITY_NO_WEAK
+#   undef UNITY_WEAK_ATTRIBUTE
+#   undef UNITY_WEAK_PRAGMA
+#endif
+
+
+/*-------------------------------------------------------
+ * Internal Structs Needed
+ *-------------------------------------------------------*/
+
+typedef void (*UnityTestFunction)(void);
+
+#define UNITY_DISPLAY_RANGE_INT  (0x10)
+#define UNITY_DISPLAY_RANGE_UINT (0x20)
+#define UNITY_DISPLAY_RANGE_HEX  (0x40)
+#define UNITY_DISPLAY_RANGE_AUTO (0x80)
+
+typedef enum
+{
+#if (UNITY_INT_WIDTH == 16)
+    UNITY_DISPLAY_STYLE_INT      = 2 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
+#elif (UNITY_INT_WIDTH  == 32)
+    UNITY_DISPLAY_STYLE_INT      = 4 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
+#elif (UNITY_INT_WIDTH  == 64)
+    UNITY_DISPLAY_STYLE_INT      = 8 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
+#endif
+    UNITY_DISPLAY_STYLE_INT8     = 1 + UNITY_DISPLAY_RANGE_INT,
+    UNITY_DISPLAY_STYLE_INT16    = 2 + UNITY_DISPLAY_RANGE_INT,
+    UNITY_DISPLAY_STYLE_INT32    = 4 + UNITY_DISPLAY_RANGE_INT,
+#ifdef UNITY_SUPPORT_64
+    UNITY_DISPLAY_STYLE_INT64    = 8 + UNITY_DISPLAY_RANGE_INT,
+#endif
+
+#if (UNITY_INT_WIDTH == 16)
+    UNITY_DISPLAY_STYLE_UINT     = 2 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
+#elif (UNITY_INT_WIDTH  == 32)
+    UNITY_DISPLAY_STYLE_UINT     = 4 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
+#elif (UNITY_INT_WIDTH  == 64)
+    UNITY_DISPLAY_STYLE_UINT     = 8 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
+#endif
+    UNITY_DISPLAY_STYLE_UINT8    = 1 + UNITY_DISPLAY_RANGE_UINT,
+    UNITY_DISPLAY_STYLE_UINT16   = 2 + UNITY_DISPLAY_RANGE_UINT,
+    UNITY_DISPLAY_STYLE_UINT32   = 4 + UNITY_DISPLAY_RANGE_UINT,
+#ifdef UNITY_SUPPORT_64
+    UNITY_DISPLAY_STYLE_UINT64   = 8 + UNITY_DISPLAY_RANGE_UINT,
+#endif
+    UNITY_DISPLAY_STYLE_HEX8     = 1 + UNITY_DISPLAY_RANGE_HEX,
+    UNITY_DISPLAY_STYLE_HEX16    = 2 + UNITY_DISPLAY_RANGE_HEX,
+    UNITY_DISPLAY_STYLE_HEX32    = 4 + UNITY_DISPLAY_RANGE_HEX,
+#ifdef UNITY_SUPPORT_64
+    UNITY_DISPLAY_STYLE_HEX64    = 8 + UNITY_DISPLAY_RANGE_HEX,
+#endif
+    UNITY_DISPLAY_STYLE_UNKNOWN
+} UNITY_DISPLAY_STYLE_T;
+
+#ifndef UNITY_EXCLUDE_FLOAT
+typedef enum _UNITY_FLOAT_TRAIT_T
+{
+    UNITY_FLOAT_IS_NOT_INF       = 0,
+    UNITY_FLOAT_IS_INF,
+    UNITY_FLOAT_IS_NOT_NEG_INF,
+    UNITY_FLOAT_IS_NEG_INF,
+    UNITY_FLOAT_IS_NOT_NAN,
+    UNITY_FLOAT_IS_NAN,
+    UNITY_FLOAT_IS_NOT_DET,
+    UNITY_FLOAT_IS_DET,
+    UNITY_FLOAT_INVALID_TRAIT
+} UNITY_FLOAT_TRAIT_T;
+#endif
+
+struct _Unity
+{
+    const char* TestFile;
+    const char* CurrentTestName;
+#ifndef UNITY_EXCLUDE_DETAILS
+    const char* CurrentDetail1;
+    const char* CurrentDetail2;
+#endif
+    UNITY_LINE_TYPE CurrentTestLineNumber;
+    UNITY_COUNTER_TYPE NumberOfTests;
+    UNITY_COUNTER_TYPE TestFailures;
+    UNITY_COUNTER_TYPE TestIgnores;
+    UNITY_COUNTER_TYPE CurrentTestFailed;
+    UNITY_COUNTER_TYPE CurrentTestIgnored;
+    jmp_buf AbortFrame;
+};
+
+extern struct _Unity Unity;
+
+/*-------------------------------------------------------
+ * Test Suite Management
+ *-------------------------------------------------------*/
+
+void UnityBegin(const char* filename);
+int  UnityEnd(void);
+void UnityConcludeTest(void);
+void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum);
+
+/*-------------------------------------------------------
+ * Details Support
+ *-------------------------------------------------------*/
+
+#ifdef UNITY_EXCLUDE_DETAILS
+#define UNITY_CLR_DETAILS()
+#define UNITY_SET_DETAIL(d1)
+#define UNITY_SET_DETAILS(d1,d2)
+#else
+#define UNITY_CLR_DETAILS()      { Unity.CurrentDetail1 = 0;   Unity.CurrentDetail2 = 0;  }
+#define UNITY_SET_DETAIL(d1)     { Unity.CurrentDetail1 = d1;  Unity.CurrentDetail2 = 0;  }
+#define UNITY_SET_DETAILS(d1,d2) { Unity.CurrentDetail1 = d1;  Unity.CurrentDetail2 = d2; }
+
+#ifndef UNITY_DETAIL1_NAME
+#define UNITY_DETAIL1_NAME "Function"
+#endif
+
+#ifndef UNITY_DETAIL2_NAME
+#define UNITY_DETAIL2_NAME "Argument"
+#endif
+#endif
+
+/*-------------------------------------------------------
+ * Test Output
+ *-------------------------------------------------------*/
+
+void UnityPrint(const char* string);
+void UnityPrintMask(const _U_UINT mask, const _U_UINT number);
+void UnityPrintNumberByStyle(const _U_SINT number, const UNITY_DISPLAY_STYLE_T style);
+void UnityPrintNumber(const _U_SINT number);
+void UnityPrintNumberUnsigned(const _U_UINT number);
+void UnityPrintNumberHex(const _U_UINT number, const char nibbles);
+
+#ifdef UNITY_FLOAT_VERBOSE
+void UnityPrintFloat(const _UF number);
+#endif
+
+/*-------------------------------------------------------
+ * Test Assertion Fuctions
+ *-------------------------------------------------------
+ *  Use the macros below this section instead of calling
+ *  these directly. The macros have a consistent naming
+ *  convention and will pull in file and line information
+ *  for you. */
+
+void UnityAssertEqualNumber(const _U_SINT expected,
+                            const _U_SINT actual,
+                            const char* msg,
+                            const UNITY_LINE_TYPE lineNumber,
+                            const UNITY_DISPLAY_STYLE_T style);
+
+void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected,
+                              UNITY_INTERNAL_PTR actual,
+                              const _UU32 num_elements,
+                              const char* msg,
+                              const UNITY_LINE_TYPE lineNumber,
+                              const UNITY_DISPLAY_STYLE_T style);
+
+void UnityAssertBits(const _U_SINT mask,
+                     const _U_SINT expected,
+                     const _U_SINT actual,
+                     const char* msg,
+                     const UNITY_LINE_TYPE lineNumber);
+
+void UnityAssertEqualString(const char* expected,
+                            const char* actual,
+                            const char* msg,
+                            const UNITY_LINE_TYPE lineNumber);
+
+void UnityAssertEqualStringLen(const char* expected,
+                            const char* actual,
+                            const _UU32 length,
+                            const char* msg,
+                            const UNITY_LINE_TYPE lineNumber);
+
+void UnityAssertEqualStringArray( const char** expected,
+                                  const char** actual,
+                                  const _UU32 num_elements,
+                                  const char* msg,
+                                  const UNITY_LINE_TYPE lineNumber);
+
+void UnityAssertEqualMemory( UNITY_INTERNAL_PTR expected,
+                             UNITY_INTERNAL_PTR actual,
+                             const _UU32 length,
+                             const _UU32 num_elements,
+                             const char* msg,
+                             const UNITY_LINE_TYPE lineNumber);
+
+void UnityAssertNumbersWithin(const _U_UINT delta,
+                              const _U_SINT expected,
+                              const _U_SINT actual,
+                              const char* msg,
+                              const UNITY_LINE_TYPE lineNumber,
+                              const UNITY_DISPLAY_STYLE_T style);
+
+void UnityFail(const char* message, const UNITY_LINE_TYPE line);
+
+void UnityIgnore(const char* message, const UNITY_LINE_TYPE line);
+
+#ifndef UNITY_EXCLUDE_FLOAT
+void UnityAssertFloatsWithin(const _UF delta,
+                             const _UF expected,
+                             const _UF actual,
+                             const char* msg,
+                             const UNITY_LINE_TYPE lineNumber);
+
+void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const _UF* expected,
+                                UNITY_PTR_ATTRIBUTE const _UF* actual,
+                                const _UU32 num_elements,
+                                const char* msg,
+                                const UNITY_LINE_TYPE lineNumber);
+
+void UnityAssertFloatSpecial(const _UF actual,
+                             const char* msg,
+                             const UNITY_LINE_TYPE lineNumber,
+                             const UNITY_FLOAT_TRAIT_T style);
+#endif
+
+#ifndef UNITY_EXCLUDE_DOUBLE
+void UnityAssertDoublesWithin(const _UD delta,
+                              const _UD expected,
+                              const _UD actual,
+                              const char* msg,
+                              const UNITY_LINE_TYPE lineNumber);
+
+void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const _UD* expected,
+                                 UNITY_PTR_ATTRIBUTE const _UD* actual,
+                                 const _UU32 num_elements,
+                                 const char* msg,
+                                 const UNITY_LINE_TYPE lineNumber);
+
+void UnityAssertDoubleSpecial(const _UD actual,
+                              const char* msg,
+                              const UNITY_LINE_TYPE lineNumber,
+                              const UNITY_FLOAT_TRAIT_T style);
+#endif
+
+/*-------------------------------------------------------
+ * Error Strings We Might Need
+ *-------------------------------------------------------*/
+
+extern const char UnityStrErrFloat[];
+extern const char UnityStrErrDouble[];
+extern const char UnityStrErr64[];
+
+/*-------------------------------------------------------
+ * Test Running Macros
+ *-------------------------------------------------------*/
+
+#define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0)
+
+#define TEST_ABORT() {longjmp(Unity.AbortFrame, 1);}
+
+/* This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__) */
+#ifndef RUN_TEST
+#ifdef __STDC_VERSION__
+#if __STDC_VERSION__ >= 199901L
+#define RUN_TEST(...) UnityDefaultTestRun(RUN_TEST_FIRST(__VA_ARGS__), RUN_TEST_SECOND(__VA_ARGS__))
+#define RUN_TEST_FIRST(...) RUN_TEST_FIRST_HELPER(__VA_ARGS__, throwaway)
+#define RUN_TEST_FIRST_HELPER(first, ...) (first), #first
+#define RUN_TEST_SECOND(...) RUN_TEST_SECOND_HELPER(__VA_ARGS__, __LINE__, throwaway)
+#define RUN_TEST_SECOND_HELPER(first, second, ...) (second)
+#endif
+#endif
+#endif
+
+/* If we can't do the tricky version, we'll just have to require them to always include the line number */
+#ifndef RUN_TEST
+#ifdef CMOCK
+#define RUN_TEST(func, num) UnityDefaultTestRun(func, #func, num)
+#else
+#define RUN_TEST(func) UnityDefaultTestRun(func, #func, __LINE__)
+#endif
+#endif
+
+#define TEST_LINE_NUM (Unity.CurrentTestLineNumber)
+#define TEST_IS_IGNORED (Unity.CurrentTestIgnored)
+#define UNITY_NEW_TEST(a) \
+    Unity.CurrentTestName = (a); \
+    Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)(__LINE__); \
+    Unity.NumberOfTests++;
+
+#ifndef UNITY_BEGIN
+#define UNITY_BEGIN() UnityBegin(__FILE__)
+#endif
+
+#ifndef UNITY_END
+#define UNITY_END() UnityEnd()
+#endif
+
+#define UNITY_UNUSED(x) (void)(sizeof(x))
+
+/*-------------------------------------------------------
+ * Basic Fail and Ignore
+ *-------------------------------------------------------*/
+
+#define UNITY_TEST_FAIL(line, message)   UnityFail(   (message), (UNITY_LINE_TYPE)(line))
+#define UNITY_TEST_IGNORE(line, message) UnityIgnore( (message), (UNITY_LINE_TYPE)(line))
+
+/*-------------------------------------------------------
+ * Test Asserts
+ *-------------------------------------------------------*/
+
+#define UNITY_TEST_ASSERT(condition, line, message)                                              if (condition) {} else {UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), (message));}
+#define UNITY_TEST_ASSERT_NULL(pointer, line, message)                                           UNITY_TEST_ASSERT(((pointer) == NULL),  (UNITY_LINE_TYPE)(line), (message))
+#define UNITY_TEST_ASSERT_NOT_NULL(pointer, line, message)                                       UNITY_TEST_ASSERT(((pointer) != NULL),  (UNITY_LINE_TYPE)(line), (message))
+
+#define UNITY_TEST_ASSERT_EQUAL_INT(expected, actual, line, message)                             UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT)
+#define UNITY_TEST_ASSERT_EQUAL_INT8(expected, actual, line, message)                            UnityAssertEqualNumber((_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8)
+#define UNITY_TEST_ASSERT_EQUAL_INT16(expected, actual, line, message)                           UnityAssertEqualNumber((_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16)
+#define UNITY_TEST_ASSERT_EQUAL_INT32(expected, actual, line, message)                           UnityAssertEqualNumber((_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32)
+#define UNITY_TEST_ASSERT_EQUAL_UINT(expected, actual, line, message)                            UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT)
+#define UNITY_TEST_ASSERT_EQUAL_UINT8(expected, actual, line, message)                           UnityAssertEqualNumber((_U_SINT)(_UU8 )(expected), (_U_SINT)(_UU8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8)
+#define UNITY_TEST_ASSERT_EQUAL_UINT16(expected, actual, line, message)                          UnityAssertEqualNumber((_U_SINT)(_UU16)(expected), (_U_SINT)(_UU16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16)
+#define UNITY_TEST_ASSERT_EQUAL_UINT32(expected, actual, line, message)                          UnityAssertEqualNumber((_U_SINT)(_UU32)(expected), (_U_SINT)(_UU32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32)
+#define UNITY_TEST_ASSERT_EQUAL_HEX8(expected, actual, line, message)                            UnityAssertEqualNumber((_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8)
+#define UNITY_TEST_ASSERT_EQUAL_HEX16(expected, actual, line, message)                           UnityAssertEqualNumber((_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16)
+#define UNITY_TEST_ASSERT_EQUAL_HEX32(expected, actual, line, message)                           UnityAssertEqualNumber((_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32)
+#define UNITY_TEST_ASSERT_BITS(mask, expected, actual, line, message)                            UnityAssertBits((_U_SINT)(mask), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line))
+
+#define UNITY_TEST_ASSERT_INT_WITHIN(delta, expected, actual, line, message)                     UnityAssertNumbersWithin((delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT)
+#define UNITY_TEST_ASSERT_INT8_WITHIN(delta, expected, actual, line, message)                    UnityAssertNumbersWithin((_UU8 )(delta), (_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8)
+#define UNITY_TEST_ASSERT_INT16_WITHIN(delta, expected, actual, line, message)                   UnityAssertNumbersWithin((_UU16)(delta), (_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16)
+#define UNITY_TEST_ASSERT_INT32_WITHIN(delta, expected, actual, line, message)                   UnityAssertNumbersWithin((_UU32)(delta), (_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32)
+#define UNITY_TEST_ASSERT_UINT_WITHIN(delta, expected, actual, line, message)                    UnityAssertNumbersWithin((delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT)
+#define UNITY_TEST_ASSERT_UINT8_WITHIN(delta, expected, actual, line, message)                   UnityAssertNumbersWithin((_UU8 )(delta), (_U_SINT)(_U_UINT)(_UU8 )(expected), (_U_SINT)(_U_UINT)(_UU8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8)
+#define UNITY_TEST_ASSERT_UINT16_WITHIN(delta, expected, actual, line, message)                  UnityAssertNumbersWithin((_UU16)(delta), (_U_SINT)(_U_UINT)(_UU16)(expected), (_U_SINT)(_U_UINT)(_UU16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16)
+#define UNITY_TEST_ASSERT_UINT32_WITHIN(delta, expected, actual, line, message)                  UnityAssertNumbersWithin((_UU32)(delta), (_U_SINT)(_U_UINT)(_UU32)(expected), (_U_SINT)(_U_UINT)(_UU32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32)
+#define UNITY_TEST_ASSERT_HEX8_WITHIN(delta, expected, actual, line, message)                    UnityAssertNumbersWithin((_UU8 )(delta), (_U_SINT)(_U_UINT)(_UU8 )(expected), (_U_SINT)(_U_UINT)(_UU8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8)
+#define UNITY_TEST_ASSERT_HEX16_WITHIN(delta, expected, actual, line, message)                   UnityAssertNumbersWithin((_UU16)(delta), (_U_SINT)(_U_UINT)(_UU16)(expected), (_U_SINT)(_U_UINT)(_UU16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16)
+#define UNITY_TEST_ASSERT_HEX32_WITHIN(delta, expected, actual, line, message)                   UnityAssertNumbersWithin((_UU32)(delta), (_U_SINT)(_U_UINT)(_UU32)(expected), (_U_SINT)(_U_UINT)(_UU32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32)
+
+#define UNITY_TEST_ASSERT_EQUAL_PTR(expected, actual, line, message)                             UnityAssertEqualNumber((_U_SINT)(_UP)(expected), (_U_SINT)(_UP)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_POINTER)
+#define UNITY_TEST_ASSERT_EQUAL_STRING(expected, actual, line, message)                          UnityAssertEqualString((const char*)(expected), (const char*)(actual), (message), (UNITY_LINE_TYPE)(line))
+#define UNITY_TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len, line, message)                 UnityAssertEqualStringLen((const char*)(expected), (const char*)(actual), (_UU32)(len), (message), (UNITY_LINE_TYPE)(line))
+#define UNITY_TEST_ASSERT_EQUAL_MEMORY(expected, actual, len, line, message)                     UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(len), 1, (message), (UNITY_LINE_TYPE)(line))
+
+#define UNITY_TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements, line, message)         UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT)
+#define UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements, line, message)        UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8)
+#define UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements, line, message)       UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16)
+#define UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements, line, message)       UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32)
+#define UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements, line, message)        UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT)
+#define UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements, line, message)       UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8)
+#define UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements, line, message)      UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16)
+#define UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements, line, message)      UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32)
+#define UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements, line, message)        UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8)
+#define UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements, line, message)       UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16)
+#define UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements, line, message)       UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32)
+#define UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements, line, message)         UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(_UP*)(expected), (UNITY_INTERNAL_PTR)(_UP*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_POINTER)
+#define UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements, line, message)      UnityAssertEqualStringArray((const char**)(expected), (const char**)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line))
+#define UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(len), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line))
+
+#ifdef UNITY_SUPPORT_64
+#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message)                           UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64)
+#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message)                          UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64)
+#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message)                           UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64)
+#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message)       UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64)
+#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message)      UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64)
+#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message)       UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64)
+#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message)                   UnityAssertNumbersWithin((delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64)
+#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message)                  UnityAssertNumbersWithin((delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64)
+#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message)                   UnityAssertNumbersWithin((delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64)
+#else
+#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64)
+#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message)                          UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64)
+#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64)
+#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64)
+#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message)      UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64)
+#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64)
+#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64)
+#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message)                  UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64)
+#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64)
+#endif
+
+#ifdef UNITY_EXCLUDE_FLOAT
+#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message)                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat)
+#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat)
+#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message)       UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat)
+#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message)                                    UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message)                                    UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat)
+#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message)                            UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message)                            UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message)                                UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message)                        UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat)
+#else
+#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message)                   UnityAssertFloatsWithin((_UF)(delta), (_UF)(expected), (_UF)(actual), (message), (UNITY_LINE_TYPE)(line))
+#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message)                           UNITY_TEST_ASSERT_FLOAT_WITHIN((_UF)(expected) * (_UF)UNITY_FLOAT_PRECISION, (_UF)(expected), (_UF)(actual), (UNITY_LINE_TYPE)(line), (message))
+#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message)       UnityAssertEqualFloatArray((_UF*)(expected), (_UF*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)(line))
+#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message)                                    UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_INF)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NEG_INF)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message)                                    UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NAN)
+#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message)                            UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_DET)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_INF)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message)                            UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NEG_INF)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message)                                UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NAN)
+#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message)                        UnityAssertFloatSpecial((_UF)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_DET)
+#endif
+
+#ifdef UNITY_EXCLUDE_DOUBLE
+#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message)                  UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
+#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message)                          UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
+#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message)      UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message)                                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message)                                   UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message)                           UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message)                               UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message)                       UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble)
+#else
+#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message)                  UnityAssertDoublesWithin((_UD)(delta), (_UD)(expected), (_UD)(actual), (message), (UNITY_LINE_TYPE)line)
+#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message)                          UNITY_TEST_ASSERT_DOUBLE_WITHIN((_UD)(expected) * (_UD)UNITY_DOUBLE_PRECISION, (_UD)expected, (_UD)actual, (UNITY_LINE_TYPE)(line), message)
+#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message)      UnityAssertEqualDoubleArray((_UD*)(expected), (_UD*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message)                                   UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_INF)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NEG_INF)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message)                                   UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NAN)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message)                           UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_DET)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_INF)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message)                           UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NEG_INF)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message)                               UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NAN)
+#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message)                       UnityAssertDoubleSpecial((_UD)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_DET)
+#endif
+
+/*
+ * SA_PATCH: Output results using easy to parse tags.
+ * These tags are used when sending out verbose Unity output ("-v").
+ * They wrap each of the important data pieces, and allow parsing of the results by an
+ * external tool.
+ * The tags are always printed - this isn't configurable.
+ */
+
+#define UNITY_RESULTS_TAGS_TEST_START   "<***UnityTest***>"
+#define UNITY_RESULTS_TAGS_TEST_END     "</***UnityTest***>"
+
+#define UNITY_RESULTS_TAGS_RESULT_START "<***UnityResult***>"
+#define UNITY_RESULTS_TAGS_RESULT_END   "</***UnityResult***>"
+
+#define UNITY_RESULTS_TAGS_IGNORE_START "<***UnityIgnoredTest***>"
+#define UNITY_RESULTS_TAGS_IGNORE_END   "</***UnityIgnoredTest***>"
+
+/* End of UNITY_INTERNALS_H */
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_cmd.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,61 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  if (TEST_PROTECT()) \
+  { \
+    CEXCEPTION_T e; \
+    Try { \
+      setUp(); \
+      TestFunc(); \
+    } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+  } \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "CException.h"
+#include "funky.h"
+#include "stanky.h"
+#include <setjmp.h>
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+extern void test_TheThirdThingToTest(void);
+extern void test_TheFourthThingToTest(void);
+
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  tearDown();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/testsample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+  RUN_TEST(test_TheThirdThingToTest, 53);
+  RUN_TEST(test_TheFourthThingToTest, 58);
+
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_def.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,57 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+  } \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "funky.h"
+#include "stanky.h"
+#include <setjmp.h>
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+extern void test_TheThirdThingToTest(void);
+extern void test_TheFourthThingToTest(void);
+
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  tearDown();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/testsample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+  RUN_TEST(test_TheThirdThingToTest, 53);
+  RUN_TEST(test_TheFourthThingToTest, 58);
+
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_head1.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,55 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+  } \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "testsample_head1.h"
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+extern void test_TheThirdThingToTest(void);
+extern void test_TheFourthThingToTest(void);
+
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  tearDown();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/testsample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+  RUN_TEST(test_TheThirdThingToTest, 53);
+  RUN_TEST(test_TheFourthThingToTest, 58);
+
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_head1.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,15 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+#ifndef _TESTSAMPLE_HEAD1_H
+#define _TESTSAMPLE_HEAD1_H
+
+#include "unity.h"
+#include "funky.h"
+#include "stanky.h"
+#include <setjmp.h>
+
+void test_TheFirstThingToTest(void);
+void test_TheSecondThingToTest(void);
+void test_TheThirdThingToTest(void);
+void test_TheFourthThingToTest(void);
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_mock_cmd.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,80 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  CMock_Init(); \
+  UNITY_CLR_DETAILS(); \
+  if (TEST_PROTECT()) \
+  { \
+    CEXCEPTION_T e; \
+    Try { \
+      setUp(); \
+      TestFunc(); \
+    } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+    CMock_Verify(); \
+  } \
+  CMock_Destroy(); \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include "cmock.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "CException.h"
+#include "funky.h"
+#include <setjmp.h>
+#include "Mockstanky.h"
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+
+
+/*=======Mock Management=====*/
+static void CMock_Init(void)
+{
+  Mockstanky_Init();
+}
+static void CMock_Verify(void)
+{
+  Mockstanky_Verify();
+}
+static void CMock_Destroy(void)
+{
+  Mockstanky_Destroy();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  CMock_Verify();
+  CMock_Destroy();
+  tearDown();
+  CMock_Init();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/mocksample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+
+  CMock_Guts_MemFreeFinal();
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_mock_def.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,76 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  CMock_Init(); \
+  UNITY_CLR_DETAILS(); \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+    CMock_Verify(); \
+  } \
+  CMock_Destroy(); \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include "cmock.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "funky.h"
+#include <setjmp.h>
+#include "Mockstanky.h"
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+
+
+/*=======Mock Management=====*/
+static void CMock_Init(void)
+{
+  Mockstanky_Init();
+}
+static void CMock_Verify(void)
+{
+  Mockstanky_Verify();
+}
+static void CMock_Destroy(void)
+{
+  Mockstanky_Destroy();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  CMock_Verify();
+  CMock_Destroy();
+  tearDown();
+  CMock_Init();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/mocksample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+
+  CMock_Guts_MemFreeFinal();
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_mock_head1.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,75 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  CMock_Init(); \
+  UNITY_CLR_DETAILS(); \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+    CMock_Verify(); \
+  } \
+  CMock_Destroy(); \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include "cmock.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "testsample_mock_head1.h"
+#include "Mockstanky.h"
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+
+
+/*=======Mock Management=====*/
+static void CMock_Init(void)
+{
+  Mockstanky_Init();
+}
+static void CMock_Verify(void)
+{
+  Mockstanky_Verify();
+}
+static void CMock_Destroy(void)
+{
+  Mockstanky_Destroy();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  CMock_Verify();
+  CMock_Destroy();
+  tearDown();
+  CMock_Init();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/mocksample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+
+  CMock_Guts_MemFreeFinal();
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_mock_head1.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,13 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+#ifndef _TESTSAMPLE_MOCK_HEAD1_H
+#define _TESTSAMPLE_MOCK_HEAD1_H
+
+#include "unity.h"
+#include "cmock.h"
+#include "funky.h"
+#include <setjmp.h>
+
+void test_TheFirstThingToTest(void);
+void test_TheSecondThingToTest(void);
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_mock_new1.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  CMock_Init(); \
+  UNITY_CLR_DETAILS(); \
+  if (TEST_PROTECT()) \
+  { \
+    CEXCEPTION_T e; \
+    Try { \
+      setUp(); \
+      TestFunc(); \
+    } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+    CMock_Verify(); \
+  } \
+  CMock_Destroy(); \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include "cmock.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "CException.h"
+#include "one.h"
+#include "two.h"
+#include "funky.h"
+#include <setjmp.h>
+#include "Mockstanky.h"
+
+int GlobalExpectCount;
+int GlobalVerifyOrder;
+char* GlobalOrderError;
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+
+
+/*=======Mock Management=====*/
+static void CMock_Init(void)
+{
+  GlobalExpectCount = 0;
+  GlobalVerifyOrder = 0;
+  GlobalOrderError = NULL;
+  Mockstanky_Init();
+}
+static void CMock_Verify(void)
+{
+  Mockstanky_Verify();
+}
+static void CMock_Destroy(void)
+{
+  Mockstanky_Destroy();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  CMock_Verify();
+  CMock_Destroy();
+  tearDown();
+  CMock_Init();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/mocksample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+
+  CMock_Guts_MemFreeFinal();
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_mock_new2.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  CMock_Init(); \
+  UNITY_CLR_DETAILS(); \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+    CMock_Verify(); \
+  } \
+  CMock_Destroy(); \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include "cmock.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "funky.h"
+#include <setjmp.h>
+#include "Mockstanky.h"
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+
+
+/*=======Mock Management=====*/
+static void CMock_Init(void)
+{
+  Mockstanky_Init();
+}
+static void CMock_Verify(void)
+{
+  Mockstanky_Verify();
+}
+static void CMock_Destroy(void)
+{
+  Mockstanky_Destroy();
+}
+
+/*=======Suite Setup=====*/
+static int suite_setup(void)
+{
+a_custom_setup();
+}
+
+/*=======Suite Teardown=====*/
+static int suite_teardown(int num_failures)
+{
+a_custom_teardown();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  CMock_Verify();
+  CMock_Destroy();
+  tearDown();
+  CMock_Init();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  suite_setup();
+  UnityBegin("testdata/mocksample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+
+  CMock_Guts_MemFreeFinal();
+  return suite_teardown(UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_mock_param.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,77 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST_NO_ARGS
+#define RUN_TEST(TestFunc, TestLineNum, ...) \
+{ \
+  Unity.CurrentTestName = #TestFunc "(" #__VA_ARGS__ ")"; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  CMock_Init(); \
+  UNITY_CLR_DETAILS(); \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(__VA_ARGS__); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+    CMock_Verify(); \
+  } \
+  CMock_Destroy(); \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include "cmock.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "funky.h"
+#include <setjmp.h>
+#include "Mockstanky.h"
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+
+
+/*=======Mock Management=====*/
+static void CMock_Init(void)
+{
+  Mockstanky_Init();
+}
+static void CMock_Verify(void)
+{
+  Mockstanky_Verify();
+}
+static void CMock_Destroy(void)
+{
+  Mockstanky_Destroy();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  CMock_Verify();
+  CMock_Destroy();
+  tearDown();
+  CMock_Init();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/mocksample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21, RUN_TEST_NO_ARGS);
+  RUN_TEST(test_TheSecondThingToTest, 43, RUN_TEST_NO_ARGS);
+
+  CMock_Guts_MemFreeFinal();
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_mock_run1.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  CMock_Init(); \
+  UNITY_CLR_DETAILS(); \
+  if (TEST_PROTECT()) \
+  { \
+    CEXCEPTION_T e; \
+    Try { \
+      setUp(); \
+      TestFunc(); \
+    } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+    CMock_Verify(); \
+  } \
+  CMock_Destroy(); \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include "cmock.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "CException.h"
+#include "one.h"
+#include "two.h"
+#include "funky.h"
+#include <setjmp.h>
+#include "Mockstanky.h"
+
+int GlobalExpectCount;
+int GlobalVerifyOrder;
+char* GlobalOrderError;
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+
+
+/*=======Mock Management=====*/
+static void CMock_Init(void)
+{
+  GlobalExpectCount = 0;
+  GlobalVerifyOrder = 0;
+  GlobalOrderError = NULL;
+  Mockstanky_Init();
+}
+static void CMock_Verify(void)
+{
+  Mockstanky_Verify();
+}
+static void CMock_Destroy(void)
+{
+  Mockstanky_Destroy();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  CMock_Verify();
+  CMock_Destroy();
+  tearDown();
+  CMock_Init();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/mocksample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+
+  CMock_Guts_MemFreeFinal();
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_mock_run2.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  CMock_Init(); \
+  UNITY_CLR_DETAILS(); \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+    CMock_Verify(); \
+  } \
+  CMock_Destroy(); \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include "cmock.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "funky.h"
+#include <setjmp.h>
+#include "Mockstanky.h"
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+
+
+/*=======Mock Management=====*/
+static void CMock_Init(void)
+{
+  Mockstanky_Init();
+}
+static void CMock_Verify(void)
+{
+  Mockstanky_Verify();
+}
+static void CMock_Destroy(void)
+{
+  Mockstanky_Destroy();
+}
+
+/*=======Suite Setup=====*/
+static int suite_setup(void)
+{
+a_custom_setup();
+}
+
+/*=======Suite Teardown=====*/
+static int suite_teardown(int num_failures)
+{
+a_custom_teardown();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  CMock_Verify();
+  CMock_Destroy();
+  tearDown();
+  CMock_Init();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  suite_setup();
+  UnityBegin("testdata/mocksample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+
+  CMock_Guts_MemFreeFinal();
+  return suite_teardown(UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_mock_yaml.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,90 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  CMock_Init(); \
+  UNITY_CLR_DETAILS(); \
+  if (TEST_PROTECT()) \
+  { \
+    CEXCEPTION_T e; \
+    Try { \
+      setUp(); \
+      TestFunc(); \
+    } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+    CMock_Verify(); \
+  } \
+  CMock_Destroy(); \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include "cmock.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "CException.h"
+#include "two.h"
+#include "three.h"
+#include <four.h>
+#include "funky.h"
+#include <setjmp.h>
+#include "Mockstanky.h"
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+
+
+/*=======Mock Management=====*/
+static void CMock_Init(void)
+{
+  Mockstanky_Init();
+}
+static void CMock_Verify(void)
+{
+  Mockstanky_Verify();
+}
+static void CMock_Destroy(void)
+{
+  Mockstanky_Destroy();
+}
+
+/*=======Suite Setup=====*/
+static int suite_setup(void)
+{
+a_yaml_setup();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  CMock_Verify();
+  CMock_Destroy();
+  tearDown();
+  CMock_Init();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  suite_setup();
+  UnityBegin("testdata/mocksample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+
+  CMock_Guts_MemFreeFinal();
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_new1.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  if (TEST_PROTECT()) \
+  { \
+    CEXCEPTION_T e; \
+    Try { \
+      setUp(); \
+      TestFunc(); \
+    } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+  } \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "CException.h"
+#include "one.h"
+#include "two.h"
+#include "funky.h"
+#include "stanky.h"
+#include <setjmp.h>
+
+int GlobalExpectCount;
+int GlobalVerifyOrder;
+char* GlobalOrderError;
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+extern void test_TheThirdThingToTest(void);
+extern void test_TheFourthThingToTest(void);
+
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  tearDown();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/testsample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+  RUN_TEST(test_TheThirdThingToTest, 53);
+  RUN_TEST(test_TheFourthThingToTest, 58);
+
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_new2.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,70 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+  } \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "funky.h"
+#include "stanky.h"
+#include <setjmp.h>
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+extern void test_TheThirdThingToTest(void);
+extern void test_TheFourthThingToTest(void);
+
+
+/*=======Suite Setup=====*/
+static int suite_setup(void)
+{
+a_custom_setup();
+}
+
+/*=======Suite Teardown=====*/
+static int suite_teardown(int num_failures)
+{
+a_custom_teardown();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  tearDown();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  suite_setup();
+  UnityBegin("testdata/testsample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+  RUN_TEST(test_TheThirdThingToTest, 53);
+  RUN_TEST(test_TheFourthThingToTest, 58);
+
+  return suite_teardown(UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_param.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,58 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST_NO_ARGS
+#define RUN_TEST(TestFunc, TestLineNum, ...) \
+{ \
+  Unity.CurrentTestName = #TestFunc "(" #__VA_ARGS__ ")"; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(__VA_ARGS__); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+  } \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "funky.h"
+#include "stanky.h"
+#include <setjmp.h>
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+extern void test_TheThirdThingToTest(void);
+extern void test_TheFourthThingToTest(void);
+
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  tearDown();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/testsample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21, RUN_TEST_NO_ARGS);
+  RUN_TEST(test_TheSecondThingToTest, 43, RUN_TEST_NO_ARGS);
+  RUN_TEST(test_TheThirdThingToTest, 53, RUN_TEST_NO_ARGS);
+  RUN_TEST(test_TheFourthThingToTest, 58, RUN_TEST_NO_ARGS);
+
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_run1.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,67 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  if (TEST_PROTECT()) \
+  { \
+    CEXCEPTION_T e; \
+    Try { \
+      setUp(); \
+      TestFunc(); \
+    } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+  } \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "CException.h"
+#include "one.h"
+#include "two.h"
+#include "funky.h"
+#include "stanky.h"
+#include <setjmp.h>
+
+int GlobalExpectCount;
+int GlobalVerifyOrder;
+char* GlobalOrderError;
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+extern void test_TheThirdThingToTest(void);
+extern void test_TheFourthThingToTest(void);
+
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  tearDown();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  UnityBegin("testdata/testsample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+  RUN_TEST(test_TheThirdThingToTest, 53);
+  RUN_TEST(test_TheFourthThingToTest, 58);
+
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_run2.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,70 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  if (TEST_PROTECT()) \
+  { \
+      setUp(); \
+      TestFunc(); \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+  } \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "funky.h"
+#include "stanky.h"
+#include <setjmp.h>
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+extern void test_TheThirdThingToTest(void);
+extern void test_TheFourthThingToTest(void);
+
+
+/*=======Suite Setup=====*/
+static int suite_setup(void)
+{
+a_custom_setup();
+}
+
+/*=======Suite Teardown=====*/
+static int suite_teardown(int num_failures)
+{
+a_custom_teardown();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  tearDown();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  suite_setup();
+  UnityBegin("testdata/testsample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+  RUN_TEST(test_TheThirdThingToTest, 53);
+  RUN_TEST(test_TheFourthThingToTest, 58);
+
+  return suite_teardown(UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/expectdata/testsample_yaml.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,71 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+/*=======Test Runner Used To Run Each Test Below=====*/
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+  Unity.CurrentTestName = #TestFunc; \
+  Unity.CurrentTestLineNumber = TestLineNum; \
+  Unity.NumberOfTests++; \
+  if (TEST_PROTECT()) \
+  { \
+    CEXCEPTION_T e; \
+    Try { \
+      setUp(); \
+      TestFunc(); \
+    } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \
+  } \
+  if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+  { \
+    tearDown(); \
+  } \
+  UnityConcludeTest(); \
+}
+
+/*=======Automagically Detected Files To Include=====*/
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "CException.h"
+#include "two.h"
+#include "three.h"
+#include <four.h>
+#include "funky.h"
+#include "stanky.h"
+#include <setjmp.h>
+
+/*=======External Functions This Runner Calls=====*/
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_TheFirstThingToTest(void);
+extern void test_TheSecondThingToTest(void);
+extern void test_TheThirdThingToTest(void);
+extern void test_TheFourthThingToTest(void);
+
+
+/*=======Suite Setup=====*/
+static int suite_setup(void)
+{
+a_yaml_setup();
+}
+
+/*=======Test Reset Option=====*/
+void resetTest(void);
+void resetTest(void)
+{
+  tearDown();
+  setUp();
+}
+
+
+/*=======MAIN=====*/
+int main(void)
+{
+  suite_setup();
+  UnityBegin("testdata/testsample.c");
+  RUN_TEST(test_TheFirstThingToTest, 21);
+  RUN_TEST(test_TheSecondThingToTest, 43);
+  RUN_TEST(test_TheThirdThingToTest, 53);
+  RUN_TEST(test_TheFourthThingToTest, 58);
+
+  return (UnityEnd());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/rakefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,60 @@
+# ==========================================
+#   Unity Project - A Test Framework for C
+#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+#   [Released under MIT License. Please refer to license.txt for details]
+# ==========================================
+
+UNITY_ROOT = File.expand_path(File.dirname(__FILE__)) + '/'
+
+require 'rake'
+require 'rake/clean'
+require UNITY_ROOT + 'rakefile_helper'
+
+TEMP_DIRS = [
+	File.join(UNITY_ROOT, 'build')
+]
+
+TEMP_DIRS.each do |dir|
+  directory(dir)
+  CLOBBER.include(dir)
+end
+
+task :prepare_for_tests => TEMP_DIRS
+
+include RakefileHelpers
+
+# Load proper GCC as defult configuration
+DEFAULT_CONFIG_FILE = 'gcc_auto_stdint.yml'
+configure_toolchain(DEFAULT_CONFIG_FILE)
+
+desc "Test unity with its own unit tests"
+task :unit => [:prepare_for_tests] do
+  run_tests get_unit_test_files
+end
+
+desc "Test unity's helper scripts"
+task :scripts => [:prepare_for_tests] do
+  Dir['tests/test_*.rb'].each do |scriptfile|
+    require "./"+scriptfile
+  end
+end
+
+desc "Generate test summary"
+task :summary do
+  report_summary
+end
+
+desc "Build and test Unity"
+task :all => [:clean, :prepare_for_tests, :scripts, :unit, :summary]
+task :default => [:clobber, :all]
+task :ci => [:no_color, :default]
+task :cruise => [:no_color, :default]
+
+desc "Load configuration"
+task :config, :config_file do |t, args|
+  configure_toolchain(args[:config_file])
+end
+
+task :no_color do
+  $colour_output = false
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/rakefile_helper.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,255 @@
+# ==========================================
+#   Unity Project - A Test Framework for C
+#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+#   [Released under MIT License. Please refer to license.txt for details]
+# ==========================================
+
+require 'yaml'
+require 'fileutils'
+require UNITY_ROOT + '../auto/unity_test_summary'
+require UNITY_ROOT + '../auto/generate_test_runner'
+require UNITY_ROOT + '../auto/colour_reporter'
+
+module RakefileHelpers
+
+  C_EXTENSION = '.c'
+
+  def load_configuration(config_file)
+    unless ($configured)
+      $cfg_file = "targets/#{config_file}" unless (config_file =~ /[\\|\/]/)
+      $cfg = YAML.load(File.read($cfg_file))
+      $colour_output = false unless $cfg['colour']
+      $configured = true if (config_file != DEFAULT_CONFIG_FILE)
+    end
+  end
+
+  def configure_clean
+    CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil?
+  end
+
+  def configure_toolchain(config_file=DEFAULT_CONFIG_FILE)
+    config_file += '.yml' unless config_file =~ /\.yml$/
+    config_file = config_file unless config_file =~ /[\\|\/]/
+    load_configuration(config_file)
+    configure_clean
+  end
+
+  def get_unit_test_files
+    path = $cfg['compiler']['unit_tests_path'] + 'test*' + C_EXTENSION
+    path.gsub!(/\\/, '/')
+    FileList.new(path)
+  end
+
+  def get_local_include_dirs
+    include_dirs = $cfg['compiler']['includes']['items'].dup
+    include_dirs.delete_if {|dir| dir.is_a?(Array)}
+    return include_dirs
+  end
+
+  def extract_headers(filename)
+    includes = []
+    lines = File.readlines(filename)
+    lines.each do |line|
+      m = line.match(/^\s*#include\s+\"\s*(.+\.[hH])\s*\"/)
+      if not m.nil?
+        includes << m[1]
+      end
+    end
+    return includes
+  end
+
+  def find_source_file(header, paths)
+    paths.each do |dir|
+      src_file = dir + header.ext(C_EXTENSION)
+      if (File.exists?(src_file))
+        return src_file
+      end
+    end
+    return nil
+  end
+
+  def tackit(strings)
+    if strings.is_a?(Array)
+      result = "\"#{strings.join}\""
+    else
+      result = strings
+    end
+    return result
+  end
+
+  def squash(prefix, items)
+    result = ''
+    items.each { |item| result += " #{prefix}#{tackit(item)}" }
+    return result
+  end
+
+  def should(behave, &block)
+    if block
+      puts "Should " + behave
+      yield block
+    else
+      puts "UNIMPLEMENTED CASE: Should #{behave}"
+    end
+  end
+
+  def build_compiler_fields
+    command  = tackit($cfg['compiler']['path'])
+    if $cfg['compiler']['defines']['items'].nil?
+      defines  = ''
+    else
+      defines  = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'] + ['UNITY_OUTPUT_CHAR=putcharSpy'])
+    end
+    options  = squash('', $cfg['compiler']['options'])
+    includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items'])
+    includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
+    return {:command => command, :defines => defines, :options => options, :includes => includes}
+  end
+
+  def compile(file, defines=[])
+    compiler = build_compiler_fields
+    cmd_str  = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " +
+               "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}"
+    obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}"
+    execute(cmd_str + obj_file)
+    return obj_file
+  end
+
+  def build_linker_fields
+    command  = tackit($cfg['linker']['path'])
+    if $cfg['linker']['options'].nil?
+      options  = ''
+    else
+      options  = squash('', $cfg['linker']['options'])
+    end
+    if ($cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?)
+      includes = ''
+    else
+      includes = squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items'])
+    end
+    includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
+    return {:command => command, :options => options, :includes => includes}
+  end
+
+  def link_it(exe_name, obj_list)
+    linker = build_linker_fields
+    cmd_str = "#{linker[:command]}#{linker[:options]}#{linker[:includes]} " +
+      (obj_list.map{|obj|"#{$cfg['linker']['object_files']['path']}#{obj} "}).join +
+      $cfg['linker']['bin_files']['prefix'] + ' ' +
+      $cfg['linker']['bin_files']['destination'] +
+      exe_name + $cfg['linker']['bin_files']['extension']
+    execute(cmd_str)
+  end
+
+  def build_simulator_fields
+    return nil if $cfg['simulator'].nil?
+    if $cfg['simulator']['path'].nil?
+      command = ''
+    else
+      command = (tackit($cfg['simulator']['path']) + ' ')
+    end
+    if $cfg['simulator']['pre_support'].nil?
+      pre_support = ''
+    else
+      pre_support = squash('', $cfg['simulator']['pre_support'])
+    end
+    if $cfg['simulator']['post_support'].nil?
+      post_support = ''
+    else
+      post_support = squash('', $cfg['simulator']['post_support'])
+    end
+    return {:command => command, :pre_support => pre_support, :post_support => post_support}
+  end
+
+  def execute(command_string, verbose=true)
+    report command_string
+    output = `#{command_string}`.chomp
+    report(output) if (verbose && !output.nil? && (output.length > 0))
+    if $?.exitstatus != 0
+      raise "Command failed. (Returned #{$?.exitstatus})"
+    end
+    return output
+  end
+
+  def report_summary
+    summary = UnityTestSummary.new
+    summary.set_root_path(UNITY_ROOT)
+    results_glob = "#{$cfg['compiler']['build_path']}*.test*"
+    results_glob.gsub!(/\\/, '/')
+    results = Dir[results_glob]
+    summary.set_targets(results)
+    report summary.run
+  end
+
+  def run_tests(test_files)
+    report 'Running Unity system tests...'
+
+    # Tack on TEST define for compiling unit tests
+    load_configuration($cfg_file)
+    test_defines = ['TEST']
+    $cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil?
+    $cfg['compiler']['defines']['items'] << 'TEST'
+
+    include_dirs = get_local_include_dirs
+
+    # Build and execute each unit test
+    test_files.each do |test|
+      obj_list = []
+
+      if !$cfg['compiler']['aux_sources'].nil?
+        $cfg['compiler']['aux_sources'].each do |aux|
+          obj_list << compile(aux, test_defines)
+        end
+      end
+
+      # Detect dependencies and build required modules
+      extract_headers(test).each do |header|
+        # Compile corresponding source file if it exists
+        src_file = find_source_file(header, include_dirs)
+        if !src_file.nil?
+          obj_list << compile(src_file, test_defines)
+        end
+      end
+
+      # Build the test runner (generate if configured to do so)
+      test_base = File.basename(test, C_EXTENSION)
+
+      runner_name = test_base + '_Runner.c'
+      runner_path = ''
+
+      if $cfg['compiler']['runner_path'].nil?
+        runner_path = $cfg['compiler']['build_path'] + runner_name
+      else
+        runner_path = $cfg['compiler']['runner_path'] + runner_name
+      end
+
+      options = $cfg[:unity]
+      options[:use_param_tests] = (test =~ /parameterized/) ? true : false
+      UnityTestRunnerGenerator.new(options).run(test, runner_path)
+      obj_list << compile(runner_path, test_defines)
+
+      # Build the test module
+      obj_list << compile(test, test_defines)
+
+      # Link the test executable
+      link_it(test_base, obj_list)
+
+      # Execute unit test and generate results file
+      simulator = build_simulator_fields
+      executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension']
+      if simulator.nil?
+        cmd_str = executable
+      else
+        cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}"
+      end
+      output = execute(cmd_str)
+      test_results = $cfg['compiler']['build_path'] + test_base
+      if output.match(/OK$/m).nil?
+        test_results += '.testfail'
+      else
+        test_results += '.testpass'
+      end
+      File.open(test_results, 'w') { |f| f.print output }
+
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/clang_file.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,83 @@
+---
+compiler:
+  path: clang
+  source_path:     '../src/'
+  unit_tests_path: &unit_tests_path 'tests/'
+  build_path:      &build_path 'build/'
+  options:
+    - '-c'
+    - '-Wall'
+    - '-Wextra'
+    - '-Werror'
+    - '-Wcast-qual'
+    - '-Wconversion'
+    - '-Wdisabled-optimization'
+    - '-Wformat=2'
+    - '-Winit-self'
+    - '-Winline'
+    - '-Winvalid-pch'
+    - '-Wmissing-declarations'
+    - '-Wmissing-include-dirs'
+    - '-Wmissing-prototypes'
+    - '-Wnonnull'
+    - '-Wpacked'
+    - '-Wpointer-arith'
+    - '-Wredundant-decls'
+    - '-Wswitch-default'
+    - '-Wstrict-aliasing'
+    - '-Wstrict-overflow=5'
+    - '-Wuninitialized'
+    - '-Wunused'
+#   - '-Wunreachable-code'
+    - '-Wreturn-type'
+    - '-Wshadow'
+    - '-Wundef'
+    - '-Wwrite-strings'
+    - '-Wno-missing-declarations'
+    - '-Wno-missing-prototypes'
+    - '-Wno-nested-externs'
+    - '-Wno-redundant-decls'
+    - '-Wno-unused-parameter'
+    - '-Wno-variadic-macros'
+    - '-Wbad-function-cast'
+    - '-fms-extensions'
+    - '-fno-omit-frame-pointer'
+    - '-ffloat-store'
+    - '-fno-common'
+    - '-fstrict-aliasing'
+    - '-std=gnu99'
+    - '-pedantic'
+    - '-O0'
+  includes:
+    prefix: '-I'
+    items:
+      - 'src/'
+      - '../src/'
+      - *unit_tests_path
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_INCLUDE_DOUBLE
+      - UNITY_SUPPORT_64
+      - UNITY_OUTPUT_RESULTS_FILE
+  object_files:
+    prefix: '-o'
+    extension: '.o'
+    destination: *build_path
+linker:
+  path: clang
+  options:
+    - -lm
+    - '-m64'
+  includes:
+    prefix: '-I'
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.exe'
+    destination: *build_path
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/clang_strict.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,85 @@
+---
+compiler:
+  path: clang
+  source_path:     '../src/'
+  unit_tests_path: &unit_tests_path 'tests/'
+  build_path:      &build_path 'build/'
+  options:
+    - '-c'
+    - '-Wall'
+    - '-Wextra'
+    - '-Werror'
+    - '-Wcast-qual'
+    - '-Wconversion'
+    - '-Wdisabled-optimization'
+    - '-Wformat=2'
+    - '-Winit-self'
+    - '-Winline'
+    - '-Winvalid-pch'
+    - '-Wmissing-declarations'
+    - '-Wmissing-include-dirs'
+    - '-Wmissing-prototypes'
+    - '-Wnonnull'
+    - '-Wpacked'
+    - '-Wpointer-arith'
+    - '-Wredundant-decls'
+    - '-Wswitch-default'
+    - '-Wstrict-aliasing'
+    - '-Wstrict-overflow=5'
+    - '-Wuninitialized'
+    - '-Wunused'
+#   - '-Wunreachable-code'
+    - '-Wreturn-type'
+    - '-Wshadow'
+    - '-Wundef'
+    - '-Wwrite-strings'
+    - '-Wno-missing-declarations'
+    - '-Wno-missing-prototypes'
+    - '-Wno-nested-externs'
+    - '-Wno-redundant-decls'
+    - '-Wno-unused-parameter'
+    - '-Wno-variadic-macros'
+    - '-Wbad-function-cast'
+    - '-fms-extensions'
+    - '-fno-omit-frame-pointer'
+    - '-ffloat-store'
+    - '-fno-common'
+    - '-fstrict-aliasing'
+    - '-std=gnu99'
+    - '-pedantic'
+    - '-O0'
+  includes:
+    prefix: '-I'
+    items:
+      - 'src/'
+      - '../src/'
+      - *unit_tests_path
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_INCLUDE_DOUBLE
+      - UNITY_SUPPORT_TEST_CASES
+      - UNITY_SUPPORT_64
+      - UNITY_OUTPUT_FLUSH
+      - UNITY_OMIT_OUTPUT_FLUSH_HEADER_DECLARATION
+  object_files:
+    prefix: '-o'
+    extension: '.o'
+    destination: *build_path
+linker:
+  path: clang
+  options:
+    - -lm
+    - '-m64'
+  includes:
+    prefix: '-I'
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.exe'
+    destination: *build_path
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/gcc_32.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,49 @@
+compiler:
+  path: gcc
+  source_path:     '../src/'
+  unit_tests_path: &unit_tests_path 'tests/'
+  build_path:      &build_path 'build/'
+  options:
+    - '-c'
+    - '-m32'
+    - '-Wall'
+    - '-Wno-address'
+    - '-std=c99'
+    - '-pedantic'
+  includes:
+    prefix: '-I'
+    items:
+      - 'src/'
+      - '../src/'
+      - *unit_tests_path
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_EXCLUDE_STDINT_H
+      - UNITY_EXCLUDE_LIMITS_H
+      - UNITY_EXCLUDE_SIZEOF
+      - UNITY_INCLUDE_DOUBLE
+      - UNITY_SUPPORT_TEST_CASES
+      - UNITY_INT_WIDTH=32
+      - UNITY_LONG_WIDTH=32
+  object_files:
+    prefix: '-o'
+    extension: '.o'
+    destination: *build_path
+linker:
+  path: gcc
+  options:
+    - -lm
+    - '-m32'
+  includes:
+    prefix: '-I'
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.exe'
+    destination: *build_path
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/gcc_64.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,50 @@
+compiler:
+  path: gcc
+  source_path:     '../src/'
+  unit_tests_path: &unit_tests_path 'tests/'
+  build_path:      &build_path 'build/'
+  options:
+    - '-c'
+    - '-m64'
+    - '-Wall'
+    - '-Wno-address'
+    - '-std=c99'
+    - '-pedantic'
+  includes:
+    prefix: '-I'
+    items:
+      - 'src/'
+      - '../src/'
+      - *unit_tests_path
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_EXCLUDE_STDINT_H
+      - UNITY_EXCLUDE_LIMITS_H
+      - UNITY_EXCLUDE_SIZEOF
+      - UNITY_INCLUDE_DOUBLE
+      - UNITY_SUPPORT_TEST_CASES
+      - UNITY_SUPPORT_64
+      - UNITY_INT_WIDTH=32
+      - UNITY_LONG_WIDTH=64
+  object_files:
+    prefix: '-o'
+    extension: '.o'
+    destination: *build_path
+linker:
+  path: gcc
+  options:
+    - -lm
+    - '-m64'
+  includes:
+    prefix: '-I'
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.exe'
+    destination: *build_path
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/gcc_auto_limits.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,46 @@
+compiler:
+  path: gcc
+  source_path:     '../src/'
+  unit_tests_path: &unit_tests_path 'tests/'
+  build_path:      &build_path 'build/'
+  options:
+    - '-c'
+    - '-m64'
+    - '-Wall'
+    - '-Wno-address'
+    - '-std=c99'
+    - '-pedantic'
+  includes:
+    prefix: '-I'
+    items:
+      - 'src/'
+      - '../src/'
+      - *unit_tests_path
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_EXCLUDE_STDINT_H
+      - UNITY_INCLUDE_DOUBLE
+      - UNITY_SUPPORT_TEST_CASES
+      - UNITY_SUPPORT_64
+  object_files:
+    prefix: '-o'
+    extension: '.o'
+    destination: *build_path
+linker:
+  path: gcc
+  options:
+    - -lm
+    - '-m64'
+  includes:
+    prefix: '-I'
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.exe'
+    destination: *build_path
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/gcc_auto_sizeof.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,47 @@
+compiler:
+  path: gcc
+  source_path:     '../src/'
+  unit_tests_path: &unit_tests_path 'tests/'
+  build_path:      &build_path 'build/'
+  options:
+    - '-c'
+    - '-m64'
+    - '-Wall'
+    - '-Wno-address'
+    - '-std=c99'
+    - '-pedantic'
+  includes:
+    prefix: '-I'
+    items:
+      - 'src/'
+      - '../src/'
+      - *unit_tests_path
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_EXCLUDE_STDINT_H
+      - UNITY_EXCLUDE_LIMITS_H
+      - UNITY_INCLUDE_DOUBLE
+      - UNITY_SUPPORT_TEST_CASES
+      - UNITY_SUPPORT_64
+  object_files:
+    prefix: '-o'
+    extension: '.o'
+    destination: *build_path
+linker:
+  path: gcc
+  options:
+    - -lm
+    - '-m64'
+  includes:
+    prefix: '-I'
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.exe'
+    destination: *build_path
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/gcc_auto_stdint.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,58 @@
+compiler:
+  path: gcc
+  source_path:     '../src/'
+  unit_tests_path: &unit_tests_path 'tests/'
+  build_path:      &build_path 'build/'
+  options:
+    - '-c'
+    - '-m64'
+    - '-Wall'
+    - '-Wno-address'
+    - '-std=c99'
+    - '-pedantic'
+    - '-Wextra'
+    - '-Werror'
+    - '-Wpointer-arith'
+    - '-Wcast-align'
+    - '-Wwrite-strings'
+    - '-Wswitch-default'
+    - '-Wunreachable-code'
+    - '-Winit-self'
+    - '-Wmissing-field-initializers'
+    - '-Wno-unknown-pragmas'
+    - '-Wstrict-prototypes'
+    - '-Wundef'
+    - '-Wold-style-definition'
+  includes:
+    prefix: '-I'
+    items:
+      - 'src/'
+      - '../src/'
+      - *unit_tests_path
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_INCLUDE_DOUBLE
+      - UNITY_SUPPORT_TEST_CASES
+      - UNITY_SUPPORT_64
+  object_files:
+    prefix: '-o'
+    extension: '.o'
+    destination: *build_path
+linker:
+  path: gcc
+  options:
+    - -lm
+    - '-m64'
+  includes:
+    prefix: '-I'
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.exe'
+    destination: *build_path
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/gcc_manual_math.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,46 @@
+compiler:
+  path: gcc
+  source_path:     '../src/'
+  unit_tests_path: &unit_tests_path 'tests/'
+  build_path:      &build_path 'build/'
+  options:
+    - '-c'
+    - '-m64'
+    - '-Wall'
+    - '-Wno-address'
+    - '-std=c99'
+    - '-pedantic'
+  includes:
+    prefix: '-I'
+    items:
+      - 'src/'
+      - '../src/'
+      - *unit_tests_path
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_EXCLUDE_MATH_H
+      - UNITY_INCLUDE_DOUBLE
+      - UNITY_SUPPORT_TEST_CASES
+      - UNITY_SUPPORT_64
+  object_files:
+    prefix: '-o'
+    extension: '.o'
+    destination: *build_path
+linker:
+  path: gcc
+  options:
+    - -lm
+    - '-m64'
+  includes:
+    prefix: '-I'
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.exe'
+    destination: *build_path
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/hitech_picc18.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,101 @@
+# rumor has it that this yaml file works for the standard edition of the
+# hitech PICC18 compiler, but not the pro version.
+#
+compiler:
+  path: cd build && picc18
+  source_path: '..\src\'
+  unit_tests_path: &unit_tests_path 'tests\'
+  build_path: &build_path 'build\'
+  options:
+    - --chip=18F87J10
+    - --ide=hitide
+    - --q #quiet please
+    - --asmlist
+    - --codeoffset=0
+    - --emi=wordwrite # External memory interface protocol
+    - --warn=0 # allow all normal warning messages
+    - --errors=10 # Number of errors before aborting compile
+    - --char=unsigned
+    - -Bl # Large memory model
+    - -G # generate symbol file
+    - --cp=16 # 16-bit pointers
+    - --double=24
+    - -N255 # 255-char symbol names
+    - --opt=none # Do not use any compiler optimziations
+    - -c # compile only
+    - -M
+  includes:
+    prefix: '-I'
+    items:
+      - 'c:/Projects/NexGen/Prototypes/CMockTest/src/'
+      - 'c:/Projects/NexGen/Prototypes/CMockTest/mocks/'
+      - 'c:/CMock/src/'
+      - 'c:/CMock/examples/src/'
+      - 'c:/CMock/vendor/unity/src/'
+      - 'c:/CMock/vendor/unity/examples/helper/'
+      - *unit_tests_path
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_INT_WIDTH=16
+      - UNITY_POINTER_WIDTH=16
+      - CMOCK_MEM_STATIC
+      - CMOCK_MEM_SIZE=3000
+      - UNITY_SUPPORT_TEST_CASES
+      - _PICC18
+  object_files:
+    # prefix: '-O' # Hi-Tech doesn't want a prefix. They key off of filename .extensions, instead
+    extension: '.obj'
+    destination: *build_path
+
+linker:
+  path: cd build && picc18
+  options:
+    - --chip=18F87J10
+    - --ide=hitide
+    - --cp=24 # 24-bit pointers. Is this needed for linker??
+    - --double=24 # Is this needed for linker??
+    - -Lw # Scan the pic87*w.lib in the lib/ of the compiler installation directory
+    - --summary=mem,file # info listing
+    - --summary=+psect
+    - --summary=+hex
+    - --output=+intel
+    - --output=+mcof
+    - --runtime=+init # Directs startup code to copy idata, ibigdata and ifardata psects from ROM to RAM.
+    - --runtime=+clear # Directs startup code to clear bss, bigbss, rbss and farbss psects
+    - --runtime=+clib # link in the c-runtime
+    - --runtime=+keep # Keep the generated startup src after its obj is linked
+    - -G # Generate src-level symbol file
+    - -MIWasTheLastToBuild.map
+    - --warn=0 # allow all normal warning messages
+    - -Bl # Large memory model (probably not needed for linking)
+  includes:
+    prefix: '-I'
+    object_files:
+      path: *build_path
+      extension: '.obj'
+    bin_files:
+      prefix: '-O'
+      extension: '.hex'
+      destination: *build_path
+
+simulator:
+  path:
+  pre_support:
+    - 'java -client -jar ' # note space
+    - ['C:\Program Files\HI-TECH Software\HI-TIDE\3.15\lib\', 'simpic18.jar']
+    - 18F87J10
+  post_support:
+
+:cmock:
+  :plugins: []
+  :includes:
+    - Types.h
+  :suite_teardown: |
+    if (num_failures)
+      _FAILED_TEST();
+    else
+      _PASSED_TESTS();
+    return 0;
+
+colour: true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/iar_arm_v4.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,89 @@
+tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 4.0 Kickstart\'
+compiler:
+  path:             [*tools_root, 'arm\bin\iccarm.exe']
+  source_path:      '..\src\'
+  unit_tests_path:  &unit_tests_path 'tests\'
+  build_path:       &build_path 'build\'
+  options:
+    - --dlib_config
+    - [*tools_root, 'arm\lib\dl4tptinl8n.h']
+    - -z3
+    - --no_cse
+    - --no_unroll
+    - --no_inline
+    - --no_code_motion
+    - --no_tbaa
+    - --no_clustering
+    - --no_scheduling
+    - --debug
+    - --cpu_mode thumb
+    - --endian little
+    - --cpu ARM7TDMI
+    - --stack_align 4
+    - --interwork
+    - -e
+    - --silent
+    - --warnings_are_errors
+    - --fpu None
+    - --diag_suppress Pa050
+  includes:
+    prefix: '-I'
+    items:
+      - [*tools_root, 'arm\inc\']
+      - 'src\'
+      - '..\src\'
+      - *unit_tests_path
+      - 'vendor\unity\src\'
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_SUPPORT_64
+      - 'UNITY_SUPPORT_TEST_CASES'
+  object_files:
+    prefix: '-o'
+    extension: '.r79'
+    destination: *build_path
+linker:
+  path: [*tools_root, 'common\bin\xlink.exe']
+  options:
+    - -rt
+    - [*tools_root, 'arm\lib\dl4tptinl8n.r79']
+    - -D_L_EXTMEM_START=0
+    - -D_L_EXTMEM_SIZE=0
+    - -D_L_HEAP_SIZE=120
+    - -D_L_STACK_SIZE=32
+    - -e_small_write=_formatted_write
+    - -s
+    - __program_start
+    - -f
+    - [*tools_root, '\arm\config\lnkarm.xcl']
+  includes:
+    prefix: '-I'
+    items:
+      - [*tools_root, 'arm\config\']
+      - [*tools_root, 'arm\lib\']
+  object_files:
+    path: *build_path
+    extension: '.r79'
+  bin_files:
+    prefix: '-o'
+    extension: '.d79'
+    destination: *build_path
+simulator:
+  path: [*tools_root, 'common\bin\CSpyBat.exe']
+  pre_support:
+    - --silent
+    - [*tools_root, 'arm\bin\armproc.dll']
+    - [*tools_root, 'arm\bin\armsim.dll']
+  post_support:
+    - --plugin
+    - [*tools_root, 'arm\bin\armbat.dll']
+    - --backend
+    - -B
+    - -p
+    - [*tools_root, 'arm\config\ioat91sam7X256.ddf']
+    - -d
+    - sim
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/iar_arm_v5.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,79 @@
+tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 5.3\'
+compiler:
+  path:             [*tools_root, 'arm\bin\iccarm.exe']
+  source_path:      '..\src\'
+  unit_tests_path:  &unit_tests_path 'tests\'
+  build_path:       &build_path 'build\'
+  options:
+    - --dlib_config
+    - [*tools_root, 'arm\inc\DLib_Config_Normal.h']
+    - --no_cse
+    - --no_unroll
+    - --no_inline
+    - --no_code_motion
+    - --no_tbaa
+    - --no_clustering
+    - --no_scheduling
+    - --debug
+    - --cpu_mode thumb
+    - --endian=little
+    - --cpu=ARM7TDMI
+    - --interwork
+    - --warnings_are_errors
+    - --fpu=None
+    - --diag_suppress=Pa050
+    - --diag_suppress=Pe111
+    - -e
+    - -On
+  includes:
+    prefix: '-I'
+    items:
+      - [*tools_root, 'arm\inc\']
+      - 'src\'
+      - '..\src\'
+      - *unit_tests_path
+      - 'vendor\unity\src\'
+      - 'iar\iar_v5\incIAR\'
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_SUPPORT_64
+      - 'UNITY_SUPPORT_TEST_CASES'
+  object_files:
+    prefix: '-o'
+    extension: '.r79'
+    destination: *build_path
+linker:
+  path: [*tools_root, 'arm\bin\ilinkarm.exe']
+  options:
+    - --redirect _Printf=_PrintfLarge
+    - --redirect _Scanf=_ScanfSmall
+    - --semihosting
+    - --entry __iar_program_start
+    - --config
+    - [*tools_root, 'arm\config\generic.icf']
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.out'
+    destination: *build_path
+simulator:
+  path: [*tools_root, 'common\bin\CSpyBat.exe']
+  pre_support:
+    - --silent
+    - [*tools_root, 'arm\bin\armproc.dll']
+    - [*tools_root, 'arm\bin\armsim.dll']
+  post_support:
+    - --plugin
+    - [*tools_root, 'arm\bin\armbat.dll']
+    - --backend
+    - -B
+    - -p
+    - [*tools_root, 'arm\config\debugger\atmel\ioat91sam7X256.ddf']
+    - -d
+    - sim
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/iar_arm_v5_3.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,79 @@
+tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 5.3\'
+compiler:
+  path:             [*tools_root, 'arm\bin\iccarm.exe']
+  source_path:      '..\src\'
+  unit_tests_path:  &unit_tests_path 'tests\'
+  build_path:       &build_path 'build\'
+  options:
+    - --dlib_config
+    - [*tools_root, 'arm\inc\DLib_Config_Normal.h']
+    - --no_cse
+    - --no_unroll
+    - --no_inline
+    - --no_code_motion
+    - --no_tbaa
+    - --no_clustering
+    - --no_scheduling
+    - --debug
+    - --cpu_mode thumb
+    - --endian=little
+    - --cpu=ARM7TDMI
+    - --interwork
+    - --warnings_are_errors
+    - --fpu=None
+    - --diag_suppress=Pa050
+    - --diag_suppress=Pe111
+    - -e
+    - -On
+  includes:
+    prefix: '-I'
+    items:
+      - [*tools_root, 'arm\inc\']
+      - 'src\'
+      - '..\src\'
+      - *unit_tests_path
+      - 'vendor\unity\src\'
+      - 'iar\iar_v5\incIAR\'
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_SUPPORT_64
+      - 'UNITY_SUPPORT_TEST_CASES'
+  object_files:
+    prefix: '-o'
+    extension: '.r79'
+    destination: *build_path
+linker:
+  path: [*tools_root, 'arm\bin\ilinkarm.exe']
+  options:
+    - --redirect _Printf=_PrintfLarge
+    - --redirect _Scanf=_ScanfSmall
+    - --semihosting
+    - --entry __iar_program_start
+    - --config
+    - [*tools_root, 'arm\config\generic.icf']
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.out'
+    destination: *build_path
+simulator:
+  path: [*tools_root, 'common\bin\CSpyBat.exe']
+  pre_support:
+    - --silent
+    - [*tools_root, 'arm\bin\armproc.dll']
+    - [*tools_root, 'arm\bin\armsim.dll']
+  post_support:
+    - --plugin
+    - [*tools_root, 'arm\bin\armbat.dll']
+    - --backend
+    - -B
+    - -p
+    - [*tools_root, 'arm\config\debugger\atmel\ioat91sam7X256.ddf']
+    - -d
+    - sim
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,93 @@
+#Default tool path for IAR 5.4 on Windows XP 64bit
+tools_root: &tools_root 'C:\Program Files (x86)\IAR Systems\Embedded Workbench 5.4 Kickstart\'
+compiler:
+  path:             [*tools_root, 'arm\bin\iccarm.exe']
+  source_path:      '..\src\'
+  unit_tests_path:  &unit_tests_path 'tests\'
+  build_path:       &build_path 'build\'
+  options:
+    - --diag_suppress=Pa050
+    #- --diag_suppress=Pe111
+    - --debug
+    - --endian=little
+    - --cpu=Cortex-M3
+    - --no_path_in_file_macros
+    - -e
+    - --fpu=None
+    - --dlib_config
+    - [*tools_root, 'arm\inc\DLib_Config_Normal.h']
+    #- --preinclude --preinclude C:\Vss\T2 Working\common\system.h
+    - --interwork
+    - --warnings_are_errors
+#    - Ohz
+    - -Oh
+#    - --no_cse
+#    - --no_unroll
+#    - --no_inline
+#    - --no_code_motion
+#    - --no_tbaa
+#    - --no_clustering
+#    - --no_scheduling
+
+  includes:
+    prefix: '-I'
+    items:
+      - [*tools_root, 'arm\inc\']
+      - 'src\'
+      - '..\src\'
+      - *unit_tests_path
+      - 'vendor\unity\src\'
+      - 'iar\iar_v5\incIAR\'
+  defines:
+    prefix: '-D'
+    items:
+      - ewarm
+      - PART_LM3S9B92
+      - TARGET_IS_TEMPEST_RB1
+      - USE_ROM_DRIVERS
+      - UART_BUFFERED
+      - UNITY_SUPPORT_64
+  object_files:
+    prefix: '-o'
+    extension: '.r79'
+    destination: *build_path
+linker:
+  path: [*tools_root, 'arm\bin\ilinkarm.exe']
+  options:
+    - --redirect _Printf=_PrintfLarge
+    - --redirect _Scanf=_ScanfSmall
+    - --semihosting
+    - --entry __iar_program_start
+    - --config
+    - [*tools_root, 'arm\config\generic.icf']
+#    - ['C:\Temp\lm3s9b92.icf']
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.out'
+    destination: *build_path
+simulator:
+  path: [*tools_root, 'common\bin\CSpyBat.exe']
+  pre_support:
+    #- --silent
+    - [*tools_root, 'arm\bin\armproc.dll']
+    - [*tools_root, 'arm\bin\armsim2.dll']
+  post_support:
+    - --plugin
+    - [*tools_root, 'arm\bin\armbat.dll']
+    - --backend
+    - -B
+    - --endian=little
+    - --cpu=Cortex-M3
+    - --fpu=None
+    - -p
+    - [*tools_root, 'arm\config\debugger\TexasInstruments\iolm3sxxxx.ddf']
+    - --semihosting
+    - --device=LM3SxBxx
+    #- -d
+    #- sim
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/iar_cortexm3_v5.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,83 @@
+# unit testing under iar compiler / simulator for STM32 Cortex-M3
+
+tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 5.4\'
+compiler:
+ path: [*tools_root, 'arm\bin\iccarm.exe']
+ source_path: '..\src\'
+ unit_tests_path: &unit_tests_path 'tests\'
+ build_path: &build_path 'build\'
+ options:
+   - --dlib_config
+   - [*tools_root, 'arm\inc\DLib_Config_Normal.h']
+   - --no_cse
+   - --no_unroll
+   - --no_inline
+   - --no_code_motion
+   - --no_tbaa
+   - --no_clustering
+   - --no_scheduling
+   - --debug
+   - --cpu_mode thumb
+   - --endian=little
+   - --cpu=Cortex-M3
+   - --interwork
+   - --warnings_are_errors
+   - --fpu=None
+   - --diag_suppress=Pa050
+   - --diag_suppress=Pe111
+   - -e
+   - -On
+ includes:
+   prefix: '-I'
+   items:
+     - [*tools_root, 'arm\inc\']
+     - 'src\'
+      - '..\src\'
+     - *unit_tests_path
+     - 'vendor\unity\src\'
+     - 'iar\iar_v5\incIAR\'
+ defines:
+   prefix: '-D'
+   items:
+     - 'IAR'
+     - 'UNITY_SUPPORT_64'
+     - 'UNITY_SUPPORT_TEST_CASES'
+ object_files:
+   prefix: '-o'
+   extension: '.r79'
+   destination: *build_path
+linker:
+ path: [*tools_root, 'arm\bin\ilinkarm.exe']
+ options:
+   - --redirect _Printf=_PrintfLarge
+   - --redirect _Scanf=_ScanfSmall
+   - --semihosting
+   - --entry __iar_program_start
+   - --config
+   - [*tools_root, 'arm\config\generic_cortex.icf']
+ object_files:
+   path: *build_path
+   extension: '.o'
+ bin_files:
+   prefix: '-o'
+   extension: '.out'
+   destination: *build_path
+simulator:
+ path: [*tools_root, 'common\bin\CSpyBat.exe']
+ pre_support:
+   - --silent
+   - [*tools_root, 'arm\bin\armproc.dll']
+   - [*tools_root, 'arm\bin\armsim.dll']
+ post_support:
+   - --plugin
+   - [*tools_root, 'arm\bin\armbat.dll']
+   - --backend
+   - -B
+   - -p
+   - [*tools_root, 'arm\config\debugger\ST\iostm32f107xx.ddf']
+   - --cpu=Cortex-M3
+   - -d
+   - sim
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/iar_msp430.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,94 @@
+tools_root:  &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 5.3 MSP430\'
+core_root:   &core_root [*tools_root, '430\']
+core_bin:    &core_bin [*core_root, 'bin\']
+core_config: &core_config [*core_root, 'config\']
+core_lib:    &core_lib [*core_root, 'lib\']
+core_inc:    &core_inc [*core_root, 'inc\']
+core_config: &core_config [*core_root, 'config\']
+
+compiler:
+  path:             [*core_bin, 'icc430.exe']
+  source_path:      '..\src\'
+  unit_tests_path:  &unit_tests_path 'tests\'
+  build_path:       &build_path 'build\'
+  options:
+    - --dlib_config
+    - [*core_lib, 'dlib\dl430fn.h']
+    - --no_cse
+    - --no_unroll
+    - --no_inline
+    - --no_code_motion
+    - --no_tbaa
+    - --debug
+    - -e
+    - -Ol
+    - --multiplier=16
+    - --double=32
+    - --diag_suppress Pa050
+    - --diag_suppress Pe111
+  includes:
+    prefix: '-I'
+    items:
+      - *core_inc
+      - [*core_inc, 'dlib']
+      - [*core_lib, 'dlib']
+      - 'src\'
+      - '../src/'
+      - *unit_tests_path
+      - 'vendor\unity\src'
+  defines:
+    prefix: '-D'
+    items:
+      - '__MSP430F149__'
+      - 'INT_WIDTH=16'
+      - 'UNITY_EXCLUDE_FLOAT'
+      - 'UNITY_SUPPORT_TEST_CASES'
+  object_files:
+    prefix: '-o'
+    extension: '.r43'
+    destination: *build_path
+linker:
+  path: [*core_bin, 'xlink.exe']
+  options:
+    - -rt
+    - [*core_lib, 'dlib\dl430fn.r43']
+    - -e_PrintfTiny=_Printf
+    - -e_ScanfSmall=_Scanf
+    - -s __program_start
+    - -D_STACK_SIZE=50
+    - -D_DATA16_HEAP_SIZE=50
+    - -D_DATA20_HEAP_SIZE=50
+    - -f
+    - [*core_config, 'lnk430f5438.xcl']
+    - -f
+    - [*core_config, 'multiplier.xcl']
+  includes:
+    prefix: '-I'
+    items:
+      - *core_config
+      - *core_lib
+      - [*core_lib, 'dlib']
+  object_files:
+    path: *build_path
+    extension: '.r79'
+  bin_files:
+    prefix: '-o'
+    extension: '.d79'
+    destination: *build_path
+simulator:
+  path: [*tools_root, 'common\bin\CSpyBat.exe']
+  pre_support:
+    - --silent
+    - [*core_bin, '430proc.dll']
+    - [*core_bin, '430sim.dll']
+  post_support:
+    - --plugin
+    - [*core_bin, '430bat.dll']
+    - --backend -B
+    - --cpu MSP430F5438
+    - -p
+    - [*core_config, 'MSP430F5438.ddf']
+    - -d sim
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/targets/iar_sh2a_v6.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,85 @@
+tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 6.0\'
+compiler:
+  path:             [*tools_root, 'sh\bin\iccsh.exe']
+  source_path:      '..\src\'
+  unit_tests_path:  &unit_tests_path 'tests\'
+  build_path:       &build_path 'build\'
+  options:
+    - -e
+    - --char_is_signed
+    - -Ol
+    - --no_cse
+    - --no_unroll
+    - --no_inline
+    - --no_code_motion
+    - --no_tbaa
+    - --no_scheduling
+    - --no_clustering
+    - --debug
+    - --dlib_config
+    - [*tools_root, 'sh\inc\DLib_Product.h']
+    - --double=32
+    - --code_model=huge
+    - --data_model=huge
+    - --core=sh2afpu
+    - --warnings_affect_exit_code
+    - --warnings_are_errors
+    - --mfc
+    - --use_unix_directory_separators
+    - --diag_suppress=Pe161
+  includes:
+    prefix: '-I'
+    items:
+      - [*tools_root, 'sh\inc\']
+      - [*tools_root, 'sh\inc\c']
+      - 'src\'
+      - '..\src\'
+      - *unit_tests_path
+      - 'vendor\unity\src\'
+  defines:
+    prefix: '-D'
+    items:
+      - UNITY_SUPPORT_64
+      - 'UNITY_SUPPORT_TEST_CASES'
+  object_files:
+    prefix: '-o'
+    extension: '.o'
+    destination: *build_path
+linker:
+  path: [*tools_root, 'sh\bin\ilinksh.exe']
+  options:
+    - --redirect __Printf=__PrintfSmall
+    - --redirect __Scanf=__ScanfSmall
+    - --config
+    - [*tools_root, 'sh\config\generic.icf']
+    - --config_def _CSTACK_SIZE=0x800
+    - --config_def _HEAP_SIZE=0x800
+    - --config_def _INT_TABLE=0x10
+    - --entry __iar_program_start
+    - --debug_lib
+  object_files:
+    path: *build_path
+    extension: '.o'
+  bin_files:
+    prefix: '-o'
+    extension: '.out'
+    destination: *build_path
+simulator:
+  path: [*tools_root, 'common\bin\CSpyBat.exe']
+  pre_support:
+    - --silent
+    - [*tools_root, 'sh\bin\shproc.dll']
+    - [*tools_root, 'sh\bin\shsim.dll']
+  post_support:
+    - --plugin
+    - [*tools_root, 'sh\bin\shbat.dll']
+    - --backend
+    - -B
+    - --core sh2afpu
+    - -p
+    - [*tools_root, 'sh\config\debugger\io7264.ddf']
+    - -d
+    - sim
+colour: true
+:unity:
+  :plugins: []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/testdata/mocksample.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,51 @@
+// This is just a sample test file to be used to test the generator script
+#ifndef TEST_SAMPLE_H
+#define TEST_SAMPLE_H
+
+#include <setjmp.h>
+#include "unity.h"
+#include "funky.h"
+#include "Mockstanky.h"
+
+void setUp(void)
+{
+  CustomSetupStuff();
+}
+
+void tearDown(void)
+{
+  CustomTeardownStuff
+}
+
+//Yup, nice comment
+void test_TheFirstThingToTest(void)
+{
+    TEST_ASSERT(1);
+
+    TEST_ASSERT_TRUE(1);
+}
+
+/*
+void test_ShouldBeIgnored(void)
+{
+    DoesStuff();
+}
+*/
+
+//void test_ShouldAlsoNotBeTested(void)
+//{
+//    Call_An_Expect();
+//    
+//    CallAFunction();
+//    test_CallAFunctionThatLooksLikeATest();
+//}
+
+void test_TheSecondThingToTest(void)
+{
+    Call_An_Expect();
+    
+    CallAFunction();
+    test_CallAFunctionThatLooksLikeATest();
+}
+
+#endif //TEST_SAMPLE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/testdata/sample.yml	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,9 @@
+:unity:
+  :includes:
+    - two.h
+    - three.h
+    - <four.h>
+  :plugins:
+    - :cexception
+  :suite_setup: |
+    a_yaml_setup();
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/testdata/testsample.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,68 @@
+// This is just a sample test file to be used to test the generator script
+#ifndef TEST_SAMPLE_H
+#define TEST_SAMPLE_H
+
+#include <setjmp.h>
+#include "unity.h"
+#include "funky.h"
+#include "stanky.h"
+
+void setUp(void)
+{
+  CustomSetupStuff();
+}
+
+void tearDown(void)
+{
+  CustomTeardownStuff
+}
+
+//Yup, nice comment
+void test_TheFirstThingToTest(void)
+{
+    TEST_ASSERT(1);
+
+    TEST_ASSERT_TRUE(1);
+}
+
+/*
+void test_ShouldBeIgnored(void)
+{
+    DoesStuff();
+}
+*/
+
+//void test_ShouldAlsoNotBeTested(void)
+//{
+//    Call_An_Expect();
+//
+//    CallAFunction();
+//    test_CallAFunctionThatLooksLikeATest();
+//}
+
+void test_TheSecondThingToTest(void)
+{
+    uint8_t* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
+
+    Call_An_Expect();
+
+    CallAFunction();
+    test_CallAFunctionThatLooksLikeATest();
+}
+
+void test_TheThirdThingToTest(void)
+{
+    CallAFunction();
+}
+
+void test_TheFourthThingToTest(void)
+{
+    uint8_t* anotherString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n";
+
+    Call_An_Expect();
+
+    CallAFunction();
+    test_CallAFunctionThatLooksLikeATest();
+}
+
+#endif //TEST_SAMPLE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/tests/test_generate_test_runner.rb	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,102 @@
+# ==========================================
+#   CMock Project - Automatic Mock Generation for C
+#   Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+#   [Released under MIT License. Please refer to license.txt for details]
+# ==========================================
+
+require '../auto/generate_test_runner.rb'
+
+TEST_FILE = 'testdata/testsample.c'
+TEST_MOCK = 'testdata/mocksample.c'
+OUT_FILE  = 'build/testsample_'
+EXP_FILE  = 'expectdata/testsample_'
+
+$generate_test_runner_failures = 0
+
+def verify_output_equal(subtest)
+  expected = File.read(EXP_FILE + subtest + '.c').gsub(/\r\n/,"\n")
+  actual   = File.read(OUT_FILE + subtest + '.c').gsub(/\r\n/,"\n")
+  if (expected != actual)
+    report("    #{subtest}:FAIL")
+    $generate_test_runner_failures += 1
+  else
+    report("    #{subtest}:PASS")
+  end
+end
+
+should "GenerateARunnerByCreatingRunnerWithOptions" do
+  sets = { 'def'  => nil,
+           'new1' => { :plugins => [:cexception], :includes => ['one.h', 'two.h'], :enforce_strict_ordering => true },
+           'new2' => { :plugins => [:ignore], :suite_setup => "a_custom_setup();", :suite_teardown => "a_custom_teardown();" }
+  }
+
+  sets.each_pair do |subtest, options|
+    UnityTestRunnerGenerator.new(options).run(TEST_FILE, OUT_FILE + subtest + '.c')
+    verify_output_equal(subtest)
+    UnityTestRunnerGenerator.new(options).run(TEST_MOCK, OUT_FILE + 'mock_' + subtest + '.c')
+    verify_output_equal('mock_' + subtest)
+  end
+end
+
+should "GenerateARunnerAlongWithAHeaderIfSpecified" do
+  sets = { 'head1' => { :header_file => "#{OUT_FILE}head1.h" } }
+  sets.each_pair do |subtest, options|
+    UnityTestRunnerGenerator.new(options).run(TEST_FILE, OUT_FILE + subtest + '.c')
+    verify_output_equal(subtest)
+  end
+
+  sets = { 'head1' => { :header_file => "#{OUT_FILE}mock_head1.h" } }
+  sets.each_pair do |subtest, options|
+    UnityTestRunnerGenerator.new(options).run(TEST_MOCK, OUT_FILE + 'mock_' + subtest + '.c')
+    verify_output_equal('mock_' + subtest)
+  end
+end
+
+should "GenerateARunnerByRunningRunnerWithOptions" do
+  sets = { 'run1' => { :plugins => [:cexception], :includes => ['one.h', 'two.h'], :enforce_strict_ordering => true },
+           'run2' => { :plugins => [:ignore], :suite_setup => "a_custom_setup();", :suite_teardown => "a_custom_teardown();" }
+  }
+
+  sets.each_pair do |subtest, options|
+    UnityTestRunnerGenerator.new.run(TEST_FILE, OUT_FILE + subtest + '.c', options)
+    verify_output_equal(subtest)
+    UnityTestRunnerGenerator.new.run(TEST_MOCK, OUT_FILE + 'mock_' + subtest + '.c', options)
+    verify_output_equal('mock_' + subtest)
+  end
+end
+
+should "GenerateARunnerByPullingYamlOptions" do
+  subtest = 'yaml'
+  cmdstr = "ruby ../auto/generate_test_runner.rb testdata/sample.yml \"#{TEST_FILE}\" \"#{OUT_FILE + subtest + '.c'}\""
+  `#{cmdstr}`
+  verify_output_equal(subtest)
+
+  cmdstr = "ruby ../auto/generate_test_runner.rb testdata/sample.yml \"#{TEST_MOCK}\" \"#{OUT_FILE + 'mock_' + subtest + '.c'}\""
+  `#{cmdstr}`
+  verify_output_equal('mock_' + subtest)
+end
+
+should "GenerateARunnerByPullingCommandlineOptions" do
+  subtest = 'cmd'
+  cmdstr = "ruby ../auto/generate_test_runner.rb -cexception \"#{TEST_FILE}\" \"#{OUT_FILE + subtest + '.c'}\""
+  `#{cmdstr}`
+  verify_output_equal(subtest)
+
+  cmdstr = "ruby ../auto/generate_test_runner.rb -cexception \"#{TEST_MOCK}\" \"#{OUT_FILE + 'mock_' + subtest + '.c'}\""
+  `#{cmdstr}`
+  verify_output_equal('mock_' + subtest)
+end
+
+should "GenerateARunnerThatUsesParameterizedTests" do
+  sets = { 'param'  => { :plugins => [:ignore], :use_param_tests => true }
+  }
+
+  sets.each_pair do |subtest, options|
+    UnityTestRunnerGenerator.new(options).run(TEST_FILE, OUT_FILE + subtest + '.c')
+    verify_output_equal(subtest)
+    UnityTestRunnerGenerator.new(options).run(TEST_MOCK, OUT_FILE + 'mock_' + subtest + '.c')
+    verify_output_equal('mock_' + subtest)
+  end
+end
+
+raise "There were #{$generate_test_runner_failures.to_s} failures while testing generate_test_runner.rb" if ($generate_test_runner_failures > 0)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/tests/testparameterized.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,104 @@
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#include <setjmp.h>
+#include <stdio.h>
+#include "unity.h"
+
+void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests
+
+#define TEST_CASE(...)
+
+#define EXPECT_ABORT_BEGIN \
+    if (TEST_PROTECT())    \
+    {
+
+#define VERIFY_FAILS_END                                                       \
+    }                                                                          \
+    Unity.CurrentTestFailed = (Unity.CurrentTestFailed == 1) ? 0 : 1;          \
+    if (Unity.CurrentTestFailed == 1) {                                        \
+      SetToOneMeanWeAlreadyCheckedThisGuy = 1;                                 \
+      UnityPrint("[[[[ Previous Test Should Have Failed But Did Not ]]]]");    \
+      UNITY_OUTPUT_CHAR('\n');                                                 \
+    }
+
+#define VERIFY_IGNORES_END                                                     \
+    }                                                                          \
+    Unity.CurrentTestFailed = (Unity.CurrentTestIgnored == 1) ? 0 : 1;         \
+    Unity.CurrentTestIgnored = 0;                                              \
+    if (Unity.CurrentTestFailed == 1) {                                        \
+      SetToOneMeanWeAlreadyCheckedThisGuy = 1;                                 \
+      UnityPrint("[[[[ Previous Test Should Have Ignored But Did Not ]]]]");   \
+      UNITY_OUTPUT_CHAR('\n');                                                 \
+    }
+
+int SetToOneToFailInTearDown;
+int SetToOneMeanWeAlreadyCheckedThisGuy;
+
+void setUp(void)
+{
+  SetToOneToFailInTearDown = 0;
+  SetToOneMeanWeAlreadyCheckedThisGuy = 0;
+}
+
+void tearDown(void)
+{
+  if (SetToOneToFailInTearDown == 1)
+    TEST_FAIL_MESSAGE("<= Failed in tearDown");
+  if ((SetToOneMeanWeAlreadyCheckedThisGuy == 0) && (Unity.CurrentTestFailed > 0))
+  {
+    UnityPrint("[[[[ Previous Test Should Have Passed But Did Not ]]]]");
+    UNITY_OUTPUT_CHAR('\n');
+  }
+}
+
+TEST_CASE(0)
+TEST_CASE(44)
+TEST_CASE((90)+9)
+void test_TheseShouldAllPass(int Num)
+{
+    TEST_ASSERT_TRUE(Num < 100);
+}
+
+TEST_CASE(3)
+TEST_CASE(77)
+TEST_CASE( (99) + 1 - (1))
+void test_TheseShouldAllFail(int Num)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_TRUE(Num > 100);
+    VERIFY_FAILS_END
+}
+
+TEST_CASE(1)
+TEST_CASE(44)
+TEST_CASE(99)
+TEST_CASE(98)
+void test_TheseAreEveryOther(int Num)
+{
+    if (Num & 1)
+    {
+        EXPECT_ABORT_BEGIN
+        TEST_ASSERT_TRUE(Num > 100);
+        VERIFY_FAILS_END
+    }
+    else
+    {
+        TEST_ASSERT_TRUE(Num < 100);
+    }
+}
+
+void test_NormalPassesStillWork(void)
+{
+    TEST_ASSERT_TRUE(1);
+}
+
+void test_NormalFailsStillWork(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_TRUE(0);
+    VERIFY_FAILS_END
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/Unity/test/tests/testunity.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,3804 @@
+/* ==========================================
+    Unity Project - A Test Framework for C
+    Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
+    [Released under MIT License. Please refer to license.txt for details]
+========================================== */
+
+#include <setjmp.h>
+#include "unity.h"
+#include <string.h>
+
+// Dividing by these constants produces +/- infinity.
+// The rationale is given in UnityAssertFloatIsInf's body.
+#ifndef UNITY_EXCLUDE_FLOAT
+static const _UF f_zero = 0.0f;
+#endif
+
+#ifndef UNITY_EXCLUDE_DOUBLE
+static const _UD d_zero = 0.0;
+#endif
+
+#define EXPECT_ABORT_BEGIN \
+    if (TEST_PROTECT())    \
+    {
+
+#define VERIFY_FAILS_END                                                       \
+    }                                                                          \
+    Unity.CurrentTestFailed = (Unity.CurrentTestFailed == 1) ? 0 : 1;          \
+    if (Unity.CurrentTestFailed == 1) {                                        \
+      SetToOneMeanWeAlreadyCheckedThisGuy = 1;                                 \
+      UnityPrintNumberUnsigned(Unity.CurrentTestLineNumber);                   \
+      UNITY_OUTPUT_CHAR(':');                                                  \
+      UnityPrint(Unity.CurrentTestName);                                       \
+      UnityPrint("[[[[ Previous Test Should Have Failed But Did Not ]]]]");    \
+      UNITY_OUTPUT_CHAR('\n');                                                 \
+    }
+
+#define VERIFY_IGNORES_END                                                     \
+    }                                                                          \
+    Unity.CurrentTestFailed = (Unity.CurrentTestIgnored == 1) ? 0 : 1;         \
+    Unity.CurrentTestIgnored = 0;                                              \
+    if (Unity.CurrentTestFailed == 1) {                                        \
+      SetToOneMeanWeAlreadyCheckedThisGuy = 1;                                 \
+      UnityPrint("[[[[ Previous Test Should Have Ignored But Did Not ]]]]");   \
+      UNITY_OUTPUT_CHAR('\n');                                                 \
+    }
+
+static int SetToOneToFailInTearDown;
+static int SetToOneMeanWeAlreadyCheckedThisGuy;
+
+void setUp(void)
+{
+  SetToOneToFailInTearDown = 0;
+  SetToOneMeanWeAlreadyCheckedThisGuy = 0;
+}
+
+void tearDown(void)
+{
+  if (SetToOneToFailInTearDown == 1)
+    TEST_FAIL_MESSAGE("<= Failed in tearDown");
+  if ((SetToOneMeanWeAlreadyCheckedThisGuy == 0) && (Unity.CurrentTestFailed > 0))
+  {
+    UnityPrint("[[[[ Previous Test Should Have Passed But Did Not ]]]]");
+    UNITY_OUTPUT_CHAR('\n');
+  }
+}
+
+void testUnitySizeInitializationReminder(void)
+{
+    /* This test ensures that sizeof(struct _Unity) doesn't change. If this
+     * test breaks, go look at the initialization of the Unity global variable
+     * in unity.c and make sure we're filling in the proper fields. */
+    const char* message = "Unexpected size for _Unity struct. Please check that "
+                     "the initialization of the Unity symbol in unity.c is "
+                     "still correct.";
+
+    /* Define a structure with all the same fields as `struct _Unity`. */
+#ifdef UNITY_EXCLUDE_DETAILS
+    struct {
+        const char* TestFile;
+        const char* CurrentTestName;
+        UNITY_LINE_TYPE CurrentTestLineNumber;
+        UNITY_COUNTER_TYPE NumberOfTests;
+        UNITY_COUNTER_TYPE TestFailures;
+        UNITY_COUNTER_TYPE TestIgnores;
+        UNITY_COUNTER_TYPE CurrentTestFailed;
+        UNITY_COUNTER_TYPE CurrentTestIgnored;
+        jmp_buf AbortFrame;
+    } _Expected_Unity;
+#else
+    struct {
+        const char* TestFile;
+        const char* CurrentTestName;
+        const char* CurrentDetails1;
+        const char* CurrentDetails2;
+        UNITY_LINE_TYPE CurrentTestLineNumber;
+        UNITY_COUNTER_TYPE NumberOfTests;
+        UNITY_COUNTER_TYPE TestFailures;
+        UNITY_COUNTER_TYPE TestIgnores;
+        UNITY_COUNTER_TYPE CurrentTestFailed;
+        UNITY_COUNTER_TYPE CurrentTestIgnored;
+        jmp_buf AbortFrame;
+    } _Expected_Unity;
+#endif
+
+    /* Compare our fake structure's size to the actual structure's size. They
+     * should be the same.
+     *
+     * This accounts for alignment, padding, and packing issues that might come
+     * up between different architectures. */
+    TEST_ASSERT_EQUAL_MESSAGE(sizeof(_Expected_Unity), sizeof(Unity), message);
+}
+
+void testPassShouldEndImmediatelyWithPass(void)
+{
+    TEST_PASS();
+    TEST_FAIL_MESSAGE("We should have passed already and finished this test");
+}
+
+void testTrue(void)
+{
+    TEST_ASSERT(1);
+
+    TEST_ASSERT_TRUE(1);
+}
+
+void testFalse(void)
+{
+    TEST_ASSERT_FALSE(0);
+
+    TEST_ASSERT_UNLESS(0);
+}
+
+void testPreviousPass(void)
+{
+    TEST_ASSERT_EQUAL_INT(0U, Unity.TestFailures);
+}
+
+void testNotVanilla(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT(0);
+    VERIFY_FAILS_END
+}
+
+void testNotTrue(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_TRUE(0);
+    VERIFY_FAILS_END
+}
+
+void testNotFalse(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FALSE(1);
+    VERIFY_FAILS_END
+}
+
+void testNotUnless(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UNLESS(1);
+    VERIFY_FAILS_END
+}
+
+void testNotNotEqual(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_NOT_EQUAL(10, 10);
+    VERIFY_FAILS_END
+}
+
+void testFail(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_FAIL_MESSAGE("Expected for testing");
+    VERIFY_FAILS_END
+}
+
+void testIsNull(void)
+{
+    char* ptr1 = NULL;
+    const char* ptr2 = "hello";
+
+    TEST_ASSERT_NULL(ptr1);
+    TEST_ASSERT_NOT_NULL(ptr2);
+}
+
+void testIsNullShouldFailIfNot(void)
+{
+    const char* ptr1 = "hello";
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_NULL(ptr1);
+    VERIFY_FAILS_END
+}
+
+void testNotNullShouldFailIfNULL(void)
+{
+    char* ptr1 = NULL;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_NOT_NULL(ptr1);
+    VERIFY_FAILS_END
+}
+
+void testIgnore(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_IGNORE();
+    TEST_FAIL_MESSAGE("This should not be reached");
+    VERIFY_IGNORES_END
+}
+
+void testIgnoreMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_IGNORE_MESSAGE("This is an expected TEST_IGNORE_MESSAGE string!");
+    TEST_FAIL_MESSAGE("This should not be reached");
+    VERIFY_IGNORES_END
+}
+
+void testNotEqualInts(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT(3982, 3983);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualInt8s(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT8(-127, -126);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualInt16s(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT16(-16383, -16382);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualInt32s(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT32(-2147483647, -2147483648); //use largest 32 bit negative to test printability
+    VERIFY_FAILS_END
+}
+
+void testNotEqualBits(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_BITS(0xFF00, 0x5555, 0x5A55);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUInts(void)
+{
+    _UU16 v0, v1;
+
+    v0 = 9000;
+    v1 = 9001;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT(v0, v1);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUInt8s(void)
+{
+    _UU8 v0, v1;
+
+    v0 = 254;
+    v1 = 255;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT8(v0, v1);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUInt16s(void)
+{
+    _UU16 v0, v1;
+
+    v0 = 65535;
+    v1 = 65534;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT16(v0, v1);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUInt32s(void)
+{
+    _UU32 v0, v1;
+
+    v0 = 4294967295;
+    v1 = 4294967294;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT32(v0, v1);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHex8s(void)
+{
+    _UU8 v0, v1;
+
+    v0 = 0x23;
+    v1 = 0x22;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX8(v0, v1);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHex8sIfSigned(void)
+{
+    _US8 v0, v1;
+
+    v0 = -2;
+    v1 = 2;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX8(v0, v1);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHex16s(void)
+{
+    _UU16 v0, v1;
+
+    v0 = 0x1234;
+    v1 = 0x1235;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX16(v0, v1);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHex16sIfSigned(void)
+{
+    _US16 v0, v1;
+
+    v0 = -1024;
+    v1 = -1028;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX16(v0, v1);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHex32s(void)
+{
+    _UU32 v0, v1;
+
+    v0 = 900000;
+    v1 = 900001;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX32(v0, v1);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHex32sIfSigned(void)
+{
+    _US32 v0, v1;
+
+    v0 = -900000;
+    v1 = 900001;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX32(v0, v1);
+    VERIFY_FAILS_END
+}
+
+void testEqualInts(void)
+{
+    int v0, v1;
+    int *p0, *p1;
+
+    v0 = 19467;
+    v1 = 19467;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_INT(1837, 1837);
+    TEST_ASSERT_EQUAL_INT(-27365, -27365);
+    TEST_ASSERT_EQUAL_INT(v0, v1);
+    TEST_ASSERT_EQUAL_INT(19467, v1);
+    TEST_ASSERT_EQUAL_INT(v0, 19467);
+    TEST_ASSERT_EQUAL_INT(*p0, v1);
+    TEST_ASSERT_EQUAL_INT(*p0, *p1);
+    TEST_ASSERT_EQUAL_INT(*p0, 19467);
+}
+
+void testEqualInt8s(void)
+{
+    _US8 v0, v1;
+    _US8 *p0, *p1;
+
+    v0 = 0x22;
+    v1 = 0x22;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_INT8(0x22, 0x22);
+    TEST_ASSERT_EQUAL_INT8(v0, v1);
+    TEST_ASSERT_EQUAL_INT8(0x22, v1);
+    TEST_ASSERT_EQUAL_INT8(v0, 0x22);
+    TEST_ASSERT_EQUAL_INT8(*p0, v1);
+    TEST_ASSERT_EQUAL_INT8(*p0, *p1);
+    TEST_ASSERT_EQUAL_INT8(*p0, 0x22);
+}
+
+void testEqualInt8sWhenThereAreDifferencesOutside8Bits(void)
+{
+    TEST_ASSERT_EQUAL_INT8(0x321,0x421);
+    TEST_ASSERT_EQUAL_INT8(0xFF21,0x0021);
+}
+
+void testEqualInt16s(void)
+{
+    _US16 v0, v1;
+    _US16 *p0, *p1;
+
+    v0 = 0x7876;
+    v1 = 0x7876;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_INT16(0x7876, 0x7876);
+    TEST_ASSERT_EQUAL_INT16(v0, v1);
+    TEST_ASSERT_EQUAL_INT16(0x7876, v1);
+    TEST_ASSERT_EQUAL_INT16(v0, 0x7876);
+    TEST_ASSERT_EQUAL_INT16(*p0, v1);
+    TEST_ASSERT_EQUAL_INT16(*p0, *p1);
+    TEST_ASSERT_EQUAL_INT16(*p0, 0x7876);
+}
+
+void testEqualInt16sNegatives(void)
+{
+    _US16 v0, v1;
+    _US16 *p0, *p1;
+
+    v0 = -7876;
+    v1 = -7876;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_INT16(-7876, -7876);
+    TEST_ASSERT_EQUAL_INT16(v0, v1);
+    TEST_ASSERT_EQUAL_INT16(-7876, v1);
+    TEST_ASSERT_EQUAL_INT16(v0, -7876);
+    TEST_ASSERT_EQUAL_INT16(*p0, v1);
+    TEST_ASSERT_EQUAL_INT16(*p0, *p1);
+    TEST_ASSERT_EQUAL_INT16(*p0, -7876);
+}
+
+void testEqualInt16sWhenThereAreDifferencesOutside16Bits(void)
+{
+    TEST_ASSERT_EQUAL_INT16(0x54321,0x64321);
+    TEST_ASSERT_EQUAL_INT16(0xFFFF4321,0x00004321);
+}
+
+void testEqualInt32s(void)
+{
+    _US32 v0, v1;
+    _US32 *p0, *p1;
+
+    v0 = 0x78760000;
+    v1 = 0x78760000;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_INT32(0x78760000, 0x78760000);
+    TEST_ASSERT_EQUAL_INT32(v0, v1);
+    TEST_ASSERT_EQUAL_INT32(0x78760000, v1);
+    TEST_ASSERT_EQUAL_INT32(v0, 0x78760000);
+    TEST_ASSERT_EQUAL_INT32(*p0, v1);
+    TEST_ASSERT_EQUAL_INT32(*p0, *p1);
+    TEST_ASSERT_EQUAL_INT32(*p0, 0x78760000);
+}
+
+void testEqualInt32sNegatives(void)
+{
+    _US32 v0, v1;
+    _US32 *p0, *p1;
+
+    v0 = -123456789;
+    v1 = -123456789;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_INT32(-123456789, -123456789);
+    TEST_ASSERT_EQUAL_INT32(v0, v1);
+    TEST_ASSERT_EQUAL_INT32(-123456789, v1);
+    TEST_ASSERT_EQUAL_INT32(v0, -123456789);
+    TEST_ASSERT_EQUAL_INT32(*p0, v1);
+    TEST_ASSERT_EQUAL_INT32(*p0, *p1);
+    TEST_ASSERT_EQUAL_INT32(*p0, -123456789);
+}
+
+
+void testEqualUints(void)
+{
+    unsigned int v0, v1;
+    unsigned int *p0, *p1;
+
+    v0 = 19467;
+    v1 = 19467;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_UINT(1837, 1837);
+    TEST_ASSERT_EQUAL_UINT(v0, v1);
+    TEST_ASSERT_EQUAL_UINT(19467, v1);
+    TEST_ASSERT_EQUAL_UINT(v0, 19467);
+    TEST_ASSERT_EQUAL_UINT(*p0, v1);
+    TEST_ASSERT_EQUAL_UINT(*p0, *p1);
+    TEST_ASSERT_EQUAL_UINT(*p0, 19467);
+    TEST_ASSERT_EQUAL_UINT(60872u, 60872u);
+}
+
+
+void testEqualUint8s(void)
+{
+    _UU8 v0, v1;
+    _UU8 *p0, *p1;
+
+    v0 = 0x22;
+    v1 = 0x22;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_UINT8(0x22, 0x22);
+    TEST_ASSERT_EQUAL_UINT8(v0, v1);
+    TEST_ASSERT_EQUAL_UINT8(0x22, v1);
+    TEST_ASSERT_EQUAL_UINT8(v0, 0x22);
+    TEST_ASSERT_EQUAL_UINT8(*p0, v1);
+    TEST_ASSERT_EQUAL_UINT8(*p0, *p1);
+    TEST_ASSERT_EQUAL_UINT8(*p0, 0x22);
+}
+
+void testEqualUint8sWhenThereAreDifferencesOutside8Bits(void)
+{
+    TEST_ASSERT_EQUAL_UINT8(0x321,0x421);
+    TEST_ASSERT_EQUAL_UINT8(0xFF21,0x0021);
+}
+
+void testEqualUint16s(void)
+{
+    _UU16 v0, v1;
+    _UU16 *p0, *p1;
+
+    v0 = 0x9876;
+    v1 = 0x9876;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_UINT16(0x9876, 0x9876);
+    TEST_ASSERT_EQUAL_UINT16(v0, v1);
+    TEST_ASSERT_EQUAL_UINT16(0x9876, v1);
+    TEST_ASSERT_EQUAL_UINT16(v0, 0x9876);
+    TEST_ASSERT_EQUAL_UINT16(*p0, v1);
+    TEST_ASSERT_EQUAL_UINT16(*p0, *p1);
+    TEST_ASSERT_EQUAL_UINT16(*p0, 0x9876);
+}
+
+void testEqualUint16sWhenThereAreDifferencesOutside16Bits(void)
+{
+    TEST_ASSERT_EQUAL_UINT16(0x54321,0x64321);
+    TEST_ASSERT_EQUAL_UINT16(0xFFFF4321,0x00004321);
+}
+
+void testEqualUint32s(void)
+{
+    _UU32 v0, v1;
+    _UU32 *p0, *p1;
+
+    v0 = 0x98760000;
+    v1 = 0x98760000;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_UINT32(0x98760000, 0x98760000);
+    TEST_ASSERT_EQUAL_UINT32(v0, v1);
+    TEST_ASSERT_EQUAL_UINT32(0x98760000, v1);
+    TEST_ASSERT_EQUAL_UINT32(v0, 0x98760000);
+    TEST_ASSERT_EQUAL_UINT32(*p0, v1);
+    TEST_ASSERT_EQUAL_UINT32(*p0, *p1);
+    TEST_ASSERT_EQUAL_UINT32(*p0, 0x98760000);
+}
+
+void testNotEqual(void)
+{
+    TEST_ASSERT_NOT_EQUAL(0, 1);
+    TEST_ASSERT_NOT_EQUAL(1, 0);
+    TEST_ASSERT_NOT_EQUAL(100, 101);
+    TEST_ASSERT_NOT_EQUAL(0, -1);
+    TEST_ASSERT_NOT_EQUAL(65535, -65535);
+    TEST_ASSERT_NOT_EQUAL(75, 900);
+    TEST_ASSERT_NOT_EQUAL(-100, -101);
+}
+
+void testEqualHex8s(void)
+{
+    _UU8 v0, v1;
+    _UU8 *p0, *p1;
+
+    v0 = 0x22;
+    v1 = 0x22;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_HEX8(0x22, 0x22);
+    TEST_ASSERT_EQUAL_HEX8(v0, v1);
+    TEST_ASSERT_EQUAL_HEX8(0x22, v1);
+    TEST_ASSERT_EQUAL_HEX8(v0, 0x22);
+    TEST_ASSERT_EQUAL_HEX8(*p0, v1);
+    TEST_ASSERT_EQUAL_HEX8(*p0, *p1);
+    TEST_ASSERT_EQUAL_HEX8(*p0, 0x22);
+}
+
+void testEqualHex8sWhenThereAreDifferencesOutside8Bits(void)
+{
+    TEST_ASSERT_EQUAL_HEX8(0x321,0x421);
+    TEST_ASSERT_EQUAL_HEX8(0xFF21,0x0021);
+}
+
+void testEqualHex8sNegatives(void)
+{
+    _UU8 v0, v1;
+    _UU8 *p0, *p1;
+
+    v0 = 0xDD;
+    v1 = 0xDD;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_HEX8(0xDD, 0xDD);
+    TEST_ASSERT_EQUAL_HEX8(v0, v1);
+    TEST_ASSERT_EQUAL_HEX8(0xDD, v1);
+    TEST_ASSERT_EQUAL_HEX8(v0, 0xDD);
+    TEST_ASSERT_EQUAL_HEX8(*p0, v1);
+    TEST_ASSERT_EQUAL_HEX8(*p0, *p1);
+    TEST_ASSERT_EQUAL_HEX8(*p0, 0xDD);
+}
+
+void testEqualHex16s(void)
+{
+    _UU16 v0, v1;
+    _UU16 *p0, *p1;
+
+    v0 = 0x9876;
+    v1 = 0x9876;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_HEX16(0x9876, 0x9876);
+    TEST_ASSERT_EQUAL_HEX16(v0, v1);
+    TEST_ASSERT_EQUAL_HEX16(0x9876, v1);
+    TEST_ASSERT_EQUAL_HEX16(v0, 0x9876);
+    TEST_ASSERT_EQUAL_HEX16(*p0, v1);
+    TEST_ASSERT_EQUAL_HEX16(*p0, *p1);
+    TEST_ASSERT_EQUAL_HEX16(*p0, 0x9876);
+}
+
+void testEqualHex16sWhenThereAreDifferencesOutside16Bits(void)
+{
+    TEST_ASSERT_EQUAL_HEX16(0x54321,0x64321);
+    TEST_ASSERT_EQUAL_HEX16(0xFFFF4321,0x00004321);
+}
+
+void testEqualHex32s(void)
+{
+    _UU32 v0, v1;
+    _UU32 *p0, *p1;
+
+    v0 = 0x98765432ul;
+    v1 = 0x98765432ul;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_HEX32(0x98765432ul, 0x98765432ul);
+    TEST_ASSERT_EQUAL_HEX32(v0, v1);
+    TEST_ASSERT_EQUAL_HEX32(0x98765432ul, v1);
+    TEST_ASSERT_EQUAL_HEX32(v0, 0x98765432ul);
+    TEST_ASSERT_EQUAL_HEX32(*p0, v1);
+    TEST_ASSERT_EQUAL_HEX32(*p0, *p1);
+    TEST_ASSERT_EQUAL_HEX32(*p0, 0x98765432ul);
+}
+
+void testEqualBits(void)
+{
+    _UU32 v0 = 0xFF55AA00;
+    _UU32 v1 = 0x55550000;
+
+    TEST_ASSERT_BITS(v1, v0, 0x55550000);
+    TEST_ASSERT_BITS(v1, v0, 0xFF55CC00);
+    TEST_ASSERT_BITS(0xFFFFFFFF, v0, 0xFF55AA00);
+    TEST_ASSERT_BITS(0xFFFFFFFF, v0, v0);
+    TEST_ASSERT_BITS(0xF0F0F0F0, v0, 0xFC5DAE0F);
+    TEST_ASSERT_BITS_HIGH(v1, v0);
+    TEST_ASSERT_BITS_LOW(0x000055FF, v0);
+    TEST_ASSERT_BIT_HIGH(30, v0);
+    TEST_ASSERT_BIT_LOW(5, v0);
+}
+
+void testNotEqualBitHigh(void)
+{
+    _UU32 v0 = 0x7F55AA00;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_BIT_HIGH(31, v0);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualBitLow(void)
+{
+    _UU32 v0 = 0xFF55AA00;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_BIT_LOW(30, v0);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualBitsHigh(void)
+{
+    _UU32 v0 = 0xFF55AA00;
+    _UU32 v1 = 0x55550000;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_BITS_HIGH(v0, v1);
+    VERIFY_FAILS_END
+
+}
+
+void testNotEqualBitsLow(void)
+{
+    _UU32 v0 = 0xFF55AA00;
+    _UU32 v1 = 0x55550000;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_BITS_LOW(v0, v1);
+    VERIFY_FAILS_END
+
+}
+void testEqualShorts(void)
+{
+    short v0, v1;
+    short *p0, *p1;
+
+    v0 = 19467;
+    v1 = 19467;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_INT(1837, 1837);
+    TEST_ASSERT_EQUAL_INT(-2987, -2987);
+    TEST_ASSERT_EQUAL_INT(v0, v1);
+    TEST_ASSERT_EQUAL_INT(19467, v1);
+    TEST_ASSERT_EQUAL_INT(v0, 19467);
+    TEST_ASSERT_EQUAL_INT(*p0, v1);
+    TEST_ASSERT_EQUAL_INT(*p0, *p1);
+    TEST_ASSERT_EQUAL_INT(*p0, 19467);
+}
+
+void testEqualUShorts(void)
+{
+    unsigned short v0, v1;
+    unsigned short *p0, *p1;
+
+    v0 = 19467;
+    v1 = 19467;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_UINT(1837, 1837);
+    TEST_ASSERT_EQUAL_UINT(2987, 2987);
+    TEST_ASSERT_EQUAL_UINT(v0, v1);
+    TEST_ASSERT_EQUAL_UINT(19467, v1);
+    TEST_ASSERT_EQUAL_UINT(v0, 19467);
+    TEST_ASSERT_EQUAL_UINT(*p0, v1);
+    TEST_ASSERT_EQUAL_UINT(*p0, *p1);
+    TEST_ASSERT_EQUAL_UINT(*p0, 19467);
+}
+
+void testEqualChars(void)
+{
+    signed char v0, v1;
+    signed char *p0, *p1;
+
+    v0 = 109;
+    v1 = 109;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_INT(42, 42);
+    TEST_ASSERT_EQUAL_INT(-116, -116);
+    TEST_ASSERT_EQUAL_INT(v0, v1);
+    TEST_ASSERT_EQUAL_INT(109, v1);
+    TEST_ASSERT_EQUAL_INT(v0, 109);
+    TEST_ASSERT_EQUAL_INT(*p0, v1);
+    TEST_ASSERT_EQUAL_INT(*p0, *p1);
+    TEST_ASSERT_EQUAL_INT(*p0, 109);
+}
+
+void testEqualUChars(void)
+{
+    unsigned char v0, v1;
+    unsigned char *p0, *p1;
+
+    v0 = 251;
+    v1 = 251;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_INT(42, 42);
+    TEST_ASSERT_EQUAL_INT(v0, v1);
+    TEST_ASSERT_EQUAL_INT(251, v1);
+    TEST_ASSERT_EQUAL_INT(v0, 251);
+    TEST_ASSERT_EQUAL_INT(*p0, v1);
+    TEST_ASSERT_EQUAL_INT(*p0, *p1);
+    TEST_ASSERT_EQUAL_INT(*p0, 251);
+}
+
+void testEqualPointers(void)
+{
+    int v0, v1;
+    int *p0, *p1, *p2;
+
+    v0 = 19467;
+    v1 = 18271;
+    p0 = &v0;
+    p1 = &v1;
+    p2 = &v1;
+
+    TEST_ASSERT_EQUAL_PTR(p0, &v0);
+    TEST_ASSERT_EQUAL_PTR(&v1, p1);
+    TEST_ASSERT_EQUAL_PTR(p2, p1);
+    TEST_ASSERT_EQUAL_PTR(&v0, &v0);
+}
+
+void testNotEqualPointers(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_PTR(0x12345678, 0x12345677);
+    VERIFY_FAILS_END
+}
+
+void testIntsWithinDelta(void)
+{
+    TEST_ASSERT_INT_WITHIN(1, 5000, 5001);
+    TEST_ASSERT_INT_WITHIN(5, 5000, 4996);
+    TEST_ASSERT_INT_WITHIN(5, 5000, 5005);
+    TEST_ASSERT_INT_WITHIN(500, 50, -440);
+
+    TEST_ASSERT_INT_WITHIN(2, -1, -1);
+    TEST_ASSERT_INT_WITHIN(5, 1, -1);
+    TEST_ASSERT_INT_WITHIN(5, -1, 1);
+}
+
+void testIntsWithinDeltaAndCustomMessage(void)
+{
+    TEST_ASSERT_INT_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message.");
+    TEST_ASSERT_INT_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message.");
+    TEST_ASSERT_INT_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message.");
+    TEST_ASSERT_INT_WITHIN_MESSAGE(500, 50, -440, "Custom Message.");
+
+    TEST_ASSERT_INT_WITHIN_MESSAGE(2, -1, -1, "Custom Message.");
+    TEST_ASSERT_INT_WITHIN_MESSAGE(5, 1, -1, "Custom Message.");
+    TEST_ASSERT_INT_WITHIN_MESSAGE(5, -1, 1, "Custom Message.");
+}
+
+void testIntsNotWithinDelta(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_INT_WITHIN(5, 5000, 5006);
+    VERIFY_FAILS_END
+}
+
+void testIntsNotWithinDeltaAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_INT_WITHIN_MESSAGE(5, 5000, 5006, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testUIntsWithinDelta(void)
+{
+    TEST_ASSERT_UINT_WITHIN(1, 5000, 5001);
+    TEST_ASSERT_UINT_WITHIN(5, 5000, 4996);
+    TEST_ASSERT_UINT_WITHIN(5, 5000, 5005);
+}
+
+void testUIntsWithinDeltaAndCustomMessage(void)
+{
+    TEST_ASSERT_UINT_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message.");
+    TEST_ASSERT_UINT_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message.");
+    TEST_ASSERT_UINT_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message.");
+}
+
+void testUIntsNotWithinDelta(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT_WITHIN(1, 2147483647u, 2147483649u);
+    VERIFY_FAILS_END
+}
+
+void testUIntsNotWithinDeltaAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT_WITHIN_MESSAGE(1, 2147483647u, 2147483649u, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testUIntsNotWithinDeltaEvenThoughASignedIntWouldPassSmallFirst(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT_WITHIN(5, 1, -1);
+    VERIFY_FAILS_END
+}
+
+void testUIntsNotWithinDeltaEvenThoughASignedIntWouldPassSmallFirstAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT_WITHIN_MESSAGE(5, 1, -1, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testUIntsNotWithinDeltaEvenThoughASignedIntWouldPassBigFirst(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT_WITHIN(5, -1, 1);
+    VERIFY_FAILS_END
+}
+
+void testUIntsNotWithinDeltaEvenThoughASignedIntWouldPassBigFirstAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT_WITHIN_MESSAGE(5, -1, 1, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testHEX32sWithinDelta(void)
+{
+    TEST_ASSERT_HEX32_WITHIN(1, 5000, 5001);
+    TEST_ASSERT_HEX32_WITHIN(5, 5000, 4996);
+    TEST_ASSERT_HEX32_WITHIN(5, 5000, 5005);
+}
+
+void testHEX32sWithinDeltaAndCustomMessage(void)
+{
+    TEST_ASSERT_HEX32_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message.");
+    TEST_ASSERT_HEX32_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message.");
+    TEST_ASSERT_HEX32_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message.");
+}
+
+void testHEX32sNotWithinDelta(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_HEX32_WITHIN(1, 2147483647u, 2147483649u);
+    VERIFY_FAILS_END
+}
+
+void testHEX32sNotWithinDeltaAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_HEX32_WITHIN_MESSAGE(1, 2147483647u, 2147483649u, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testHEX32sNotWithinDeltaEvenThoughASignedIntWouldPass(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_HEX32_WITHIN(5, 1, -1);
+    VERIFY_FAILS_END
+}
+
+void testHEX32sNotWithinDeltaEvenThoughASignedIntWouldPassAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_HEX32_WITHIN_MESSAGE(5, 1, -1, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testHEX16sWithinDelta(void)
+{
+    TEST_ASSERT_HEX16_WITHIN(1, 5000, 5001);
+    TEST_ASSERT_HEX16_WITHIN(5, 5000, 4996);
+    TEST_ASSERT_HEX16_WITHIN(5, 5000, 5005);
+}
+
+void testHEX16sWithinDeltaAndCustomMessage(void)
+{
+    TEST_ASSERT_HEX16_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message.");
+    TEST_ASSERT_HEX16_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message.");
+    TEST_ASSERT_HEX16_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message.");
+}
+
+void testHEX16sWithinDeltaWhenThereAreDifferenceOutsideOf16Bits(void)
+{
+    TEST_ASSERT_HEX16_WITHIN(5, 0x54321, 0x44321);
+}
+
+void testHEX16sWithinDeltaWhenThereAreDifferenceOutsideOf16BitsAndCustomMessage(void)
+{
+    TEST_ASSERT_HEX16_WITHIN_MESSAGE(5, 0x54321, 0x44321, "Custom Message.");
+}
+
+void testHEX16sNotWithinDelta(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_HEX16_WITHIN(2, 65535, 0);
+    VERIFY_FAILS_END
+}
+
+void testHEX16sNotWithinDeltaAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_HEX16_WITHIN_MESSAGE(2, 65535, 0, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testHEX8sWithinDelta(void)
+{
+    TEST_ASSERT_HEX8_WITHIN(1, 254, 255);
+    TEST_ASSERT_HEX8_WITHIN(5, 251, 255);
+    TEST_ASSERT_HEX8_WITHIN(5, 1, 4);
+}
+
+void testHEX8sWithinDeltaAndCustomMessage(void)
+{
+    TEST_ASSERT_HEX8_WITHIN_MESSAGE(1, 254, 255, "Custom Message.");
+    TEST_ASSERT_HEX8_WITHIN_MESSAGE(5, 251, 255, "Custom Message.");
+    TEST_ASSERT_HEX8_WITHIN_MESSAGE(5, 1, 4, "Custom Message.");
+}
+
+void testHEX8sWithinDeltaWhenThereAreDifferenceOutsideOf8Bits(void)
+{
+    TEST_ASSERT_HEX8_WITHIN(5, 0x123, 0xF23);
+}
+
+void testHEX8sWithinDeltaWhenThereAreDifferenceOutsideOf8BitsAndCustomMessage(void)
+{
+    TEST_ASSERT_HEX8_WITHIN_MESSAGE(5, 0x123, 0xF23, "Custom Message.");
+}
+
+void testHEX8sNotWithinDelta(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_HEX8_WITHIN(2, 255, 0);
+    VERIFY_FAILS_END
+}
+
+void testHEX8sNotWithinDeltaAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_HEX8_WITHIN_MESSAGE(2, 255, 0, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+//-----------------
+
+void testUINT32sWithinDelta(void)
+{
+    TEST_ASSERT_UINT32_WITHIN(1, 5000, 5001);
+    TEST_ASSERT_UINT32_WITHIN(5, 5000, 4996);
+    TEST_ASSERT_UINT32_WITHIN(5, 5000, 5005);
+}
+
+void testUINT32sWithinDeltaAndCustomMessage(void)
+{
+    TEST_ASSERT_UINT32_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message.");
+    TEST_ASSERT_UINT32_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message.");
+    TEST_ASSERT_UINT32_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message.");
+}
+
+void testUINT32sNotWithinDelta(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT32_WITHIN(1, 2147483647u, 2147483649u);
+    VERIFY_FAILS_END
+}
+
+void testUINT32sNotWithinDeltaAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT32_WITHIN_MESSAGE(1, 2147483647u, 2147483649u, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testUINT32sNotWithinDeltaEvenThoughASignedIntWouldPass(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT32_WITHIN(5, 1, -1);
+    VERIFY_FAILS_END
+}
+
+void testUINT32sNotWithinDeltaEvenThoughASignedIntWouldPassAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT32_WITHIN_MESSAGE(5, 1, -1, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testUINT16sWithinDelta(void)
+{
+    TEST_ASSERT_UINT16_WITHIN(1, 5000, 5001);
+    TEST_ASSERT_UINT16_WITHIN(5, 5000, 4996);
+    TEST_ASSERT_UINT16_WITHIN(5, 5000, 5005);
+}
+
+void testUINT16sWithinDeltaAndCustomMessage(void)
+{
+    TEST_ASSERT_UINT16_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message.");
+    TEST_ASSERT_UINT16_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message.");
+    TEST_ASSERT_UINT16_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message.");
+}
+
+void testUINT16sWithinDeltaWhenThereAreDifferenceOutsideOf16Bits(void)
+{
+    TEST_ASSERT_UINT16_WITHIN(5, 0x54321, 0x44321);
+}
+
+void testUINT16sWithinDeltaWhenThereAreDifferenceOutsideOf16BitsAndCustomMessage(void)
+{
+    TEST_ASSERT_UINT16_WITHIN_MESSAGE(5, 0x54321, 0x44321, "Custom Message.");
+}
+
+void testUINT16sNotWithinDelta(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT16_WITHIN(2, 65535, 0);
+    VERIFY_FAILS_END
+}
+
+void testUINT16sNotWithinDeltaAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT16_WITHIN_MESSAGE(2, 65535, 0, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testUINT8sWithinDelta(void)
+{
+    TEST_ASSERT_UINT8_WITHIN(1, 254, 255);
+    TEST_ASSERT_UINT8_WITHIN(5, 251, 255);
+    TEST_ASSERT_UINT8_WITHIN(5, 1, 4);
+}
+
+void testUINT8sWithinDeltaAndCustomMessage(void)
+{
+    TEST_ASSERT_UINT8_WITHIN_MESSAGE(1, 254, 255, "Custom Message.");
+    TEST_ASSERT_UINT8_WITHIN_MESSAGE(5, 251, 255, "Custom Message.");
+    TEST_ASSERT_UINT8_WITHIN_MESSAGE(5, 1, 4, "Custom Message.");
+}
+
+void testUINT8sWithinDeltaWhenThereAreDifferenceOutsideOf8Bits(void)
+{
+    TEST_ASSERT_UINT8_WITHIN(5, 0x123, 0xF23);
+}
+
+void testUINT8sWithinDeltaWhenThereAreDifferenceOutsideOf8BitsAndCustomMessage(void)
+{
+    TEST_ASSERT_UINT8_WITHIN_MESSAGE(5, 0x123, 0xF23, "Custom Message.");
+}
+
+void testUINT8sNotWithinDelta(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT8_WITHIN(2, 255, 0);
+    VERIFY_FAILS_END
+}
+
+void testUINT8sNotWithinDeltaAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT8_WITHIN_MESSAGE(2, 255, 0, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testINT32sWithinDelta(void)
+{
+    TEST_ASSERT_INT32_WITHIN(1, 5000, 5001);
+    TEST_ASSERT_INT32_WITHIN(5, 1, -2);
+    TEST_ASSERT_INT32_WITHIN(5, -2, 1);
+}
+
+void testINT32sWithinDeltaAndCustomMessage(void)
+{
+    TEST_ASSERT_INT32_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message.");
+}
+
+void testINT32sNotWithinDelta(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_INT32_WITHIN(1, -3, 1);
+    VERIFY_FAILS_END
+}
+
+void testINT32sNotWithinDeltaAndDifferenceOverflows(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_INT32_WITHIN(1, -1, 0x7FFFFFFF);
+    VERIFY_FAILS_END
+}
+void testINT32sNotWithinDeltaAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_INT32_WITHIN_MESSAGE(1, -2, 1, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testINT16sWithinDelta(void)
+{
+    TEST_ASSERT_INT16_WITHIN(1, 5000, 5001);
+    TEST_ASSERT_INT16_WITHIN(5, 2, -2);
+    TEST_ASSERT_INT16_WITHIN(5, -2, 2);
+}
+
+void testINT16sWithinDeltaAndCustomMessage(void)
+{
+    TEST_ASSERT_INT16_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message.");
+}
+
+void testINT16sWithinDeltaWhenThereAreDifferenceOutsideOf16Bits(void)
+{
+    TEST_ASSERT_INT16_WITHIN(5, 0x54321, 0x44321);
+}
+
+void testINT16sWithinDeltaWhenThereAreDifferenceOutsideOf16BitsAndCustomMessage(void)
+{
+    TEST_ASSERT_INT16_WITHIN_MESSAGE(5, 0x54321, 0x44321, "Custom Message.");
+}
+
+void testINT16sNotWithinDelta(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_INT16_WITHIN(2, 4, -2);
+    VERIFY_FAILS_END
+}
+
+void testINT16sNotWithinDeltaAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_INT16_WITHIN_MESSAGE(2, 3, 0, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testINT8sWithinDelta(void)
+{
+    TEST_ASSERT_INT8_WITHIN(1, 127, 126);
+    TEST_ASSERT_INT8_WITHIN(5, -2, 2);
+    TEST_ASSERT_INT8_WITHIN(5, 2, -2);
+}
+
+void testINT8sWithinDeltaAndCustomMessage(void)
+{
+    TEST_ASSERT_INT8_WITHIN_MESSAGE(5, 1, 4, "Custom Message.");
+}
+
+void testINT8sWithinDeltaWhenThereAreDifferenceOutsideOf8Bits(void)
+{
+    TEST_ASSERT_INT8_WITHIN(5, 0x123, 0xF23);
+}
+
+void testINT8sWithinDeltaWhenThereAreDifferenceOutsideOf8BitsAndCustomMessage(void)
+{
+    TEST_ASSERT_INT8_WITHIN_MESSAGE(5, 0x123, 0xF23, "Custom Message.");
+}
+
+void testINT8sNotWithinDelta(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_INT8_WITHIN(2, -3, 0);
+    VERIFY_FAILS_END
+}
+
+void testINT8sNotWithinDeltaAndCustomMessage(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_INT8_WITHIN_MESSAGE(2, -4, 0, "Custom Message.");
+    VERIFY_FAILS_END
+}
+
+void testEqualStrings(void)
+{
+    const char *testString = "foo";
+
+    TEST_ASSERT_EQUAL_STRING(testString, testString);
+    TEST_ASSERT_EQUAL_STRING_MESSAGE("foo", "foo", "foo isn't foo");
+    TEST_ASSERT_EQUAL_STRING("foo", testString);
+    TEST_ASSERT_EQUAL_STRING(testString, "foo");
+    TEST_ASSERT_EQUAL_STRING("", "");
+}
+
+void testEqualStringsLen(void)
+{
+    const char *testString = "foobar";
+    TEST_ASSERT_EQUAL_STRING_LEN(testString, testString, strlen(testString));
+    TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE("foobar", "foobaz", 5, "fooba isn't fooba");
+    TEST_ASSERT_EQUAL_STRING_LEN("foo", testString, 3);
+    TEST_ASSERT_EQUAL_STRING_LEN(testString, "foo", 3);
+    TEST_ASSERT_EQUAL_STRING_LEN("", "", 3);
+}
+
+void testEqualStringsWithCarriageReturnsAndLineFeeds(void)
+{
+    const char *testString = "foo\r\nbar";
+
+    TEST_ASSERT_EQUAL_STRING(testString, testString);
+    TEST_ASSERT_EQUAL_STRING("foo\r\nbar", "foo\r\nbar");
+    TEST_ASSERT_EQUAL_STRING("foo\r\nbar", testString);
+    TEST_ASSERT_EQUAL_STRING(testString, "foo\r\nbar");
+    TEST_ASSERT_EQUAL_STRING("", "");
+}
+
+void testNotEqualString1(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING("foo", "bar");
+    VERIFY_FAILS_END
+}
+
+void testNotEqualStringLen1(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_LEN("foobar", "foobaz", 6);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualString2(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING("foo", "");
+    VERIFY_FAILS_END
+}
+
+void testNotEqualStringLen2(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_LEN("foo", "", 3);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualString3(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING("", "bar");
+    VERIFY_FAILS_END
+}
+
+void testNotEqualStringLen3(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_LEN("", "bar", 3);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualString4(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING("bar\r", "bar\n");
+    VERIFY_FAILS_END
+}
+
+void testNotEqualStringLen4(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_LEN("\r\x16", "bar\n", 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualString5(void)
+{
+    const char str1[] = { 0x41, 0x42, 0x03, 0x00 };
+    const char str2[] = { 0x41, 0x42, 0x04, 0x00 };
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING(str1, str2);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualString_ExpectedStringIsNull(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING(NULL, "bar");
+    VERIFY_FAILS_END
+}
+
+void testNotEqualStringLen_ExpectedStringIsNull(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_LEN(NULL, "bar", 1);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualString_ActualStringIsNull(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING("foo", NULL);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualStringLen_ActualStringIsNull(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_LEN("foo", NULL, 1);
+    VERIFY_FAILS_END
+}
+
+void testEqualStringArrays(void)
+{
+    const char *testStrings[] = { "foo", "boo", "woo", "moo" };
+    const char *expStrings[] = { "foo", "boo", "woo", "zoo" };
+
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, expStrings, 3);
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 3);
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 2);
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 1);
+}
+
+void testNotEqualStringArray1(void)
+{
+    const char *testStrings[] = { "foo", "boo", "woo", "moo" };
+    const char *expStrings[] = { "foo", "boo", "woo", "zoo" };
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualStringArray2(void)
+{
+    const char *testStrings[] = { "zoo", "boo", "woo", "moo" };
+    const char *expStrings[] = { "foo", "boo", "woo", "moo" };
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualStringArray3(void)
+{
+    const char *testStrings[] = { "foo", "boo", "woo", NULL };
+    const char *expStrings[] = { "foo", "boo", "woo", "zoo" };
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualStringArray4(void)
+{
+    const char *testStrings[] = { "foo", "boo", "woo", "moo" };
+    const char *expStrings[] = { "foo", NULL, "woo", "moo" };
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualStringArray5(void)
+{
+    const char **testStrings = NULL;
+    const char *expStrings[] = { "foo", "boo", "woo", "zoo" };
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualStringArray6(void)
+{
+    const char *testStrings[] = { "foo", "boo", "woo", "zoo" };
+    const char **expStrings = NULL;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualStringArrayIfBothNulls(void)
+{
+    const char **testStrings = NULL;
+    const char **expStrings = NULL;
+
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4);
+}
+
+void testNotEqualStringArrayLengthZero(void)
+{
+    const char *testStrings[] = {NULL};
+    const char **expStrings = NULL;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 0);
+    VERIFY_FAILS_END
+}
+
+void testEqualMemory(void)
+{
+    const char *testString = "whatever";
+
+    TEST_ASSERT_EQUAL_MEMORY(testString, testString, 8);
+    TEST_ASSERT_EQUAL_MEMORY("whatever", "whatever", 8);
+    TEST_ASSERT_EQUAL_MEMORY("whatever", testString, 8);
+    TEST_ASSERT_EQUAL_MEMORY(testString, "whatever", 8);
+    TEST_ASSERT_EQUAL_MEMORY(testString, "whatever", 2);
+    TEST_ASSERT_EQUAL_MEMORY(NULL, NULL, 1);
+}
+
+void testNotEqualMemory1(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_MEMORY("foo", "bar", 3);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualMemory2(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_MEMORY("fool", "food", 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualMemory3(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_MEMORY(NULL, "food", 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualMemory4(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_MEMORY("fool", NULL, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualMemoryLengthZero(void)
+{
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_MEMORY(NULL, NULL, 0);
+    VERIFY_FAILS_END
+}
+
+void testEqualIntArrays(void)
+{
+    int p0[] = {1, 8, 987, -2};
+    int p1[] = {1, 8, 987, -2};
+    int p2[] = {1, 8, 987, 2};
+    int p3[] = {1, 500, 600, 700};
+
+    TEST_ASSERT_EQUAL_INT_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_INT_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_INT_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_INT_ARRAY(p0, p3, 1);
+    TEST_ASSERT_EQUAL_INT_ARRAY(NULL, NULL, 1);
+}
+
+void testNotEqualIntArraysNullExpected(void)
+{
+    int* p0 = NULL;
+    int p1[] = {1, 8, 987, 2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualIntArraysNullActual(void)
+{
+    int* p1 = NULL;
+    int p0[] = {1, 8, 987, 2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualIntArrays1(void)
+{
+    int p0[] = {1, 8, 987, -2};
+    int p1[] = {1, 8, 987, 2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualIntArrays2(void)
+{
+    int p0[] = {1, 8, 987, -2};
+    int p1[] = {2, 8, 987, -2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualIntArrays3(void)
+{
+    int p0[] = {1, 8, 987, -2};
+    int p1[] = {1, 8, 986, -2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualIntArraysLengthZero(void)
+{
+    _UU32 p0[1] = {1};
+    _UU32 p1[1] = {1};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 0);
+    VERIFY_FAILS_END
+}
+
+void testEqualPtrArrays(void)
+{
+    char A = 1;
+    char B = 2;
+    char C = 3;
+    char* p0[] = {&A, &B, &C};
+    char* p1[] = {&A, &B, &C, &A};
+    char* p2[] = {&A, &B};
+    char* p3[] = {&A};
+
+    TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p0, 3);
+    TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p1, 3);
+    TEST_ASSERT_EQUAL_PTR_ARRAY(p1, p2, 2);
+    TEST_ASSERT_EQUAL_PTR_ARRAY(p3, p0, 1);
+}
+
+void testNotEqualPtrArraysNullExpected(void)
+{
+    char A = 1;
+    char B = 2;
+    char** p0 = NULL;
+    char* p1[] = {&A, &B};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p1, 2);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualPtrArraysNullActual(void)
+{
+    char A = 1;
+    char B = 2;
+    char** p0 = NULL;
+    char* p1[] = {&A, &B};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_PTR_ARRAY(p1, p0, 2);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualPtrArrays1(void)
+{
+    char A = 1;
+    char B = 2;
+    char C = 3;
+    char* p0[] = {&A, &B, &C, &B};
+    char* p1[] = {&A, &B, &C, &A};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualPtrArrays2(void)
+{
+    char A = 1;
+    char B = 2;
+    char C = 3;
+    char* p0[] = {&B, &B, &C, &A};
+    char* p1[] = {&A, &B, &C, &A};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualPtrArrays3(void)
+{
+    char A = 1;
+    char B = 2;
+    char C = 3;
+    char* p0[] = {&A, &B, &B, &A};
+    char* p1[] = {&A, &B, &C, &A};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualInt8Arrays(void)
+{
+    _US8 p0[] = {1, 8, 117, -2};
+    _US8 p1[] = {1, 8, 117, -2};
+    _US8 p2[] = {1, 8, 117, 2};
+    _US8 p3[] = {1, 50, 60, 70};
+
+    TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p3, 1);
+}
+
+void testNotEqualInt8Arrays(void)
+{
+    _US8 p0[] = {1, 8, 36, -2};
+    _US8 p1[] = {1, 8, 36, 2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualUIntArrays(void)
+{
+    unsigned int p0[] = {1, 8, 987, 65132u};
+    unsigned int p1[] = {1, 8, 987, 65132u};
+    unsigned int p2[] = {1, 8, 987, 2};
+    unsigned int p3[] = {1, 500, 600, 700};
+
+    TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p3, 1);
+}
+
+void testNotEqualUIntArrays1(void)
+{
+    unsigned int p0[] = {1, 8, 987, 65132u};
+    unsigned int p1[] = {1, 8, 987, 65131u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUIntArrays2(void)
+{
+    unsigned int p0[] = {1, 8, 987, 65132u};
+    unsigned int p1[] = {2, 8, 987, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUIntArrays3(void)
+{
+    unsigned int p0[] = {1, 8, 987, 65132u};
+    unsigned int p1[] = {1, 8, 986, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualInt16Arrays(void)
+{
+    _US16 p0[] = {1, 8, 117, 3};
+    _US16 p1[] = {1, 8, 117, 3};
+    _US16 p2[] = {1, 8, 117, 2};
+    _US16 p3[] = {1, 50, 60, 70};
+
+    TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p3, 1);
+}
+
+void testNotEqualInt16Arrays(void)
+{
+    _US16 p0[] = {1, 8, 127, 3};
+    _US16 p1[] = {1, 8, 127, 2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualInt32Arrays(void)
+{
+    _US32 p0[] = {1, 8, 117, 3};
+    _US32 p1[] = {1, 8, 117, 3};
+    _US32 p2[] = {1, 8, 117, 2};
+    _US32 p3[] = {1, 50, 60, 70};
+
+    TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p3, 1);
+}
+
+void testNotEqualInt32Arrays(void)
+{
+    _US32 p0[] = {1, 8, 127, 3};
+    _US32 p1[] = {1, 8, 127, 2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualUINT8Arrays(void)
+{
+    _UU8 p0[] = {1, 8, 100, 127};
+    _UU8 p1[] = {1, 8, 100, 127};
+    _UU8 p2[] = {1, 8, 100, 2};
+    _UU8 p3[] = {1, 50, 60, 70};
+
+    TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p3, 1);
+}
+
+void testNotEqualUINT8Arrays1(void)
+{
+    unsigned char p0[] = {1, 8, 100, 127u};
+    unsigned char p1[] = {1, 8, 100, 255u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUINT8Arrays2(void)
+{
+    unsigned char p0[] = {1, 8, 100, 127u};
+    unsigned char p1[] = {1, 8, 100, 255u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUINT8Arrays3(void)
+{
+    unsigned char p0[] = {1, 8, 100, 127u};
+    unsigned char p1[] = {1, 8, 100, 255u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+
+void testEqualUINT16Arrays(void)
+{
+    unsigned short p0[] = {1, 8, 987, 65132u};
+    unsigned short p1[] = {1, 8, 987, 65132u};
+    unsigned short p2[] = {1, 8, 987, 2};
+    unsigned short p3[] = {1, 500, 600, 700};
+
+    TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p3, 1);
+}
+
+void testNotEqualUINT16Arrays1(void)
+{
+    unsigned short p0[] = {1, 8, 987, 65132u};
+    unsigned short p1[] = {1, 8, 987, 65131u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUINT16Arrays2(void)
+{
+    unsigned short p0[] = {1, 8, 987, 65132u};
+    unsigned short p1[] = {2, 8, 987, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUINT16Arrays3(void)
+{
+    unsigned short p0[] = {1, 8, 987, 65132u};
+    unsigned short p1[] = {1, 8, 986, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualUINT32Arrays(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {1, 8, 987, 65132u};
+    _UU32 p2[] = {1, 8, 987, 2};
+    _UU32 p3[] = {1, 500, 600, 700};
+
+    TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p3, 1);
+}
+
+void testNotEqualUINT32Arrays1(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {1, 8, 987, 65131u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUINT32Arrays2(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {2, 8, 987, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualUINT32Arrays3(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {1, 8, 986, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualHEXArrays(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {1, 8, 987, 65132u};
+    _UU32 p2[] = {1, 8, 987, 2};
+    _UU32 p3[] = {1, 500, 600, 700};
+
+    TEST_ASSERT_EQUAL_HEX_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_HEX_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_HEX_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p3, 1);
+}
+
+void testNotEqualHEXArrays1(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {1, 8, 987, 65131u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHEXArrays2(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {2, 8, 987, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHEXArrays3(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {1, 8, 986, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualHEX32Arrays(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {1, 8, 987, 65132u};
+    _UU32 p2[] = {1, 8, 987, 2};
+    _UU32 p3[] = {1, 500, 600, 700};
+
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p3, 1);
+}
+
+void testNotEqualHEX32Arrays1(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {1, 8, 987, 65131u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHEX32Arrays2(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {2, 8, 987, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHEX32Arrays3(void)
+{
+    _UU32 p0[] = {1, 8, 987, 65132u};
+    _UU32 p1[] = {1, 8, 986, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualHEX16Arrays(void)
+{
+    unsigned short p0[] = {1, 8, 987, 65132u};
+    unsigned short p1[] = {1, 8, 987, 65132u};
+    unsigned short p2[] = {1, 8, 987, 2};
+    unsigned short p3[] = {1, 500, 600, 700};
+
+    TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p3, 1);
+}
+
+void testNotEqualHEX16Arrays1(void)
+{
+    unsigned short p0[] = {1, 8, 987, 65132u};
+    unsigned short p1[] = {1, 8, 987, 65131u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHEX16Arrays2(void)
+{
+    unsigned short p0[] = {1, 8, 987, 65132u};
+    unsigned short p1[] = {2, 8, 987, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHEX16Arrays3(void)
+{
+    unsigned short p0[] = {1, 8, 987, 65132u};
+    unsigned short p1[] = {1, 8, 986, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualHEX8Arrays(void)
+{
+    unsigned short p0[] = {1, 8, 254u, 123};
+    unsigned short p1[] = {1, 8, 254u, 123};
+    unsigned short p2[] = {1, 8, 254u, 2};
+    unsigned short p3[] = {1, 23, 25, 26};
+
+    TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p3, 1);
+}
+
+void testNotEqualHEX8Arrays1(void)
+{
+    unsigned char p0[] = {1, 8, 254u, 253u};
+    unsigned char p1[] = {1, 8, 254u, 252u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHEX8Arrays2(void)
+{
+    unsigned char p0[] = {1, 8, 254u, 253u};
+    unsigned char p1[] = {2, 8, 254u, 253u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualHEX8Arrays3(void)
+{
+    unsigned char p0[] = {1, 8, 254u, 253u};
+    unsigned char p1[] = {1, 8, 255u, 253u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+}
+
+void testEqualMemoryArrays(void)
+{
+    int p0[] = {1, 8, 987, -2};
+    int p1[] = {1, 8, 987, -2};
+    int p2[] = {1, 8, 987, 2};
+    int p3[] = {1, 500, 600, 700};
+
+    TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p0, sizeof(int), 1);
+    TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p0, sizeof(int), 4);
+    TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4);
+    TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p2, sizeof(int), 3);
+    TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p3, sizeof(int), 1);
+}
+
+void testNotEqualMemoryArraysExpectedNull(void)
+{
+    int* p0 = NULL;
+    int p1[] = {1, 8, 987, 2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualMemoryArraysActualNull(void)
+{
+    int p0[] = {1, 8, 987, -2};
+    int* p1 = NULL;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualMemoryArrays1(void)
+{
+    int p0[] = {1, 8, 987, -2};
+    int p1[] = {1, 8, 987, 2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualMemoryArrays2(void)
+{
+    int p0[] = {1, 8, 987, -2};
+    int p1[] = {2, 8, 987, -2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4);
+    VERIFY_FAILS_END
+}
+
+void testNotEqualMemoryArrays3(void)
+{
+    int p0[] = {1, 8, 987, -2};
+    int p1[] = {1, 8, 986, -2};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4);
+    VERIFY_FAILS_END
+}
+
+void testProtection(void)
+{
+    volatile int mask = 0;
+
+    if (TEST_PROTECT())
+    {
+        mask |= 1;
+        TEST_ABORT();
+    }
+    else
+    {
+        Unity.CurrentTestFailed = 0;
+        mask |= 2;
+    }
+
+    TEST_ASSERT_EQUAL(3, mask);
+}
+
+void testIgnoredAndThenFailInTearDown(void)
+{
+    SetToOneToFailInTearDown = 1;
+    TEST_IGNORE();
+}
+
+// Tricky series of macros to set USING_OUTPUT_SPY
+#define USING_SPY_AS(a)           EXPAND_AND_USE_2ND(ASSIGN_VALUE(a), 0)
+#define ASSIGN_VALUE(a)           VAL_##a
+#define VAL_putcharSpy            0, 1
+#define EXPAND_AND_USE_2ND(a, b)  SECOND_PARAM(a, b, throwaway)
+#define SECOND_PARAM(a, b, ...)   b
+#if USING_SPY_AS(UNITY_OUTPUT_CHAR)
+  #define USING_OUTPUT_SPY // true only if UNITY_OUTPUT_CHAR = putcharSpy
+#endif
+
+#ifdef USING_OUTPUT_SPY
+#include <stdio.h>
+#define SPY_BUFFER_MAX 40
+static char putcharSpyBuffer[SPY_BUFFER_MAX];
+#endif
+static int indexSpyBuffer;
+static int putcharSpyEnabled;
+
+void startPutcharSpy(void) {indexSpyBuffer = 0; putcharSpyEnabled = 1;}
+
+void endPutcharSpy(void) {putcharSpyEnabled = 0;}
+
+char* getBufferPutcharSpy(void)
+{
+#ifdef USING_OUTPUT_SPY
+    putcharSpyBuffer[indexSpyBuffer] = '\0';
+    return putcharSpyBuffer;
+#else
+    return NULL;
+#endif
+}
+
+void putcharSpy(int c)
+{
+#ifdef USING_OUTPUT_SPY
+    if (putcharSpyEnabled)
+    {
+        if (indexSpyBuffer < SPY_BUFFER_MAX - 1)
+            putcharSpyBuffer[indexSpyBuffer++] = (char)c;
+    } else
+        c = putchar(c);
+#endif
+}
+
+void testFailureCountIncrementsAndIsReturnedAtEnd(void)
+{
+    Unity.CurrentTestFailed = 1;
+    startPutcharSpy(); // Suppress output
+    UnityConcludeTest();
+    TEST_ASSERT_EQUAL(1, Unity.TestFailures);
+
+    int failures = UnityEnd();
+    Unity.TestFailures--;
+    endPutcharSpy();
+    TEST_ASSERT_EQUAL(1, failures);
+}
+
+#define TEST_ASSERT_EQUAL_PRINT_NUMBERS(expected, actual) {             \
+        startPutcharSpy(); UnityPrintNumber((actual)); endPutcharSpy(); \
+        TEST_ASSERT_EQUAL_STRING((expected), getBufferPutcharSpy());    \
+        }
+
+#define TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS(expected, actual) {            \
+        startPutcharSpy(); UnityPrintNumberUnsigned((actual)); endPutcharSpy(); \
+        TEST_ASSERT_EQUAL_STRING((expected), getBufferPutcharSpy());            \
+        }
+
+void testPrintNumbers32(void)
+{
+#ifndef USING_OUTPUT_SPY
+    TEST_IGNORE_MESSAGE("Compile with '-D UNITY_OUTPUT_CHAR=putcharSpy' to enable print testing");
+#else
+    TEST_ASSERT_EQUAL_PRINT_NUMBERS("0", 0);
+    TEST_ASSERT_EQUAL_PRINT_NUMBERS("1", 1);
+    TEST_ASSERT_EQUAL_PRINT_NUMBERS("-1", -1);
+    TEST_ASSERT_EQUAL_PRINT_NUMBERS("2000000000", 2000000000);
+    TEST_ASSERT_EQUAL_PRINT_NUMBERS("-2147483648", (_US32)0x80000000);
+    TEST_ASSERT_EQUAL_PRINT_NUMBERS("-1",          (_US32)0xFFFFFFFF);
+#endif
+}
+
+void testPrintNumbersUnsigned32(void)
+{
+#ifndef USING_OUTPUT_SPY
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("0", 0);
+    TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("1", 1);
+    TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("1500000000", 1500000000);
+    TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("2147483648", (_UU32)0x80000000);
+    TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("4294967295", (_UU32)0xFFFFFFFF);
+#endif
+}
+
+// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES 64 BIT SUPPORT ==================
+
+void testPrintNumbersInt64(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+  #ifndef USING_OUTPUT_SPY
+    TEST_IGNORE();
+  #else
+    TEST_ASSERT_EQUAL_PRINT_NUMBERS("0", 0);
+    TEST_ASSERT_EQUAL_PRINT_NUMBERS("10000000000", 10000000000);
+    TEST_ASSERT_EQUAL_PRINT_NUMBERS("-9223372036854775808", (_U_SINT)0x8000000000000000);
+    TEST_ASSERT_EQUAL_PRINT_NUMBERS("-1", (_U_SINT)0xFFFFFFFFFFFFFFFF);
+  #endif
+#endif
+}
+
+void testPrintNumbersUInt64(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+  #ifndef USING_OUTPUT_SPY
+    TEST_IGNORE();
+  #else
+    TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("0", 0);
+    TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("70000000000", 70000000000);
+    TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("9223372036854775808",  (_U_UINT)0x8000000000000000);
+    TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("18446744073709551615", (_U_UINT)0xFFFFFFFFFFFFFFFF);
+  #endif
+#endif
+}
+
+void testEqualHex64s(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _UU64 v0, v1;
+    _UU64 *p0, *p1;
+
+    v0 = 0x9876543201234567;
+    v1 = 0x9876543201234567;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_HEX64(0x9876543201234567, 0x9876543201234567);
+    TEST_ASSERT_EQUAL_HEX64(v0, v1);
+    TEST_ASSERT_EQUAL_HEX64(0x9876543201234567, v1);
+    TEST_ASSERT_EQUAL_HEX64(v0, 0x9876543201234567);
+    TEST_ASSERT_EQUAL_HEX64(*p0, v1);
+    TEST_ASSERT_EQUAL_HEX64(*p0, *p1);
+    TEST_ASSERT_EQUAL_HEX64(*p0, 0x9876543201234567);
+#endif
+}
+
+void testEqualUint64s(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _UU64 v0, v1;
+    _UU64 *p0, *p1;
+
+    v0 = 0x9876543201234567;
+    v1 = 0x9876543201234567;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_UINT64(0x9876543201234567, 0x9876543201234567);
+    TEST_ASSERT_EQUAL_UINT64(v0, v1);
+    TEST_ASSERT_EQUAL_UINT64(0x9876543201234567, v1);
+    TEST_ASSERT_EQUAL_UINT64(v0, 0x9876543201234567);
+    TEST_ASSERT_EQUAL_UINT64(*p0, v1);
+    TEST_ASSERT_EQUAL_UINT64(*p0, *p1);
+    TEST_ASSERT_EQUAL_UINT64(*p0, 0x9876543201234567);
+#endif
+}
+
+void testEqualInt64s(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _US64 v0, v1;
+    _US64 *p0, *p1;
+
+    v0 = (_US64)0x9876543201234567;
+    v1 = (_US64)0x9876543201234567;
+    p0 = &v0;
+    p1 = &v1;
+
+    TEST_ASSERT_EQUAL_INT64(0x9876543201234567, 0x9876543201234567);
+    TEST_ASSERT_EQUAL_INT64(v0, v1);
+    TEST_ASSERT_EQUAL_INT64(0x9876543201234567, v1);
+    TEST_ASSERT_EQUAL_INT64(v0, 0x9876543201234567);
+    TEST_ASSERT_EQUAL_INT64(*p0, v1);
+    TEST_ASSERT_EQUAL_INT64(*p0, *p1);
+    TEST_ASSERT_EQUAL_INT64(*p0, 0x9876543201234567);
+#endif
+}
+
+
+void testNotEqualHex64s(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _UU64 v0, v1;
+
+    v0 = 9000000000;
+    v1 = 9100000000;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX64(v0, v1);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualUint64s(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _UU64 v0, v1;
+
+    v0 = 9000000000;
+    v1 = 9100000000;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT64(v0, v1);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualInt64s(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _US64 v0, v1;
+
+    v0 = -9000000000;
+    v1 = 9100000000;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT64(v0, v1);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualHex64sIfSigned(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _US64 v0, v1;
+
+    v0 = -9000000000;
+    v1 = 9000000000;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX64(v0, v1);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testHEX64sWithinDelta(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_HEX64_WITHIN(1, 0x7FFFFFFFFFFFFFFF,0x7FFFFFFFFFFFFFFE);
+    TEST_ASSERT_HEX64_WITHIN(5, 5000, 4996);
+    TEST_ASSERT_HEX64_WITHIN(5, 5000, 5005);
+#endif
+}
+
+void testHEX64sNotWithinDelta(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_HEX64_WITHIN(1, 0x7FFFFFFFFFFFFFFF, 0x7FFFFFFFFFFFFFFC);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testHEX64sNotWithinDeltaEvenThoughASignedIntWouldPass(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_HEX64_WITHIN(5, 1, -1);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testUINT64sWithinDelta(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_UINT64_WITHIN(1, 0x7FFFFFFFFFFFFFFF,0x7FFFFFFFFFFFFFFE);
+    TEST_ASSERT_UINT64_WITHIN(5, 5000, 4996);
+    TEST_ASSERT_UINT64_WITHIN(5, 5000, 5005);
+#endif
+}
+
+void testUINT64sNotWithinDelta(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT64_WITHIN(1, 0x7FFFFFFFFFFFFFFF, 0x7FFFFFFFFFFFFFFC);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testUINT64sNotWithinDeltaEvenThoughASignedIntWouldPass(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_UINT64_WITHIN(5, 1, -1);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testINT64sWithinDelta(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_INT64_WITHIN(1, 0x7FFFFFFFFFFFFFFF,0x7FFFFFFFFFFFFFFE);
+    TEST_ASSERT_INT64_WITHIN(5, 5000, 4996);
+    TEST_ASSERT_INT64_WITHIN(5, 5000, 5005);
+#endif
+}
+
+void testINT64sNotWithinDelta(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_INT64_WITHIN(1, 0x7FFFFFFFFFFFFFFF, 0x7FFFFFFFFFFFFFFC);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testINT64sNotWithinDeltaAndDifferenceOverflows(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_INT64_WITHIN(1, 0x8000000000000000, 0x7FFFFFFFFFFFFFFF);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testEqualHEX64Arrays(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _UU64 p0[] = {1, 8, 987, 65132u};
+    _UU64 p1[] = {1, 8, 987, 65132u};
+    _UU64 p2[] = {1, 8, 987, 2};
+    _UU64 p3[] = {1, 500, 600, 700};
+
+    TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p3, 1);
+#endif
+}
+
+void testEqualUint64Arrays(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _UU64 p0[] = {1, 8, 987, 65132u};
+    _UU64 p1[] = {1, 8, 987, 65132u};
+    _UU64 p2[] = {1, 8, 987, 2};
+    _UU64 p3[] = {1, 500, 600, 700};
+
+    TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p3, 1);
+#endif
+}
+
+void testEqualInt64Arrays(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _US64 p0[] = {1, 8, 987, -65132};
+    _US64 p1[] = {1, 8, 987, -65132};
+    _US64 p2[] = {1, 8, 987, -2};
+    _US64 p3[] = {1, 500, 600, 700};
+
+    TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p3, 1);
+#endif
+}
+
+
+void testNotEqualHEX64Arrays1(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _UU64 p0[] = {1, 8, 987, 65132u};
+    _UU64 p1[] = {1, 8, 987, 65131u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualHEX64Arrays2(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _UU64 p0[] = {1, 8, 987, 65132u};
+    _UU64 p1[] = {2, 8, 987, 65132u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualUint64Arrays(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _UU64 p0[] = {1, 8, 987, 65132u};
+    _UU64 p1[] = {1, 8, 987, 65131u};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualInt64Arrays(void)
+{
+#ifndef UNITY_SUPPORT_64
+    TEST_IGNORE();
+#else
+    _US64 p0[] = {1, 8, 987, -65132};
+    _US64 p1[] = {1, 8, 987, -65131};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES FLOAT SUPPORT ==================
+
+void testFloatsWithinDelta(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_FLOAT_WITHIN(0.00003f, 187245.03485f, 187245.03488f);
+    TEST_ASSERT_FLOAT_WITHIN(1.0f, 187245.0f, 187246.0f);
+    TEST_ASSERT_FLOAT_WITHIN(0.05f, 9273.2549f, 9273.2049f);
+    TEST_ASSERT_FLOAT_WITHIN(0.007f, -726.93724f, -726.94424f);
+#endif
+}
+
+void testFloatsNotWithinDelta(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FLOAT_WITHIN(0.05f, 9273.2649f, 9273.2049f);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsEqual(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_EQUAL_FLOAT(187245.0f, 187246.0f);
+    TEST_ASSERT_EQUAL_FLOAT(18724.5f, 18724.6f);
+    TEST_ASSERT_EQUAL_FLOAT(9273.2549f, 9273.2599f);
+    TEST_ASSERT_EQUAL_FLOAT(-726.93724f, -726.9374f);
+#endif
+}
+
+void testFloatsNotEqual(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(9273.9649f, 9273.0049f);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsNotEqualNegative1(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(-9273.9649f, -9273.0049f);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsNotEqualNegative2(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(-9273.0049f, -9273.9649f);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsNotEqualActualNaN(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(85.963f, 0.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsNotEqualExpectedNaN(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(0.0f / f_zero, 85.963f);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsNotEqualBothNaN(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(0.0f / f_zero, 0.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsNotEqualInfNaN(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(1.0f / f_zero, 0.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsNotEqualNaNInf(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(0.0f / f_zero, 1.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsNotEqualActualInf(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(321.642f, 1.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsNotEqualExpectedInf(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(1.0f / f_zero, 321.642f);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsNotEqualBothInf(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(1.0f / f_zero, 1.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatsNotEqualPlusMinusInf(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT(1.0f / f_zero, -1.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatIsPosInf1(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_FLOAT_IS_INF(2.0f / f_zero);
+#endif
+}
+
+void testFloatIsPosInf2(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FLOAT_IS_NOT_INF(2.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatIsNegInf1(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_FLOAT_IS_NEG_INF(-3.0f / f_zero);
+#endif
+}
+
+void testFloatIsNegInf2(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(-3.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatIsNotPosInf1(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FLOAT_IS_INF(2.0f);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatIsNotPosInf2(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_FLOAT_IS_NOT_INF(2.0f);
+#endif
+}
+
+void testFloatIsNotNegInf(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FLOAT_IS_NEG_INF(-999.876f);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatIsNan1(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_FLOAT_IS_NAN(0.0f / f_zero);
+#endif
+}
+
+void testFloatIsNan2(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FLOAT_IS_NOT_NAN(0.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatIsNotNan1(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FLOAT_IS_NAN(234.9f);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatIsNotNan2(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_FLOAT_IS_NOT_NAN(234.9f);
+#endif
+}
+
+void testFloatInfIsNotNan(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FLOAT_IS_NAN(1.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatNanIsNotInf(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FLOAT_IS_INF(0.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatIsDeterminate1(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_FLOAT_IS_DETERMINATE(0.0f);
+    TEST_ASSERT_FLOAT_IS_DETERMINATE(123.3f);
+    TEST_ASSERT_FLOAT_IS_DETERMINATE(-88.3f);
+#endif
+}
+
+void testFloatIsDeterminate2(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(-88.3f);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatIsNotDeterminate1(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(1.0f / f_zero);
+    TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(-1.0f / f_zero);
+    TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(0.0f / f_zero);
+#endif
+}
+
+void testFloatIsNotDeterminate2(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_FLOAT_IS_DETERMINATE(-1.0f / f_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testFloatTraitFailsOnInvalidTrait(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    UnityAssertFloatSpecial(1.0f, NULL, __LINE__, UNITY_FLOAT_INVALID_TRAIT);
+    VERIFY_FAILS_END
+#endif
+}
+
+
+void testEqualFloatArrays(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float p0[] = {1.0f, -8.0f,  25.4f, -0.123f};
+    float p1[] = {1.0f, -8.0f,  25.4f, -0.123f};
+    float p2[] = {1.0f, -8.0f,  25.4f, -0.2f};
+    float p3[] = {1.0f, -23.0f, 25.0f, -0.26f};
+
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p3, 1);
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(NULL, NULL, 1);
+#endif
+}
+
+void testNotEqualFloatArraysExpectedNull(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float* p0 = NULL;
+    float p1[] = {1.0f, 8.0f, 25.4f, 0.252f};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualFloatArraysActualNull(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float p0[] = {1.0f, 8.0f, 25.4f, 0.253f};
+    float* p1 = NULL;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualFloatArrays1(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float p0[] = {1.0f, 8.0f, 25.4f, 0.253f};
+    float p1[] = {1.0f, 8.0f, 25.4f, 0.252f};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualFloatArrays2(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float p0[] = {1.0f, 8.0f, 25.4f, 0.253f};
+    float p1[] = {2.0f, 8.0f, 25.4f, 0.253f};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualFloatArrays3(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float p0[] = {1.0f, 8.0f, 25.4f, 0.253f};
+    float p1[] = {1.0f, 8.0f, 25.5f, 0.253f};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualFloatArraysNegative1(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float p0[] = {-1.0f, -8.0f, -25.4f, -0.253f};
+    float p1[] = {-1.0f, -8.0f, -25.4f, -0.252f};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualFloatArraysNegative2(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float p0[] = {-1.0f, -8.0f, -25.4f, -0.253f};
+    float p1[] = {-2.0f, -8.0f, -25.4f, -0.253f};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualFloatArraysNegative3(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float p0[] = {-1.0f, -8.0f, -25.4f, -0.253f};
+    float p1[] = {-1.0f, -8.0f, -25.5f, -0.253f};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualFloatArraysNaN(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float p0[] = {1.0f, 0.0f / f_zero, 25.4f, 0.253f};
+    float p1[] = {1.0f, 0.0f / f_zero, 25.4f, 0.253f};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualFloatArraysInf(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float p0[] = {1.0f, 1.0f / f_zero, 25.4f, 0.253f};
+    float p1[] = {1.0f, 1.0f / f_zero, 25.4f, 0.253f};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualFloatArraysLengthZero(void)
+{
+#ifdef UNITY_EXCLUDE_FLOAT
+    TEST_IGNORE();
+#else
+    float p0[1] = {0.0f};
+    float p1[1] = {0.0f};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 0);
+    VERIFY_FAILS_END
+#endif
+}
+
+// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES DOUBLE SUPPORT ==================
+
+void testDoublesWithinDelta(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_DOUBLE_WITHIN(0.00003, 187245.03485, 187245.03488);
+    TEST_ASSERT_DOUBLE_WITHIN(1.0, 187245.0, 187246.0);
+    TEST_ASSERT_DOUBLE_WITHIN(0.05, 9273.2549, 9273.2049);
+    TEST_ASSERT_DOUBLE_WITHIN(0.007, -726.93725, -726.94424);
+#endif
+}
+
+void testDoublesNotWithinDelta(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_DOUBLE_WITHIN(0.05, 9273.2649, 9273.2049);
+    VERIFY_FAILS_END
+#endif
+}
+
+
+void testDoublesEqual(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_EQUAL_DOUBLE(187245123456.0, 187245123456.0);
+    TEST_ASSERT_EQUAL_DOUBLE(187241234567.5, 187241234567.6);
+    TEST_ASSERT_EQUAL_DOUBLE(9273.2512345649, 9273.25123455699);
+    TEST_ASSERT_EQUAL_DOUBLE(-726.12345693724, -726.1234569374);
+#endif
+}
+
+void testDoublesNotEqual(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(9273.9649, 9273.0049);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoublesNotEqualNegative1(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(-9273.9649, -9273.0049);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoublesNotEqualNegative2(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(-9273.0049, -9273.9649);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoublesNotEqualActualNaN(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(85.963, 0.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoublesNotEqualExpectedNaN(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(0.0 / d_zero, 85.963);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoublesNotEqualBothNaN(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(0.0 / d_zero, 0.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoublesNotEqualInfNaN(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(1.0 / d_zero, 0.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoublesNotEqualNaNInf(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(0.0 / d_zero, 1.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoublesNotEqualActualInf(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(321.642, 1.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoublesNotEqualExpectedInf(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(1.0 / d_zero, 321.642);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoublesNotEqualBothInf(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(1.0 / d_zero, 1.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoublesNotEqualPlusMinusInf(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE(1.0 / d_zero, -1.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoubleIsPosInf1(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_DOUBLE_IS_INF(2.0 / d_zero);
+#endif
+}
+
+void testDoubleIsPosInf2(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_DOUBLE_IS_NOT_INF(2.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoubleIsNegInf1(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_DOUBLE_IS_NEG_INF(-3.0 / d_zero);
+#endif
+}
+
+void testDoubleIsNegInf2(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(-3.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoubleIsNotPosInf1(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_DOUBLE_IS_INF(2.0);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoubleIsNotPosInf2(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_DOUBLE_IS_NOT_INF(2.0);
+#endif
+}
+
+void testDoubleIsNotNegInf(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_DOUBLE_IS_NEG_INF(-999.876);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoubleIsNan1(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_DOUBLE_IS_NAN(0.0 / d_zero);
+#endif
+}
+
+void testDoubleIsNan2(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_DOUBLE_IS_NOT_NAN(0.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoubleIsNotNan1(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_DOUBLE_IS_NAN(234.9);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoubleIsNotNan2(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_DOUBLE_IS_NOT_NAN(234.9);
+#endif
+}
+
+void testDoubleInfIsNotNan(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_DOUBLE_IS_NAN(1.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoubleNanIsNotInf(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_DOUBLE_IS_INF(0.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoubleIsDeterminate1(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_DOUBLE_IS_DETERMINATE(0.0);
+    TEST_ASSERT_DOUBLE_IS_DETERMINATE(123.3);
+    TEST_ASSERT_DOUBLE_IS_DETERMINATE(-88.3);
+#endif
+}
+
+void testDoubleIsDeterminate2(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(-88.3);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoubleIsNotDeterminate1(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(1.0 / d_zero);
+    TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(-1.0 / d_zero);
+    TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(0.0 / d_zero);
+#endif
+}
+
+void testDoubleIsNotDeterminate2(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_DOUBLE_IS_DETERMINATE(-1.0 / d_zero);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testDoubleTraitFailsOnInvalidTrait(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    EXPECT_ABORT_BEGIN
+    UnityAssertDoubleSpecial(1.0, NULL, __LINE__, UNITY_FLOAT_INVALID_TRAIT);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testEqualDoubleArrays(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double p0[] = {1.0, -8.0,  25.4, -0.123};
+    double p1[] = {1.0, -8.0,  25.4, -0.123};
+    double p2[] = {1.0, -8.0,  25.4, -0.2};
+    double p3[] = {1.0, -23.0, 25.0, -0.26};
+
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p0, 1);
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p0, 4);
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4);
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p2, 3);
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p3, 1);
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(NULL, NULL, 1);
+#endif
+}
+
+void testNotEqualDoubleArraysExpectedNull(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double* p0 = NULL;
+    double p1[] = {1.0, 8.0, 25.4, 0.252};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualDoubleArraysActualNull(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double p0[] = {1.0, 8.0, 25.4, 0.253};
+    double* p1 = NULL;
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualDoubleArrays1(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double p0[] = {1.0, 8.0, 25.4, 0.25666666667};
+    double p1[] = {1.0, 8.0, 25.4, 0.25666666666};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualDoubleArrays2(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double p0[] = {1.0, 8.0, 25.4, 0.253};
+    double p1[] = {2.0, 8.0, 25.4, 0.253};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualDoubleArrays3(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double p0[] = {1.0, 8.0, 25.4, 0.253};
+    double p1[] = {1.0, 8.0, 25.5, 0.253};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualDoubleArraysNegative1(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double p0[] = {-1.0, -8.0, -25.4, -0.2566666667};
+    double p1[] = {-1.0, -8.0, -25.4, -0.2566666666};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualDoubleArraysNegative2(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double p0[] = {-1.0, -8.0, -25.4, -0.253};
+    double p1[] = {-2.0, -8.0, -25.4, -0.253};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualDoubleArraysNegative3(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double p0[] = {-1.0, -8.0, -25.4, -0.253};
+    double p1[] = {-1.0, -8.0, -25.5, -0.253};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualDoubleArraysNaN(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double p0[] = {1.0, 0.0 / d_zero, 25.4, 0.253};
+    double p1[] = {1.0, 0.0 / d_zero, 25.4, 0.253};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualDoubleArraysInf(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double p0[] = {1.0, 1.0 / d_zero, 25.4, 0.253};
+    double p1[] = {1.0, 1.0 / d_zero, 25.4, 0.253};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4);
+    VERIFY_FAILS_END
+#endif
+}
+
+void testNotEqualDoubleArraysLengthZero(void)
+{
+#ifdef UNITY_EXCLUDE_DOUBLE
+    TEST_IGNORE();
+#else
+    double p0[1] = {0.0};
+    double p1[1] = {0.0};
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 0);
+    VERIFY_FAILS_END
+#endif
+}
+
+// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES DETAIL SUPPORT ==================
+
+void testThatDetailsCanBeHandleOneDetail(void)
+{
+#ifdef UNITY_EXCLUDE_DETAILS
+    TEST_IGNORE();
+#else
+    UNITY_SET_DETAIL("Detail1");
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_INT_MESSAGE(5, 6, "Should Fail And Say Detail1");
+    VERIFY_FAILS_END
+#endif
+}
+
+void testThatDetailsCanHandleTestFail(void)
+{
+#ifdef UNITY_EXCLUDE_DETAILS
+    TEST_IGNORE();
+#else
+    UNITY_SET_DETAILS("Detail1","Detail2");
+
+    EXPECT_ABORT_BEGIN
+    TEST_FAIL_MESSAGE("Should Fail And Say Detail1 and Detail2");
+    VERIFY_FAILS_END
+#endif
+}
+
+void testThatDetailsCanBeHandleTwoDetails(void)
+{
+#ifdef UNITY_EXCLUDE_DETAILS
+    TEST_IGNORE();
+#else
+    UNITY_SET_DETAILS("Detail1","Detail2");
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_HEX8_MESSAGE(7, 8, "Should Fail And Say Detail1 and Detail2");
+    VERIFY_FAILS_END
+#endif
+}
+
+void testThatDetailsCanBeHandleSingleDetailClearingTwoDetails(void)
+{
+#ifdef UNITY_EXCLUDE_DETAILS
+    TEST_IGNORE();
+#else
+    UNITY_SET_DETAILS("Detail1","Detail2");
+    UNITY_SET_DETAIL("DetailNew");
+
+    EXPECT_ABORT_BEGIN
+    TEST_ASSERT_EQUAL_STRING_MESSAGE("MEH", "GUH", "Should Fail And Say DetailNew");
+    VERIFY_FAILS_END
+#endif
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/all_tests.mk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,102 @@
+# -----------------------------------------------------------------------
+# Copyright (c) 2016 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+
+###########################################################################
+# Define test targets based on PROJECT
+# Make files that include this must define TARGET_PLATFORM and TARGET_CONFIGURATION_DEFINES
+#
+# Clive Bluston
+###########################################################################
+
+# The root of PAL. All sources should be relative to this.
+#PAL_ROOT = $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+PAL_ROOT=..
+$(info PAL_ROOT=$(PAL_ROOT))
+
+# output folder:
+OUT:=$(PAL_ROOT)/out/$(TARGET_PLATFORM)
+OUTOBJ:=$(OUT)/obj
+$(OUTOBJ):
+	$(MKDIR_QUIET) $@
+
+
+INIT_SRC   = $(PAL_ROOT)/Source/PAL-Impl/pal_init.c 
+
+RTOS_SRC   = $(PAL_ROOT)/Source/PAL-Impl/Modules/RTOS/pal_rtos.c \
+			 $(PAL_ROOT)/Source/Port/Reference-Impl/$(TARGET_PLATFORM)/RTOS/pal_plat_rtos.c \
+			 
+SOCKET_SRC = $(PAL_ROOT)/Source/PAL-Impl/Modules/Networking/pal_network.c \
+			 $(PAL_ROOT)/Source/Port/Reference-Impl/$(TARGET_PLATFORM)/Networking/pal_plat_network.cpp
+			 
+UPDATE_SRC = 
+
+
+
+ALL_SRC = $(INIT_SRC) $(RTOS_SRC) $(SOCKET_SRC) $(UPDATE_SRC)			 
+
+
+
+#========================================================================
+ifeq ($(findstring HAS_ALL,$(TARGET_CONFIGURATION_DEFINES)),HAS_ALL)
+PROJECT=pal_all
+TYPE=Unitest
+
+$(PROJECT)_ADDITIONAL_SOURCES:= $(ALL_SRC) \
+								$(PAL_ROOT)/Test/$(TYPE)/pal_socket_test.c \
+								$(PAL_ROOT)/Test/$(TYPE)/pal_socket_test_runner.c \
+								$(PAL_ROOT)/Test/$(TYPE)/pal_rtos_test.c \
+								$(PAL_ROOT)/Test/$(TYPE)/pal_rtos_test_runner.c \
+																						
+
+include BUILD_TEST_$(TARGET_PLATFORM).mk
+else
+#========================================================================
+#=======================================================================
+ifeq ($(findstring HAS_SOCKET,$(TARGET_CONFIGURATION_DEFINES)),HAS_SOCKET)
+PROJECT=pal_socket
+TYPE=Unitest
+
+$(PROJECT)_ADDITIONAL_SOURCES:=  $(ALL_SRC) 
+
+
+
+include BUILD_TEST_$(TARGET_PLATFORM).mk
+endif
+#========================================================================
+ifeq ($(findstring HAS_RTOS,$(TARGET_CONFIGURATION_DEFINES)),HAS_RTOS)
+PROJECT=pal_rtos
+TYPE=Unitest
+
+$(PROJECT)_ADDITIONAL_SOURCES:= $(ALL_SRC) 
+
+include BUILD_TEST_$(TARGET_PLATFORM).mk
+endif
+
+#========================================================================
+
+#========================================================================
+ifeq ($(findstring HAS_UPDATE,$(TARGET_CONFIGURATION_DEFINES)),HAS_UPDATE)
+PROJECT=pal_update
+TYPE=Unitest
+
+$(PROJECT)_ADDITIONAL_SOURCES:= $(ALL_SRC) 
+
+include BUILD_TEST_$(TARGET_PLATFORM).mk
+endif
+#========================================================================
+
+endif
\ No newline at end of file
Binary file pal/Test/eclipseBuildDialog.png has changed
Binary file pal/Test/eclipseBuildDialog2.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/make_platform.mk	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,40 @@
+# -----------------------------------------------------------------------
+# Copyright (c) 2016 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+###########################################################################
+# Platform detection
+# All make platform dependent definitions shoud go here.
+#
+#  Clive Bluston
+###########################################################################
+
+# Define shell commands for each platform
+OS:=$(strip $(shell uname))
+ifeq ($(OS),Linux)
+  $(info OS =  $(OS))
+  $(info PATH =  $(PATH))
+  SHELL=/bin/bash
+  MKDIR_QUIET  =  mkdir -p
+  RM = rm -f -r
+  CAT = cat
+  ECHO = echo
+else
+  $(info OS =  Windows)
+  MKDIR_QUIET  =  mkdir
+  RM = del
+  CAT = type
+  ECHO = echo
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Test/makefile	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,38 @@
+# -----------------------------------------------------------------------
+# Copyright (c) 2016 ARM Limited. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+
+###############################################################
+# make all target platforms
+#
+# 
+###############################################################
+# Make platform detection and definitions
+include make_platform.mk 
+
+
+.PHONY: all clean check
+
+#====================================================
+# Platform morpheus
+TARGET_PLATFORM:=mbedOS
+TARGET_CONFIGURATION_DEFINES:=  HAS_RTOS HAS_SOCKET 
+all: mbedOS_all
+check: mbedOS_check
+clean: mbedOS_clean 
+include all_tests.mk
+#====================================================
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/Utils/Scripts/Readme.md	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+# PAL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pal/apache-2.0.txt	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,56 @@
+
+
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+    You must give any other recipients of the Work or Derivative Works a copy of this License; and
+    You must cause any modified files to carry prominent notices stating that You changed the files; and
+    You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+    If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+    You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/security.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __SECURITY_H__
+#define __SECURITY_H__
+
+#include <inttypes.h>
+
+#define MBED_DOMAIN "DOMAIN"
+#define MBED_ENDPOINT_NAME "ENDPOINT_NAME"
+
+const uint8_t SERVER_CERT[] = "-----BEGIN CERTIFICATE-----\r\n"
+"-----END CERTIFICATE-----\r\n";
+
+const uint8_t CERT[] = "-----BEGIN CERTIFICATE-----\r\n"
+"-----END CERTIFICATE-----\r\n";
+
+const uint8_t KEY[] = "-----BEGIN PRIVATE KEY-----\r\n"
+"-----END PRIVATE KEY-----\r\n";
+
+#endif //__SECURITY_H__
+
+#error "You need to get security.h credentials from connector.mbed.com and replace the content of this security.h file"
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG.lib	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/ble-x-nucleo-idb0xa1/#dde7a56eb87aeb54d4967afa49ec1dbfb5ce4298
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/FETCH_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,12 @@
+0cc9a762e07c90d960373c9ce80693c89996bdf6	not-for-merge	branch 'apalmieri' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
+e41257f540a07ec47279a0f514b491c54716a4b7	not-for-merge	branch 'betzw_wb' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
+c21998c9579e3c57e3e1619a977b9bc47a36d249	not-for-merge	branch 'fix_filename_collision' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
+117ed4c55629877d7cb3d79c4bcb24e7da5bcab0	not-for-merge	branch 'fix_include_paths' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
+f873197c0de7e8cd00a70a870432b7621dd5e094	not-for-merge	branch 'fix_multiclient_updates' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
+ea14052dd71b7ad4e91e2dcd5fe3141472ff4c43	not-for-merge	branch 'fix_scan_timeout' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
+0bcacb0ccfbc39eab58729f314aa06f2736489d7	not-for-merge	branch 'gatt_client_dev' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
+6670a4495aafe1601a105ec9f6606f70b4c3424c	not-for-merge	branch 'master' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
+1162d38221c6e172dea85e18c66e1122eeb793b3	not-for-merge	branch 'new_aci' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
+7b242e25ed2bc04230f0e62d1ae2c076bfc1c354	not-for-merge	branch 'rtos' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
+af1d84618655ed0f9f8f0faa3591ab512645edf7	not-for-merge	branch 'update_advertisement_paylod_while_advertising' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
+83c30f290087a6f5a503812f507492e725a3b717	not-for-merge	branch 'workshop-july' of https://github.com/ARMmbed/ble-x-nucleo-idb0xa1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+dde7a56eb87aeb54d4967afa49ec1dbfb5ce4298
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/ORIG_HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+6670a4495aafe1601a105ec9f6606f70b4c3424c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/config	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,11 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[remote "origin"]
+	fetch = +refs/heads/*:refs/remotes/origin/*
+	url = https://github.com/ARMmbed/ble-x-nucleo-idb0xa1/
+[branch "master"]
+	remote = origin
+	merge = refs/heads/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/description	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/hooks/applypatch-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/hooks/commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/hooks/post-update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/hooks/pre-applypatch.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/hooks/pre-commit.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	echo "Error: Attempt to add a non-ascii file name."
+	echo
+	echo "This can cause problems if you want to work"
+	echo "with people on other platforms."
+	echo
+	echo "To be portable it is advisable to rename the file ..."
+	echo
+	echo "If you know what you are doing you can disable this"
+	echo "check using:"
+	echo
+	echo "  git config hooks.allownonascii true"
+	echo
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/hooks/pre-rebase.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/hooks/prepare-commit-msg.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/hooks/update.sample	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
Binary file shields/TARGET_ST_BLUENRG/.git/index has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/info/exclude	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,25 @@
+.hg
+.git
+.svn
+.CVS
+.cvs
+*.orig
+.build
+.export
+.msub
+.meta
+.ctags*
+*.uvproj
+*.uvopt
+*.project
+*.cproject
+*.launch
+*.ewp
+*.eww
+Makefile
+Debug
+*.htm
+*.settings
+mbed_settings.py
+*.py[cod]
+# subrepo ignores
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/logs/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,2 @@
+0000000000000000000000000000000000000000 6670a4495aafe1601a105ec9f6606f70b4c3424c www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056549 +0000	clone: from https://github.com/ARMmbed/ble-x-nucleo-idb0xa1/
+6670a4495aafe1601a105ec9f6606f70b4c3424c dde7a56eb87aeb54d4967afa49ec1dbfb5ce4298 www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056551 +0000	checkout: moving from master to dde7a56eb87aeb54d4967afa49ec1dbfb5ce4298
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/logs/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 6670a4495aafe1601a105ec9f6606f70b4c3424c www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056549 +0000	clone: from https://github.com/ARMmbed/ble-x-nucleo-idb0xa1/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/logs/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+0000000000000000000000000000000000000000 6670a4495aafe1601a105ec9f6606f70b4c3424c www-data <www-data@developer-sjc-cyan-compiler.local.mbed.org> 1492056549 +0000	clone: from https://github.com/ARMmbed/ble-x-nucleo-idb0xa1/
Binary file shields/TARGET_ST_BLUENRG/.git/objects/pack/pack-d5afa65ddd4dbf1d37591242573f6f9dcb6778e1.idx has changed
Binary file shields/TARGET_ST_BLUENRG/.git/objects/pack/pack-d5afa65ddd4dbf1d37591242573f6f9dcb6778e1.pack has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/packed-refs	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,49 @@
+# pack-refs with: peeled 
+0cc9a762e07c90d960373c9ce80693c89996bdf6 refs/remotes/origin/apalmieri
+e41257f540a07ec47279a0f514b491c54716a4b7 refs/remotes/origin/betzw_wb
+c21998c9579e3c57e3e1619a977b9bc47a36d249 refs/remotes/origin/fix_filename_collision
+117ed4c55629877d7cb3d79c4bcb24e7da5bcab0 refs/remotes/origin/fix_include_paths
+f873197c0de7e8cd00a70a870432b7621dd5e094 refs/remotes/origin/fix_multiclient_updates
+ea14052dd71b7ad4e91e2dcd5fe3141472ff4c43 refs/remotes/origin/fix_scan_timeout
+0bcacb0ccfbc39eab58729f314aa06f2736489d7 refs/remotes/origin/gatt_client_dev
+6670a4495aafe1601a105ec9f6606f70b4c3424c refs/remotes/origin/master
+1162d38221c6e172dea85e18c66e1122eeb793b3 refs/remotes/origin/new_aci
+7b242e25ed2bc04230f0e62d1ae2c076bfc1c354 refs/remotes/origin/rtos
+af1d84618655ed0f9f8f0faa3591ab512645edf7 refs/remotes/origin/update_advertisement_paylod_while_advertising
+83c30f290087a6f5a503812f507492e725a3b717 refs/remotes/origin/workshop-july
+a5d5d0b558395110a5c2edd398a167b1a70e7c99 refs/tags/mbed-os-5.1.0
+6781fbb835912132d7fed0d78606c7090ae03959 refs/tags/mbed-os-5.1.0-rc3
+44a5175745b1aeb1e3742d9a300c7b8774566a0e refs/tags/v0.1.0
+^c57ee241e8e3cdd69147f67219086db7c0f6bf90
+6b611da9073ae8779ac7b4fbfb0154321e9a4ce3 refs/tags/v0.1.1
+^aba7f5c39488adc9b483365ca6aa0fdd172f7cf3
+7c06ca587f57c95c6d9c2b318b2ff4f42c3be5c8 refs/tags/v0.1.2
+^7d788241063248ffa32a1d08a1156a904e268632
+62a015a0f0ae6779a4e25325158af8ded67629fd refs/tags/v0.1.3
+^7278c8dd4feef68c1b82c65950b95c67a3ecc588
+39108e80899735be7c1c107eedfd26bd3a10f125 refs/tags/v0.1.4
+^969ce736b86a5d699eddfef01cb982ae12b212f7
+b3502a530df58b36c4de64eca8de8b0bc7979b67 refs/tags/v0.1.5
+^180e80479204d838e4d19341d82678e9168edb65
+07700a0d0cfc668c79c756df725555b4daaabbd6 refs/tags/v1.0.0
+^248ee1c56454efa59465946ca92866d163f0f31e
+c06565618d209a5b62258c7e9275252432e96678 refs/tags/v1.1.0
+^db33e83add08bd3129f059b507224ec872e81492
+4185eae0dfb8ff6c7b363e274baea45f1bd6035c refs/tags/v1.1.1
+^365a4de6938986ab3ac96b0dabd021d335f244c2
+af6f250b9a7657c0c84ddc4abba20481747b717f refs/tags/v1.1.2
+^40cc9d3a41656a21699ff8050752793437175621
+fd1484600eef3d8e243c826fce09878fbd383b27 refs/tags/v1.1.3
+^e41257f540a07ec47279a0f514b491c54716a4b7
+508047a8b0fe73f807c309eed2faa2b71bcb83f9 refs/tags/v2.0.0
+^191999682294d0cccd345f5aada543b51d7cfe08
+cc4438b25d8c293e8ce7be4366606a2b41287b9f refs/tags/v2.0.1
+^83b3ec07ac2470c9df1d3742fb1b3de39bdbf502
+8c75e2fdcb2df525fc75d7851b50a37156f2e1a7 refs/tags/v2.0.2
+^0cc9a762e07c90d960373c9ce80693c89996bdf6
+8be92dadc39c54c1083b8b15fda311c900ca3896 refs/tags/v2.0.3
+^623c837ee15677acec0fca25a88c8576d0af97d7
+21276ae0668a998c4e4d83e58b8719337dece9b1 refs/tags/v2.1.0
+^7c82dbe71630c69410de24d80a5a854feaf53729
+23cd8cb5db3c7dc7b646cb314ba35f1fa2fbcfcf refs/tags/v2.2.0
+^88fca0499ff5ed1fe0c4aebc3474d799c5baa472
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/refs/heads/master	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+6670a4495aafe1601a105ec9f6606f70b4c3424c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.git/refs/remotes/origin/HEAD	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1 @@
+ref: refs/remotes/origin/master
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/.gitignore	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,9 @@
+# vim temporary files
+*.sw*
+
+# yotta files
+build
+yotta_modules
+yotta_targets
+.yotta.json
+upload.tar.gz
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/module.json	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,37 @@
+{
+  "name": "x-nucleo-idb0xa1",
+  "version": "2.1.0",
+  "description": "ST driver for the mbed BLE API.",
+  "keywords": [
+    "expansion",
+    "board",
+    "x-nucleo",
+    "nucleo",
+    "ST",
+    "STM",
+    "Bluetooth",
+    "BLE"
+  ],
+  "author": "Andrea Palmieri",
+  "repository": {
+    "url": "https://github.com/ARMmbed/ble-x-nucleo-idb0xa1.git",
+    "type": "git"
+  },
+  "homepage": "https://github.com/ARMmbed/ble-x-nucleo-idb0xa1",
+  "licenses": [
+    {
+      "url": "https://spdx.org/licenses/Apache-2.0",
+      "type": "Apache-2.0"
+    }
+  ],
+  "extraIncludes": [
+    "x-nucleo-idb0xa1",
+    "x-nucleo-idb0xa1/utils",
+    "x-nucleo-idb0xa1/platform",
+    "x-nucleo-idb0xa1/bluenrg-hci"
+  ],
+  "dependencies": {
+    "mbed-drivers": ">=0.11.3",
+    "ble": "^2.7.0"
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/BlueNRGDevice.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,475 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/**
+  ******************************************************************************
+  * @file    BlueNRGDevice.cpp
+  * @author  STMicroelectronics
+  * @brief   Implementation of BLEDeviceInstanceBase
+  ******************************************************************************
+  * @copy
+  *
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+  *
+  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
+  */
+
+/** @defgroup BlueNRGDevice
+ *  @brief BlueNRG BLE_API Device Adaptation
+ *  @{
+ */
+ 
+#ifdef YOTTA_CFG_MBED_OS
+    #include "mbed-drivers/mbed.h"
+#else
+    #include "mbed.h"
+#endif
+#include "BlueNRGDevice.h"
+#include "BlueNRGGap.h"
+#include "BlueNRGGattServer.h"
+
+#include "btle.h"
+#include "ble_utils.h"
+#include "ble_osal.h"
+
+#include "ble_debug.h"
+#include "stm32_bluenrg_ble.h"
+
+extern "C" {
+    #include "ble_hci.h"
+    #include "bluenrg_utils.h"
+}
+
+#define HEADER_SIZE 5
+#define MAX_BUFFER_SIZE 255
+
+/**
+ * The singleton which represents the BlueNRG transport for the BLEDevice.
+ *
+ * See file 'x_nucleo_idb0xa1_targets.h' for details regarding the peripheral pins used!
+ */
+#include "x_nucleo_idb0xa1_targets.h"
+
+BlueNRGDevice bluenrgDeviceInstance(IDB0XA1_PIN_SPI_MOSI,
+                                    IDB0XA1_PIN_SPI_MISO,
+                                    IDB0XA1_PIN_SPI_SCK,
+                                    IDB0XA1_PIN_SPI_nCS,
+                                    IDB0XA1_PIN_SPI_RESET,
+                                    IDB0XA1_PIN_SPI_IRQ);
+
+/**
+* BLE-API requires an implementation of the following function in order to
+* obtain its transport handle.
+*/
+BLEInstanceBase *
+createBLEInstance(void)
+{
+    return (&bluenrgDeviceInstance);
+}
+
+/**************************************************************************/
+/**
+    @brief  Constructor
+     * @param mosi mbed pin to use for MOSI line of SPI interface
+     * @param miso mbed pin to use for MISO line of SPI interface
+     * @param sck mbed pin to use for SCK line of SPI interface
+     * @param cs mbed pin to use for not chip select line of SPI interface
+     * @param rst mbed pin to use for BlueNRG reset
+     * @param irq mbed pin for BlueNRG IRQ
+*/
+/**************************************************************************/
+BlueNRGDevice::BlueNRGDevice(PinName mosi,
+                             PinName miso,
+                             PinName sck,
+                             PinName cs,
+                             PinName rst,
+                             PinName irq) :
+	isInitialized(false), spi_(mosi, miso, sck), nCS_(cs), rst_(rst), irq_(irq)
+{
+    // Setup the spi for 8 bit data, low clock polarity,
+    // 1-edge phase, with an 8MHz clock rate
+    spi_.format(8, 0);
+    spi_.frequency(8000000);
+
+    // Deselect the BlueNRG chip by keeping its nCS signal high
+    nCS_ = 1;
+
+    wait_us(500);
+
+    // Prepare communication between the host and the BlueNRG SPI interface
+    HCI_Init();
+
+    // Set the interrupt handler for the device
+    irq_.mode(PullDown); // set irq mode
+    irq_.rise(&HCI_Isr);
+}
+
+/**************************************************************************/
+/**
+    @brief  Destructor
+*/
+/**************************************************************************/
+BlueNRGDevice::~BlueNRGDevice(void)
+{
+}
+
+/**
+  * @brief  Get BlueNRG HW version in bootloader mode
+  * @param  hw_version The HW version is written to this parameter
+  * @retval It returns BLE_STATUS_SUCCESS on success or an error code otherwise
+  */
+uint8_t BlueNRGDevice::getUpdaterHardwareVersion(uint8_t *hw_version)
+{
+	uint8_t status;
+
+	status = getBlueNRGUpdaterHWVersion(hw_version);
+
+	return (status);
+}
+
+/**
+  * @brief  Flash a new firmware using internal bootloader.
+  * @param  fw_image     Pointer to the firmware image (raw binary data,
+  *                      little-endian).
+  * @param  fw_size      Size of the firmware image. The firmware image size shall
+  *                      be multiple of 4 bytes.
+  * @retval int      It returns BLE_STATUS_SUCCESS on success, or a number
+  *                  not equal to 0 in case of error
+  *                  (ACI_ERROR, UNSUPPORTED_VERSION, WRONG_IMAGE_SIZE, CRC_ERROR)
+  */
+int BlueNRGDevice::updateFirmware(const uint8_t *fw_image, uint32_t fw_size)
+{
+	int status = program_device(fw_image, fw_size);
+
+	return (status);
+}
+
+
+/**
+  * @brief  Initialises anything required to start using BLE
+  * @param[in] instanceID
+  *              The ID of the instance to initialize.
+  * @param[in] callback
+  *              A callback for when initialization completes for a BLE
+  *              instance. This is an optional parameter set to NULL when not
+  *              supplied.
+  *
+  * @return BLE_ERROR_NONE if the initialization procedure was started
+  *         successfully.
+  */
+ble_error_t BlueNRGDevice::init(BLE::InstanceID_t instanceID, FunctionPointerWithContext<BLE::InitializationCompleteCallbackContext *> callback)
+{
+	if (isInitialized) {
+        	BLE::InitializationCompleteCallbackContext context = {
+        	    BLE::Instance(instanceID),
+        	    BLE_ERROR_ALREADY_INITIALIZED
+        	};
+        	callback.call(&context);
+        	return BLE_ERROR_ALREADY_INITIALIZED;
+    	}
+
+	// Init the BlueNRG/BlueNRG-MS stack
+	btleInit();
+
+	isInitialized = true;
+	BLE::InitializationCompleteCallbackContext context = {
+	        BLE::Instance(instanceID),
+	        BLE_ERROR_NONE
+	};
+	callback.call(&context);
+
+	return BLE_ERROR_NONE;
+}
+
+
+/**
+    @brief  Resets the BLE HW, removing any existing services and
+            characteristics
+    @param[in] void
+    @returns    void
+*/
+void BlueNRGDevice::reset(void)
+{
+    wait_us(500);
+
+    /* Reset BlueNRG SPI interface */
+	  rst_ = 0;
+  	wait_us(5);
+	  rst_ = 1;
+  	wait_us(5);
+
+    /* Wait for the radio to come back up */
+    wait_us(500);
+
+}
+
+/*!
+  @brief  Wait for any BLE Event like BLE Connection, Read Request etc.
+  @param[in] void
+  @returns    char *
+*/
+void BlueNRGDevice::waitForEvent(void)
+{
+	bool must_return = false;
+
+	do {
+        bluenrgDeviceInstance.processEvents();
+
+		if(must_return) return;
+
+		__WFE(); /* it is recommended that SEVONPEND in the
+			    System Control Register is NOT set */
+		must_return = true; /* after returning from WFE we must guarantee
+				       that conrol is given back to main loop before next WFE */
+	} while(true);
+
+}
+
+/*!
+    @brief  get GAP version
+    @brief Get the BLE stack version information
+    @param[in] void
+    @returns    char *
+    @returns char *
+*/
+const char *BlueNRGDevice::getVersion(void)
+{
+    return getVersionString();
+}
+
+/**************************************************************************/
+/*!
+    @brief  get reference to GAP object
+    @param[in] void
+    @returns    Gap&
+*/
+/**************************************************************************/
+Gap        &BlueNRGDevice::getGap()
+{
+    return BlueNRGGap::getInstance();
+}
+
+const Gap  &BlueNRGDevice::getGap() const
+{
+    return BlueNRGGap::getInstance();
+}
+
+/**************************************************************************/
+/*!
+    @brief  get reference to GATT server object
+    @param[in] void
+    @returns    GattServer&
+*/
+/**************************************************************************/
+GattServer &BlueNRGDevice::getGattServer()
+{
+    return BlueNRGGattServer::getInstance();
+}
+
+const GattServer &BlueNRGDevice::getGattServer() const
+{
+    return BlueNRGGattServer::getInstance();
+}
+
+/**************************************************************************/
+/*!
+    @brief  shut down the BLE device
+    @param[out] error if any
+*/
+/**************************************************************************/
+ble_error_t  BlueNRGDevice::shutdown(void) {
+    if (!isInitialized) {
+        return BLE_ERROR_INITIALIZATION_INCOMPLETE;
+    }
+
+    /* Reset the BlueNRG device first */
+    reset();
+
+    /* Shutdown the BLE API and BlueNRG glue code */
+    ble_error_t error;
+
+    /* GattServer instance */
+    error = BlueNRGGattServer::getInstance().reset();
+    if (error != BLE_ERROR_NONE) {
+       return error;
+    }
+
+    /* GattClient instance */
+    error = BlueNRGGattClient::getInstance().reset();
+    if (error != BLE_ERROR_NONE) {
+        return error;
+    }
+
+    /* Gap instance */
+    error = BlueNRGGap::getInstance().reset();
+    if (error != BLE_ERROR_NONE) {
+        return error;
+    }
+
+    isInitialized = false;
+
+    return BLE_ERROR_NONE;
+
+}
+
+/**
+ * @brief  Reads from BlueNRG SPI buffer and store data into local buffer.
+ * @param  buffer   : Buffer where data from SPI are stored
+ * @param  buff_size: Buffer size
+ * @retval int32_t  : Number of read bytes
+ */
+int32_t BlueNRGDevice::spiRead(uint8_t *buffer, uint8_t buff_size)
+{
+  uint16_t byte_count;
+  uint8_t len = 0;
+  uint8_t char_ff = 0xff;
+  volatile uint8_t read_char;
+
+	uint8_t i = 0;
+	volatile uint8_t tmpreg;
+
+  uint8_t header_master[HEADER_SIZE] = {0x0b, 0x00, 0x00, 0x00, 0x00};
+  uint8_t header_slave[HEADER_SIZE];
+
+  /* Select the chip */
+  nCS_ = 0;
+
+  /* Read the header */
+  for (i = 0; i < 5; i++)
+  {
+		tmpreg = spi_.write(header_master[i]);
+		header_slave[i] = (uint8_t)(tmpreg);
+  }
+
+  if (header_slave[0] == 0x02) {
+    /* device is ready */
+    byte_count = (header_slave[4]<<8)|header_slave[3];
+
+    if (byte_count > 0) {
+
+      /* avoid to read more data that size of the buffer */
+      if (byte_count > buff_size){
+        byte_count = buff_size;
+      }
+
+      for (len = 0; len < byte_count; len++){
+        read_char = spi_.write(char_ff);
+				buffer[len] = read_char;
+      }
+    }
+  }
+  /* Release CS line to deselect the chip */
+  nCS_ = 1;
+
+  // Add a small delay to give time to the BlueNRG to set the IRQ pin low
+  // to avoid a useless SPI read at the end of the transaction
+  for(volatile int i = 0; i < 2; i++)__NOP();
+
+#ifdef PRINT_CSV_FORMAT
+  if (len > 0) {
+    print_csv_time();
+    for (int i=0; i<len; i++) {
+      PRINT_CSV(" %02x", buffer[i]);
+    }
+    PRINT_CSV("\n");
+  }
+#endif
+
+  return len;
+}
+
+/**
+ * @brief  Writes data from local buffer to SPI.
+ * @param  data1    : First data buffer to be written
+ * @param  data2    : Second data buffer to be written
+ * @param  Nb_bytes1: Size of first data buffer to be written
+ * @param  Nb_bytes2: Size of second data buffer to be written
+ * @retval Number of read bytes
+ */
+int32_t BlueNRGDevice::spiWrite(uint8_t* data1,
+				uint8_t* data2, uint8_t Nb_bytes1, uint8_t Nb_bytes2)
+{
+	int32_t result = 0;
+	uint32_t i;
+	volatile uint8_t tmpreg;
+
+  unsigned char header_master[HEADER_SIZE] = {0x0a, 0x00, 0x00, 0x00, 0x00};
+  unsigned char header_slave[HEADER_SIZE]  = {0xaa, 0x00, 0x00, 0x00, 0x00};
+
+  disable_irq();
+
+  /* CS reset */
+  nCS_ = 0;
+
+  /* Exchange header */
+  for (i = 0; i < 5; i++)
+  {
+		tmpreg = spi_.write(header_master[i]);
+		header_slave[i] = tmpreg;
+  }
+
+  if (header_slave[0] == 0x02) {
+    /* SPI is ready */
+    if (header_slave[1] >= (Nb_bytes1+Nb_bytes2)) {
+
+      /*  Buffer is big enough */
+			for (i = 0; i < Nb_bytes1; i++) {
+				spi_.write(*(data1 + i));
+      }
+      for (i = 0; i < Nb_bytes2; i++) {
+				spi_.write(*(data2 + i));
+      }
+    } else {
+      /* Buffer is too small */
+      result = -2;
+    }
+  } else {
+    /* SPI is not ready */
+    result = -1;
+  }
+
+  /* Release CS line */
+  //HAL_GPIO_WritePin(BNRG_SPI_CS_PORT, BNRG_SPI_CS_PIN, GPIO_PIN_SET);
+  nCS_ = 1;
+
+  enable_irq();
+
+  return result;
+}
+
+bool BlueNRGDevice::dataPresent()
+{
+    return (irq_ == 1);
+}
+
+void BlueNRGDevice::disable_irq()
+{
+    irq_.disable_irq();
+}
+
+void BlueNRGDevice::enable_irq()
+{
+    irq_.enable_irq();
+}
+
+void BlueNRGDevice::processEvents() {
+    btle_handler();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/BlueNRGDiscoveredCharacteristic.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,68 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "BlueNRGDiscoveredCharacteristic.h"
+#include "BlueNRGGattClient.h"
+
+void BlueNRGDiscoveredCharacteristic::setup(BlueNRGGattClient *gattcIn,
+                                            Gap::Handle_t     connectionHandleIn,
+                                            DiscoveredCharacteristic::Properties_t    propsIn,
+                                            GattAttribute::Handle_t  declHandleIn,
+                                            GattAttribute::Handle_t  valueHandleIn,
+                                            GattAttribute::Handle_t  lastHandleIn)
+{
+    gattc       = gattcIn;
+    connHandle  = connectionHandleIn;
+    declHandle  = declHandleIn;
+    valueHandle = valueHandleIn;
+    lastHandle  = lastHandleIn;
+
+    props._broadcast       = propsIn.broadcast();
+    props._read            = propsIn.read();
+    props._writeWoResp     = propsIn.writeWoResp();
+    props._write           = propsIn.write();
+    props._notify          = propsIn.notify();
+    props._indicate        = propsIn.indicate();
+    props._authSignedWrite = propsIn.authSignedWrite();
+}
+
+void BlueNRGDiscoveredCharacteristic::setup(BlueNRGGattClient         *gattcIn,
+                                            Gap::Handle_t            connectionHandleIn,
+                                            UUID   uuidIn,
+                                            DiscoveredCharacteristic::Properties_t    propsIn,
+                                            GattAttribute::Handle_t  declHandleIn,
+                                            GattAttribute::Handle_t  valueHandleIn,
+                                            GattAttribute::Handle_t  lastHandleIn)
+{
+    gattc       = gattcIn;
+    connHandle  = connectionHandleIn;
+    uuid        = uuidIn;
+    declHandle  = declHandleIn;
+    valueHandle = valueHandleIn;
+    lastHandle  = lastHandleIn;
+
+    props._broadcast       = propsIn.broadcast();
+    props._read            = propsIn.read();
+    props._writeWoResp     = propsIn.writeWoResp();
+    props._write           = propsIn.write();
+    props._notify          = propsIn.notify();
+    props._indicate        = propsIn.indicate();
+    props._authSignedWrite = propsIn.authSignedWrite();
+}
+
+ void BlueNRGDiscoveredCharacteristic::setLastHandle(GattAttribute::Handle_t  lastHandleIn) {
+     lastHandle = lastHandleIn;
+ }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/BlueNRGGap.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1447 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+/**
+  ******************************************************************************
+  * @file    BlueNRGGap.cpp
+  * @author  STMicroelectronics
+  * @brief   Implementation of BLE_API Gap Class
+  ******************************************************************************
+  * @copy
+  *
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+  *
+  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
+  */
+
+/** @defgroup BlueNRGGap
+ *  @brief BlueNRG BLE_API GAP Adaptation
+ *  @{
+ */
+
+#include "BlueNRGDevice.h"
+#ifdef YOTTA_CFG_MBED_OS
+    #include "mbed-drivers/mbed.h"
+#else
+    #include "mbed.h"
+#endif
+#include "ble_payload.h"
+#include "ble_utils.h"
+#include "ble_debug.h"
+
+/*
+ * Utility to process GAP specific events (e.g., Advertising timeout)
+ */
+void BlueNRGGap::Process(void)
+{
+    if(AdvToFlag) {
+        stopAdvertising();
+    }
+
+}
+
+/**************************************************************************/
+/*!
+    @brief  Sets the advertising parameters and payload for the device.
+            Note: Some data types give error when their adv data is updated using aci_gap_update_adv_data() API
+
+    @params[in] advData
+                The primary advertising data payload
+    @params[in] scanResponse
+                The optional Scan Response payload if the advertising
+                type is set to \ref GapAdvertisingParams::ADV_SCANNABLE_UNDIRECTED
+                in \ref GapAdveritinngParams
+
+    @returns    \ref ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @retval     BLE_ERROR_BUFFER_OVERFLOW
+                The proposed action would cause a buffer overflow.  All
+                advertising payloads must be <= 31 bytes, for example.
+
+    @retval     BLE_ERROR_NOT_IMPLEMENTED
+                A feature was requested that is not yet supported in the
+                nRF51 firmware or hardware.
+
+    @retval     BLE_ERROR_PARAM_OUT_OF_RANGE
+                One of the proposed values is outside the valid range.
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::setAdvertisingData(const GapAdvertisingData &advData, const GapAdvertisingData &scanResponse)
+{
+    PRINTF("BlueNRGGap::setAdvertisingData\n\r");
+    /* Make sure we don't exceed the advertising payload length */
+    if (advData.getPayloadLen() > GAP_ADVERTISING_DATA_MAX_PAYLOAD) {
+        PRINTF("Exceeded the advertising payload length\n\r");
+        return BLE_ERROR_BUFFER_OVERFLOW;
+    }
+
+    /* Make sure we have a payload! */
+    if (advData.getPayloadLen() != 0) {
+        PayloadPtr loadPtr(advData.getPayload(), advData.getPayloadLen());
+
+        /* Align the GAP Service Appearance Char value coherently
+           This setting is duplicate (see below GapAdvertisingData::APPEARANCE)
+           since BLE API has an overloaded function for appearance
+        */
+        STORE_LE_16(deviceAppearance, advData.getAppearance());
+        setAppearance((GapAdvertisingData::Appearance)(deviceAppearance[1]<<8|deviceAppearance[0]));
+
+
+        for(uint8_t index=0; index<loadPtr.getPayloadUnitCount(); index++) {
+            loadPtr.getUnitAtIndex(index);
+
+            PRINTF("adData[%d].length=%d\n\r", index,(uint8_t)(*loadPtr.getUnitAtIndex(index).getLenPtr()));
+            PRINTF("adData[%d].AdType=0x%x\n\r", index,(uint8_t)(*loadPtr.getUnitAtIndex(index).getAdTypePtr()));
+
+            switch(*loadPtr.getUnitAtIndex(index).getAdTypePtr()) {
+            /**< TX Power Level (in dBm) */
+            case GapAdvertisingData::TX_POWER_LEVEL:
+                {
+                PRINTF("Advertising type: TX_POWER_LEVEL\n\r");
+                int8_t enHighPower = 0;
+                int8_t paLevel = 0;
+
+                int8_t dbm = *loadPtr.getUnitAtIndex(index).getDataPtr();
+                tBleStatus ret = getHighPowerAndPALevelValue(dbm, enHighPower, paLevel);
+#ifdef DEBUG
+                PRINTF("dbm=%d, ret=%d\n\r", dbm, ret);
+                PRINTF("enHighPower=%d, paLevel=%d\n\r", enHighPower, paLevel);
+#endif
+                if(ret == BLE_STATUS_SUCCESS) {
+                  aci_hal_set_tx_power_level(enHighPower, paLevel);
+                }
+                break;
+                }
+            /**< Appearance */
+            case GapAdvertisingData::APPEARANCE:
+                {
+                PRINTF("Advertising type: APPEARANCE\n\r");
+
+                GapAdvertisingData::Appearance appearanceP;
+                memcpy(deviceAppearance, loadPtr.getUnitAtIndex(index).getDataPtr(), 2);
+
+                PRINTF("input: deviceAppearance= 0x%x 0x%x\n\r", deviceAppearance[1], deviceAppearance[0]);
+
+                appearanceP = (GapAdvertisingData::Appearance)(deviceAppearance[1]<<8|deviceAppearance[0]);
+                /* Align the GAP Service Appearance Char value coherently */
+                setAppearance(appearanceP);
+                break;
+                }
+
+            } // end switch
+
+        } //end for
+
+    }
+
+    // update the advertising data in the shield if advertising is running
+    if (state.advertising == 1) {
+        tBleStatus ret = hci_le_set_scan_resp_data(scanResponse.getPayloadLen(), scanResponse.getPayload());
+
+        if(BLE_STATUS_SUCCESS != ret) {
+            PRINTF(" error while setting scan response data (ret=0x%x)\n", ret);
+            switch (ret) {
+                case BLE_STATUS_TIMEOUT:
+                    return BLE_STACK_BUSY;
+                default:
+                    return BLE_ERROR_UNSPECIFIED;
+            }
+        }
+
+        ret = hci_le_set_advertising_data(advData.getPayloadLen(), advData.getPayload());
+        if (ret) {
+            PRINTF("error while setting the payload\r\n");
+            return BLE_ERROR_UNSPECIFIED;
+        }
+    }
+
+    _advData = advData;
+    _scanResponse = scanResponse;
+
+    return BLE_ERROR_NONE;
+}
+
+/*
+ * Utility to set ADV timeout flag
+ */
+void BlueNRGGap::setAdvToFlag(void) {
+    AdvToFlag = true;
+}
+
+/*
+ * ADV timeout callback
+ */
+#ifdef AST_FOR_MBED_OS
+static void advTimeoutCB(void)
+{
+    Gap::GapState_t state;
+
+    state = BlueNRGGap::getInstance().getState();
+    if (state.advertising == 1) {
+
+        BlueNRGGap::getInstance().stopAdvertising();
+
+    }
+}
+#else
+static void advTimeoutCB(void)
+{
+    Gap::GapState_t state;
+
+    state = BlueNRGGap::getInstance().getState();
+    if (state.advertising == 1) {
+
+        BlueNRGGap::getInstance().setAdvToFlag();
+
+        Timeout t = BlueNRGGap::getInstance().getAdvTimeout();
+        t.detach(); /* disable the callback from the timeout */
+
+    }
+}
+#endif /* AST_FOR_MBED_OS */
+
+/**************************************************************************/
+/*!
+    @brief  Starts the BLE HW, initialising any services that were
+            added before this function was called.
+
+    @param[in]  params
+                Basic advertising details, including the advertising
+                delay, timeout and how the device should be advertised
+
+    @note   All services must be added before calling this function!
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+
+ble_error_t BlueNRGGap::startAdvertising(const GapAdvertisingParams &params)
+{
+    tBleStatus ret;
+    int err;
+
+    /* Make sure we support the advertising type */
+    if (params.getAdvertisingType() == GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) {
+        /* ToDo: This requires a proper security implementation, etc. */
+        return BLE_ERROR_NOT_IMPLEMENTED;
+    }
+
+    /* Check interval range */
+    if (params.getAdvertisingType() == GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED) {
+        /* Min delay is slightly longer for unconnectable devices */
+        if ((params.getIntervalInADVUnits() < GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MIN_NONCON) ||
+                (params.getIntervalInADVUnits() > GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MAX)) {
+            return BLE_ERROR_PARAM_OUT_OF_RANGE;
+        }
+    } else {
+        if ((params.getIntervalInADVUnits() < GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MIN) ||
+                (params.getIntervalInADVUnits() > GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MAX)) {
+            return BLE_ERROR_PARAM_OUT_OF_RANGE;
+        }
+    }
+
+    /* Check timeout is zero for Connectable Directed */
+    if ((params.getAdvertisingType() == GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) && (params.getTimeout() != 0)) {
+        /* Timeout must be 0 with this type, although we'll never get here */
+        /* since this isn't implemented yet anyway */
+        return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    }
+
+    /* Check timeout for other advertising types */
+    if ((params.getAdvertisingType() != GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) &&
+            (params.getTimeout() > GapAdvertisingParams::GAP_ADV_PARAMS_TIMEOUT_MAX)) {
+        return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    }
+
+    /*
+     * Advertising filter policy setting
+     * FIXME: the Security Manager should be implemented
+     */
+    AdvertisingPolicyMode_t mode = getAdvertisingPolicyMode();
+    if(mode != ADV_POLICY_IGNORE_WHITELIST) {
+        ret = aci_gap_configure_whitelist();
+        if(ret != BLE_STATUS_SUCCESS) {
+          PRINTF("aci_gap_configure_whitelist ret=0x%x\n\r", ret);
+          return BLE_ERROR_OPERATION_NOT_PERMITTED;
+        }
+    }
+
+    uint8_t advFilterPolicy = NO_WHITE_LIST_USE;
+    switch(mode) {
+        case ADV_POLICY_FILTER_SCAN_REQS:
+            advFilterPolicy = WHITE_LIST_FOR_ONLY_SCAN;
+            break;
+        case ADV_POLICY_FILTER_CONN_REQS:
+            advFilterPolicy = WHITE_LIST_FOR_ONLY_CONN;
+            break;
+        case ADV_POLICY_FILTER_ALL_REQS:
+            advFilterPolicy = WHITE_LIST_FOR_ALL;
+            break;
+        default:
+            advFilterPolicy = NO_WHITE_LIST_USE;
+            break;
+    }
+
+    /* Check the ADV type before setting scan response data */
+    if (params.getAdvertisingType() == GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED ||
+        params.getAdvertisingType() == GapAdvertisingParams::ADV_SCANNABLE_UNDIRECTED) {
+
+        /* set scan response data */
+        PRINTF(" setting scan response data (_scanResponseLen=%u)\n", _scanResponse.getPayloadLen());
+        ret = hci_le_set_scan_resp_data(_scanResponse.getPayloadLen(), _scanResponse.getPayload());
+
+        if(BLE_STATUS_SUCCESS!=ret) {
+            PRINTF(" error while setting scan response data (ret=0x%x)\n", ret);
+            switch (ret) {
+              case BLE_STATUS_TIMEOUT:
+                return BLE_STACK_BUSY;
+              default:
+                return BLE_ERROR_UNSPECIFIED;
+            }
+        }
+    } else {
+        hci_le_set_scan_resp_data(0, NULL);
+    }
+
+    setAdvParameters();
+    PRINTF("advInterval=%d advType=%d\n\r", advInterval, params.getAdvertisingType());
+
+    err = hci_le_set_advertising_data(_advData.getPayloadLen(), _advData.getPayload());
+
+    if (err) {
+        PRINTF("error while setting the payload\r\n");
+        return BLE_ERROR_UNSPECIFIED;
+    }
+
+    tBDAddr dummy_addr = { 0 };
+    uint16_t advIntervalMin = advInterval == GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MAX ? advInterval - 1 : advInterval;
+    uint16_t advIntervalMax = advIntervalMin + 1;
+
+    err = hci_le_set_advertising_parameters(
+        advIntervalMin,
+        advIntervalMax,
+        params.getAdvertisingType(),
+    	addr_type,
+        0x00,
+        dummy_addr,
+        /* all channels */ 7,
+    	advFilterPolicy
+    );
+
+    if (err) {
+        PRINTF("impossible to set advertising parameters\n\r");
+        PRINTF("advInterval min: %u, advInterval max: %u\n\r", advInterval, advInterval + 1);
+        PRINTF("advType: %u, advFilterPolicy: %u\n\r", params.getAdvertisingType(), advFilterPolicy);
+        return BLE_ERROR_INVALID_PARAM;
+    }
+
+    err = hci_le_set_advertise_enable(0x01);
+    if (err) {
+        PRINTF("impossible to start advertising\n\r");
+        return BLE_ERROR_UNSPECIFIED;
+    }
+
+    state.advertising = 1;
+
+    AdvToFlag = false;
+    if(params.getTimeout() != 0) {
+        PRINTF("!!! attaching to!!!\n");
+#ifdef AST_FOR_MBED_OS
+        minar::Scheduler::postCallback(advTimeoutCB).delay(minar::milliseconds(params.getTimeout() * 1000));
+#else
+        advTimeout.attach(advTimeoutCB, params.getTimeout() * 1000);
+#endif
+    }
+
+    return BLE_ERROR_NONE;
+
+}
+
+
+/**************************************************************************/
+/*!
+    @brief  Stops the BLE HW and disconnects from any devices
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::stopAdvertising(void)
+{
+
+    if(state.advertising == 1) {
+
+        int err = hci_le_set_advertise_enable(0);
+        if (err) {
+            return BLE_ERROR_OPERATION_NOT_PERMITTED;
+        }
+
+        PRINTF("Advertisement stopped!!\n\r") ;
+        //Set GapState_t::advertising state
+        state.advertising = 0;
+    }
+
+    return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Disconnects if we are connected to a central device
+
+    @param[in]  reason
+                Disconnection Reason
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::disconnect(Handle_t connectionHandle, Gap::DisconnectionReason_t reason)
+{
+    tBleStatus ret;
+
+    ret = aci_gap_terminate(connectionHandle, reason);
+
+    if (BLE_STATUS_SUCCESS != ret){
+        PRINTF("Error in GAP termination (ret=0x%x)!!\n\r", ret) ;
+        switch (ret) {
+          case ERR_COMMAND_DISALLOWED:
+            return BLE_ERROR_OPERATION_NOT_PERMITTED;
+          case BLE_STATUS_TIMEOUT:
+            return BLE_STACK_BUSY;
+          default:
+            return BLE_ERROR_UNSPECIFIED;
+        }
+    }
+
+    return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Disconnects if we are connected to a central device
+
+    @param[in]  reason
+                Disconnection Reason
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::disconnect(Gap::DisconnectionReason_t reason)
+{
+    return disconnect(m_connectionHandle, reason);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Sets the 16-bit connection handle
+
+    @param[in]  conn_handle
+                Connection Handle which is set in the Gap Instance
+
+    @returns    void
+*/
+/**************************************************************************/
+void BlueNRGGap::setConnectionHandle(uint16_t conn_handle)
+{
+    m_connectionHandle = conn_handle;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Gets the 16-bit connection handle
+
+    @param[in]  void
+
+    @returns    uint16_t
+                Connection Handle of the Gap Instance
+*/
+/**************************************************************************/
+uint16_t BlueNRGGap::getConnectionHandle(void)
+{
+    return m_connectionHandle;
+}
+
+/**************************************************************************/
+/*!
+    @brief      Sets the BLE device address. SetAddress will reset the BLE
+                device and re-initialize BTLE. Will not start advertising.
+
+    @param[in]  type
+                Type of Address
+
+    @param[in]  address[6]
+                Value of the Address to be set
+
+    @returns    ble_error_t
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::setAddress(AddressType_t type, const BLEProtocol::AddressBytes_t address)
+{
+    if (type > BLEProtocol::AddressType::RANDOM_PRIVATE_NON_RESOLVABLE) {
+        return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    }
+
+    if(type == BLEProtocol::AddressType::PUBLIC){
+        tBleStatus ret = aci_hal_write_config_data(
+            CONFIG_DATA_PUBADDR_OFFSET,
+            CONFIG_DATA_PUBADDR_LEN,
+            address
+        );
+        if(ret != BLE_STATUS_SUCCESS) {
+            return BLE_ERROR_OPERATION_NOT_PERMITTED;
+        }
+    } else if  (type == BLEProtocol::AddressType::RANDOM_STATIC) {
+        // ensure that the random static address is well formed
+        if ((address[5] & 0xC0) != 0xC0) {
+            return BLE_ERROR_PARAM_OUT_OF_RANGE;
+        }
+
+        // thanks to const correctness of the API ...
+        tBDAddr random_address = { 0 };
+        memcpy(random_address, address, sizeof(random_address));
+        int err = hci_le_set_random_address(random_address);
+        if (err) {
+            return BLE_ERROR_OPERATION_NOT_PERMITTED;
+        }
+
+        // It is not possible to get the bluetooth address when it is set
+        // store it locally in class data member
+        memcpy(bdaddr, address, sizeof(bdaddr));
+    } else {
+        // FIXME random addresses are not supported yet
+        // BLEProtocol::AddressType::RANDOM_PRIVATE_NON_RESOLVABLE
+        // BLEProtocol::AddressType::RANDOM_PRIVATE_RESOLVABLE
+        return BLE_ERROR_NOT_IMPLEMENTED;
+    }
+
+    // if we're here then the address was correctly set
+    // commit it inside the addr_type
+    addr_type = type;
+    isSetAddress = true;
+    return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief      Returns boolean if the address of the device has been set
+                or not
+
+    @returns    bool
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+bool BlueNRGGap::getIsSetAddress()
+{
+    return isSetAddress;
+}
+
+/**************************************************************************/
+/*!
+    @brief      Returns the address of the device if set
+
+    @returns    Pointer to the address if Address is set else NULL
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::getAddress(BLEProtocol::AddressType_t *typeP, BLEProtocol::AddressBytes_t address)
+{
+    uint8_t bdaddr[BDADDR_SIZE];
+    uint8_t data_len_out;
+
+    // precondition, check that pointers in input are valid
+    if (typeP == NULL || address == NULL) {
+        return BLE_ERROR_INVALID_PARAM;
+    }
+
+    if (addr_type == BLEProtocol::AddressType::PUBLIC) {
+        tBleStatus ret = aci_hal_read_config_data(CONFIG_DATA_PUBADDR_OFFSET, BDADDR_SIZE, &data_len_out, bdaddr);
+        if(ret != BLE_STATUS_SUCCESS || data_len_out != BDADDR_SIZE) {
+            return BLE_ERROR_UNSPECIFIED;
+        }
+    } else if (addr_type == BLEProtocol::AddressType::RANDOM_STATIC) {
+        // FIXME hci_read_bd_addr and
+        // aci_hal_read_config_data CONFIG_DATA_RANDOM_ADDRESS_IDB05A1
+        // does not work, use the address stored in class data member
+        memcpy(bdaddr, this->bdaddr, sizeof(bdaddr));
+    } else {
+        // FIXME: should be implemented with privacy features
+        // BLEProtocol::AddressType::RANDOM_PRIVATE_NON_RESOLVABLE
+        // BLEProtocol::AddressType::RANDOM_PRIVATE_RESOLVABLE
+        return BLE_ERROR_NOT_IMPLEMENTED;
+    }
+
+    *typeP = addr_type;
+    memcpy(address, bdaddr, BDADDR_SIZE);
+
+    return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief      obtains preferred connection params
+
+    @returns    ble_error_t
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::getPreferredConnectionParams(ConnectionParams_t *params)
+{
+    static const size_t parameter_size = 2;
+
+    if (!g_preferred_connection_parameters_char_handle) {
+        return BLE_ERROR_OPERATION_NOT_PERMITTED;
+    }
+
+    // Peripheral preferred connection parameters are an array of 4 uint16_t
+    uint8_t parameters_packed[parameter_size * 4];
+    uint16_t bytes_read = 0;
+
+    tBleStatus err = aci_gatt_read_handle_value(
+        g_preferred_connection_parameters_char_handle + BlueNRGGattServer::CHAR_VALUE_HANDLE,
+        sizeof(parameters_packed),
+        &bytes_read,
+        parameters_packed
+    );
+
+    PRINTF("getPreferredConnectionParams err=0x%02x (bytes_read=%u)\n\r", err, bytes_read);
+
+    // check that the read succeed and the result have the expected length
+    if (err || bytes_read != sizeof(parameters_packed)) {
+        return BLE_ERROR_UNSPECIFIED;
+    }
+
+    // memcpy field by field
+    memcpy(&params->minConnectionInterval, parameters_packed, parameter_size);
+    memcpy(&params->maxConnectionInterval, &parameters_packed[parameter_size], parameter_size);
+    memcpy(&params->slaveLatency, &parameters_packed[2 * parameter_size], parameter_size);
+    memcpy(&params->connectionSupervisionTimeout, &parameters_packed[3 * parameter_size], parameter_size);
+
+    return BLE_ERROR_NONE;
+}
+
+
+/**************************************************************************/
+/*!
+    @brief      sets preferred connection params
+
+    @returns    ble_error_t
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::setPreferredConnectionParams(const ConnectionParams_t *params)
+{
+    static const size_t parameter_size = 2;
+    uint8_t parameters_packed[parameter_size * 4];
+
+    // ensure that parameters are correct
+    // see BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part C]
+    // section 12.3 PERIPHERAL PREFERRED CONNECTION PARAMETERS CHARACTERISTIC
+    if (((0x0006 > params->minConnectionInterval) || (params->minConnectionInterval > 0x0C80)) &&
+        params->minConnectionInterval != 0xFFFF) {
+        return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    }
+
+    if (((params->minConnectionInterval > params->maxConnectionInterval) || (params->maxConnectionInterval > 0x0C80)) &&
+        params->maxConnectionInterval != 0xFFFF) {
+        return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    }
+
+    if (params->slaveLatency > 0x01F3) {
+        return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    }
+
+    if (((0x000A > params->connectionSupervisionTimeout) || (params->connectionSupervisionTimeout > 0x0C80)) &&
+        params->connectionSupervisionTimeout != 0xFFFF) {
+        return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    }
+
+    // copy the parameters inside the byte array
+    memcpy(parameters_packed, &params->minConnectionInterval, parameter_size);
+    memcpy(&parameters_packed[parameter_size], &params->maxConnectionInterval, parameter_size);
+    memcpy(&parameters_packed[2 * parameter_size], &params->slaveLatency, parameter_size);
+    memcpy(&parameters_packed[3 * parameter_size], &params->connectionSupervisionTimeout, parameter_size);
+
+    tBleStatus err = aci_gatt_update_char_value(
+        g_gap_service_handle,
+        g_preferred_connection_parameters_char_handle,
+        /* offset */ 0,
+        sizeof(parameters_packed),
+        parameters_packed
+    );
+
+    if (err) {
+        PRINTF("setPreferredConnectionParams failed (err=0x%x)!!\n\r", err) ;
+        switch (err) {
+          case BLE_STATUS_INVALID_HANDLE:
+          case BLE_STATUS_INVALID_PARAMETER:
+            return BLE_ERROR_INVALID_PARAM;
+          case BLE_STATUS_INSUFFICIENT_RESOURCES:
+            return BLE_ERROR_NO_MEM;
+          case BLE_STATUS_TIMEOUT:
+            return BLE_STACK_BUSY;
+          default:
+            return BLE_ERROR_UNSPECIFIED;
+        }
+    }
+
+    return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief      updates preferred connection params
+
+    @returns    ble_error_t
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::updateConnectionParams(Handle_t handle, const ConnectionParams_t *params)
+{
+    tBleStatus ret = BLE_STATUS_SUCCESS;
+
+    if(gapRole == Gap::CENTRAL) {
+        ret = aci_gap_start_connection_update(handle,
+                                              params->minConnectionInterval,
+                                              params->maxConnectionInterval,
+                                              params->slaveLatency,
+                                              params->connectionSupervisionTimeout,
+                                              CONN_L1, CONN_L2);
+    } else {
+        ret = aci_l2cap_connection_parameter_update_request(handle,
+                                                            params->minConnectionInterval,
+                                                            params->maxConnectionInterval,
+                                                            params->slaveLatency,
+                                                            params->connectionSupervisionTimeout);
+    }
+
+    if (BLE_STATUS_SUCCESS != ret){
+        PRINTF("updateConnectionParams failed (ret=0x%x)!!\n\r", ret) ;
+        switch (ret) {
+          case ERR_INVALID_HCI_CMD_PARAMS:
+          case BLE_STATUS_INVALID_PARAMETER:
+            return BLE_ERROR_INVALID_PARAM;
+          case ERR_COMMAND_DISALLOWED:
+          case BLE_STATUS_NOT_ALLOWED:
+            return BLE_ERROR_OPERATION_NOT_PERMITTED;
+          default:
+            return BLE_ERROR_UNSPECIFIED;
+        }
+    }
+
+    return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Sets the Device Name Characteristic
+
+    @param[in]  deviceName
+                pointer to device name to be set
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::setDeviceName(const uint8_t *deviceName)
+{
+    tBleStatus ret;
+    uint8_t nameLen = 0;
+
+    nameLen = strlen((const char*)deviceName);
+    PRINTF("DeviceName Size=%d\n\r", nameLen);
+
+    ret = aci_gatt_update_char_value(g_gap_service_handle,
+                                     g_device_name_char_handle,
+                                     0,
+                                     nameLen,
+                                     deviceName);
+
+    if (BLE_STATUS_SUCCESS != ret){
+        PRINTF("device set name failed (ret=0x%x)!!\n\r", ret) ;
+        switch (ret) {
+          case BLE_STATUS_INVALID_HANDLE:
+          case BLE_STATUS_INVALID_PARAMETER:
+            return BLE_ERROR_INVALID_PARAM;
+          case BLE_STATUS_INSUFFICIENT_RESOURCES:
+            return BLE_ERROR_NO_MEM;
+          case BLE_STATUS_TIMEOUT:
+            return BLE_STACK_BUSY;
+          default:
+            return BLE_ERROR_UNSPECIFIED;
+        }
+    }
+
+    return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Gets the Device Name Characteristic
+
+    @param[in]  deviceName
+                pointer to device name
+
+    @param[in]  lengthP
+                pointer to device name length
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::getDeviceName(uint8_t *deviceName, unsigned *lengthP)
+{
+    tBleStatus ret;
+
+    ret = aci_gatt_read_handle_value(g_device_name_char_handle+BlueNRGGattServer::CHAR_VALUE_HANDLE,
+                                     *lengthP,
+                                     (uint16_t *)lengthP,
+                                     deviceName);
+    PRINTF("getDeviceName ret=0x%02x (lengthP=%d)\n\r", ret, *lengthP);
+    if (ret == BLE_STATUS_SUCCESS) {
+        return BLE_ERROR_NONE;
+    } else {
+        return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Sets the Device Appearance Characteristic
+
+    @param[in]  appearance
+                device appearance
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::setAppearance(GapAdvertisingData::Appearance appearance)
+{
+    tBleStatus ret;
+    uint8_t deviceAppearance[2];
+
+    STORE_LE_16(deviceAppearance, appearance);
+    PRINTF("setAppearance= 0x%x 0x%x\n\r", deviceAppearance[1], deviceAppearance[0]);
+
+    ret = aci_gatt_update_char_value(g_gap_service_handle,
+                                     g_appearance_char_handle,
+                                     0, 2, (uint8_t *)deviceAppearance);
+    if (BLE_STATUS_SUCCESS == ret){
+        return BLE_ERROR_NONE;
+    }
+
+    PRINTF("setAppearance failed (ret=0x%x)!!\n\r", ret);
+    switch (ret) {
+      case BLE_STATUS_INVALID_HANDLE:
+      case BLE_STATUS_INVALID_PARAMETER:
+        return BLE_ERROR_INVALID_PARAM;
+      case BLE_STATUS_INSUFFICIENT_RESOURCES:
+        return BLE_ERROR_NO_MEM;
+      case BLE_STATUS_TIMEOUT:
+        return BLE_STACK_BUSY;
+      default:
+        return BLE_ERROR_UNSPECIFIED;
+    }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Gets the Device Appearance Characteristic
+
+    @param[in]  appearance
+                pointer to device appearance value
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::getAppearance(GapAdvertisingData::Appearance *appearanceP)
+{
+    tBleStatus ret;
+    uint16_t lengthP = 2;
+
+    ret = aci_gatt_read_handle_value(g_appearance_char_handle+BlueNRGGattServer::CHAR_VALUE_HANDLE,
+                                     lengthP,
+                                     &lengthP,
+                                     (uint8_t*)appearanceP);
+    PRINTF("getAppearance ret=0x%02x (lengthP=%d)\n\r", ret, lengthP);
+    if (ret == BLE_STATUS_SUCCESS) {
+        return BLE_ERROR_NONE;
+    } else {
+        return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    }
+
+}
+
+GapScanningParams* BlueNRGGap::getScanningParams(void)
+{
+  return &_scanningParams;
+}
+
+static void makeConnection(void)
+{
+  BlueNRGGap::getInstance().createConnection();
+}
+
+void BlueNRGGap::Discovery_CB(Reason_t reason,
+                              uint8_t adv_type,
+                              uint8_t addr_type,
+                              uint8_t *addr,
+                              uint8_t *data_length,
+                              uint8_t *data,
+                              uint8_t *RSSI)
+{
+  switch (reason) {
+  case DEVICE_FOUND:
+    {
+      GapAdvertisingParams::AdvertisingType_t type;
+      bool isScanResponse = false;
+
+      /*
+       * Whitelisting (scan policy):
+       * SCAN_POLICY_FILTER_ALL_ADV (ADV packets only from devs in the White List) &&
+       * Private Random Address
+       * => scan_results = FALSE
+       * FIXME: the Security Manager should be implemented
+       */
+      ScanningPolicyMode_t mode = getScanningPolicyMode();
+      PRINTF("mode=%u addr_type=%u\n\r", mode, addr_type);
+      if(mode == Gap::SCAN_POLICY_FILTER_ALL_ADV ||
+         (addr_type == RESOLVABLE_PRIVATE_ADDR ||
+          addr_type == NON_RESOLVABLE_PRIVATE_ADDR)) {
+        return;
+      }
+
+      switch(adv_type) {
+      case ADV_IND:
+        type = GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED;
+        break;
+      case ADV_DIRECT_IND:
+        type = GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED;
+        break;
+      case ADV_SCAN_IND:
+      case SCAN_RSP:
+        type = GapAdvertisingParams::ADV_SCANNABLE_UNDIRECTED;
+        isScanResponse = true;
+        break;
+      case ADV_NONCONN_IND:
+        type = GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED;
+        break;
+      default:
+        type = GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED;
+      }
+
+      PRINTF("data_length=%d adv peerAddr[%02x %02x %02x %02x %02x %02x] \r\n",
+             *data_length, addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]);
+      if(!_connecting) {
+        processAdvertisementReport(addr, *RSSI, isScanResponse, type, *data_length, data);
+      }
+      PRINTF("!!!After processAdvertisementReport\n\r");
+    }
+    break;
+
+  case DISCOVERY_COMPLETE:
+    // The discovery is complete. If this is due to a stop scanning (i.e., the device
+    // we are interested in has been found) and a connection has been requested
+    // then we start the device connection.
+    PRINTF("DISCOVERY_COMPLETE\n\r");
+    _scanning = false;
+
+    // Since the DISCOVERY_COMPLETE event can be received during the scanning interval,
+    // we need to delay the starting of connection
+    uint16_t delay = 2*(_scanningParams.getInterval());
+
+#ifdef AST_FOR_MBED_OS
+    if(_connecting) {
+      minar::Scheduler::postCallback(makeConnection).delay(minar::milliseconds(delay));
+    }
+#else
+    Clock_Wait(delay);
+    if(_connecting) {
+      makeConnection();
+    }
+#endif /* AST_FOR_MBED_OS */
+
+    break;
+  }
+}
+
+ble_error_t BlueNRGGap::startRadioScan(const GapScanningParams &scanningParams)
+{
+
+  tBleStatus ret = BLE_STATUS_SUCCESS;
+
+  // Stop ADV before scanning
+  /*
+  if (state.advertising == 1) {
+    stopAdvertising();
+  }
+  */
+
+  /*
+   * Whitelisting (scan policy):
+   * SCAN_POLICY_FILTER_ALL_ADV (ADV packets only from devs in the White List) &&
+   * White List is empty
+   * => scan operation = FAILURE
+   * FIXME: the Security Manager should be implemented
+   */
+  ScanningPolicyMode_t mode = getScanningPolicyMode();
+  uint8_t whiteListSize = whitelistAddresses.size;
+  if(whiteListSize == 0 && mode == Gap::SCAN_POLICY_FILTER_ALL_ADV) {
+    return BLE_ERROR_OPERATION_NOT_PERMITTED;
+  }
+
+  ret = btleStartRadioScan(scanningParams.getActiveScanning(),
+                           scanningParams.getInterval(),
+                           scanningParams.getWindow(),
+                           addr_type);
+
+  PRINTF("Scanning...\n\r");
+  PRINTF("scanningParams.getInterval()=%u[msec]\r\n",(scanningParams.getInterval()*625)/1000);
+  PRINTF("scanningParams.getWindow()=%u[msec]\r\n",(scanningParams.getWindow()*625)/1000);
+  //PRINTF("_advParams.getInterval()=%u\r\n",_advParams.getInterval());
+  //PRINTF("CONN_P1=%u\r\n",(unsigned)CONN_P1);
+  //PRINTF("CONN_P2=%u\r\n",(unsigned)CONN_P2);
+  if (BLE_STATUS_SUCCESS == ret){
+    PRINTF("Observation Procedure Started\n");
+    _scanning = true;
+    return BLE_ERROR_NONE;
+  }
+
+  // Observer role is not supported by X-NUCLEO-IDB04A1, return BLE_ERROR_NOT_IMPLEMENTED
+  switch (ret) {
+    case BLE_STATUS_INVALID_CID:
+      PRINTF("Observation Procedure not implemented!!!\n\r");
+      return BLE_ERROR_NOT_IMPLEMENTED;
+    default:
+      PRINTF("Observation Procedure failed (0x%02X)\n\r", ret);
+      return BLE_ERROR_UNSPECIFIED;
+  }
+
+}
+
+ble_error_t BlueNRGGap::stopScan() {
+  tBleStatus ret = BLE_STATUS_SUCCESS;
+
+  PRINTF("stopScan\n\r");
+  ret = aci_gap_terminate_gap_procedure(GAP_OBSERVATION_PROC);
+
+  if (ret != BLE_STATUS_SUCCESS) {
+    PRINTF("GAP Terminate Gap Procedure failed(ret=0x%x)\n", ret);
+    return BLE_ERROR_UNSPECIFIED;
+  } else {
+    PRINTF("Discovery Procedure Terminated\n");
+    return BLE_ERROR_NONE;
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  set Tx power level
+    @param[in] txPower Transmission Power level
+    @returns    ble_error_t
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::setTxPower(int8_t txPower)
+{
+    tBleStatus ret;
+
+    int8_t enHighPower = 0;
+    int8_t paLevel = 0;
+
+    ret = getHighPowerAndPALevelValue(txPower, enHighPower, paLevel);
+    if(ret!=BLE_STATUS_SUCCESS) {
+        return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    }
+
+    PRINTF("enHighPower=%d, paLevel=%d\n\r", enHighPower, paLevel);
+    ret = aci_hal_set_tx_power_level(enHighPower, paLevel);
+    if(ret!=BLE_STATUS_SUCCESS) {
+      return BLE_ERROR_PARAM_OUT_OF_RANGE;
+    }
+
+    return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief  get permitted Tx power values
+    @param[in] values pointer to pointer to permitted power values
+    @param[in] num number of values
+*/
+/**************************************************************************/
+void BlueNRGGap::getPermittedTxPowerValues(const int8_t **valueArrayPP, size_t *countP) {
+    static const int8_t permittedTxValues[] = {
+        -18, -15, -14, -12, -11, -9, -8, -6, -5, -2, 0, 2, 4, 5, 8
+    };
+
+    *valueArrayPP = permittedTxValues;
+    *countP = sizeof(permittedTxValues) / sizeof(int8_t);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Set advertising parameters according to the current state
+            Parameters value is set taking into account guidelines of the BlueNRG
+            time slots allocation
+*/
+/**************************************************************************/
+void BlueNRGGap::setAdvParameters(void)
+{
+  uint32_t advIntMS;
+
+  if(state.connected == 1) {
+    advIntMS = (conn_min_interval*1.25)-GUARD_INT;
+    advInterval = _advParams.MSEC_TO_ADVERTISEMENT_DURATION_UNITS(advIntMS);
+
+    PRINTF("conn_min_interval is equal to %u\r\n", conn_min_interval);
+  } else {
+    advInterval = _advParams.getIntervalInADVUnits();
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Set connection parameters according to the current state (ADV and/or SCAN)
+            Parameters value is set taking into account guidelines of the BlueNRG
+            time slots allocation
+*/
+/**************************************************************************/
+void BlueNRGGap::setConnectionParameters(void)
+{
+  if (state.advertising == 1) {
+
+    if (_scanningParams.getInterval() < advInterval) {
+      PRINTF("state.adv=1 scanInterval<advInterval\r\n");
+      scanInterval = advInterval;
+      scanWindow = advInterval;
+    } else {
+      PRINTF("state.adv=1 scanInterval>=advInterval\r\n");
+      scanInterval = _scanningParams.getInterval();
+      scanWindow = _scanningParams.getWindow();
+    }
+
+    if(advInterval>(MAX_INT_CONN-(GUARD_INT/1.25))) { //(4000-GUARD_INT)ms
+        conn_min_interval = MAX_INT_CONN;
+        conn_max_interval = MAX_INT_CONN;
+    } else {
+        conn_min_interval = (_advParams.ADVERTISEMENT_DURATION_UNITS_TO_MS(advInterval)+GUARD_INT)/1.25;
+        conn_max_interval = (_advParams.ADVERTISEMENT_DURATION_UNITS_TO_MS(advInterval)+GUARD_INT)/1.25;
+    }
+
+  } else {
+
+    PRINTF("state.adv = 0\r\n");
+
+    scanInterval = _scanningParams.getInterval();
+    scanWindow = _scanningParams.getWindow();
+    if(SCAN_DURATION_UNITS_TO_MSEC(scanInterval)>(MAX_INT_CONN*1.25) ||
+       SCAN_DURATION_UNITS_TO_MSEC(scanInterval)<(MIN_INT_CONN*1.25)) { //(4000)ms || (7.5)ms
+        conn_min_interval = DEF_INT_CONN;
+        conn_max_interval = DEF_INT_CONN;
+    } else {
+        conn_min_interval = SCAN_DURATION_UNITS_TO_MSEC(scanInterval)/1.25;
+        conn_max_interval = SCAN_DURATION_UNITS_TO_MSEC(scanInterval)/1.25;
+    }
+  }
+  PRINTF("scanInterval=%u[msec]\r\n",SCAN_DURATION_UNITS_TO_MSEC(scanInterval));
+  PRINTF("scanWindow()=%u[msec]\r\n",SCAN_DURATION_UNITS_TO_MSEC(scanWindow));
+  PRINTF("conn_min_interval=%u[msec]\r\n",(unsigned)(conn_min_interval*1.25));
+  PRINTF("conn_max_interval=%u[msec]\r\n",(unsigned)(conn_max_interval*1.25));
+
+}
+
+ble_error_t BlueNRGGap::createConnection ()
+{
+  tBleStatus ret;
+
+  /*
+     Before creating connection, set parameters according
+     to previous or current procedure (ADV and/or SCAN)
+   */
+  setConnectionParameters();
+
+  /*
+    Scan_Interval, Scan_Window, Peer_Address_Type, Peer_Address, Own_Address_Type, Conn_Interval_Min,
+    Conn_Interval_Max, Conn_Latency, Supervision_Timeout, Conn_Len_Min, Conn_Len_Max
+  */
+  ret = aci_gap_create_connection(scanInterval,
+				  scanWindow,
+				  _peerAddrType,
+				  (unsigned char*)_peerAddr,
+				  addr_type,
+				  conn_min_interval, conn_max_interval, 0,
+				  SUPERV_TIMEOUT, CONN_L1, CONN_L1);
+
+  //_connecting = false;
+
+  if (ret != BLE_STATUS_SUCCESS) {
+    PRINTF("Error while starting connection (ret=0x%02X).\n\r", ret);
+    return BLE_ERROR_UNSPECIFIED;
+  } else {
+    PRINTF("Connection started.\n");
+    _connecting = false;
+    return BLE_ERROR_NONE;
+  }
+}
+
+ble_error_t BlueNRGGap::connect (const Gap::Address_t peerAddr,
+                                 Gap::AddressType_t peerAddrType,
+                                 const ConnectionParams_t *connectionParams,
+                                 const GapScanningParams *scanParams)
+{
+  /* avoid compiler warnings about unused variables */
+  (void)connectionParams;
+
+  setScanParams(scanParams->getInterval(),
+                scanParams->getWindow(),
+                scanParams->getTimeout(),
+                scanParams->getActiveScanning()
+               );
+
+  // Save the peer address
+  for(int i=0; i<BDADDR_SIZE; i++) {
+    _peerAddr[i] = peerAddr[i];
+  }
+  _peerAddrType = peerAddrType;
+
+  _connecting = true;
+
+  if(_scanning) {
+    stopScan();
+  } else {
+    PRINTF("Calling createConnection from connect()\n\r");
+    return createConnection();
+  }
+
+  return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Set the advertising policy filter mode that will be used in
+            the next call to startAdvertising().
+
+    @returns    \ref ble_errror_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly.
+
+                BLE_ERROR_NOT_IMPLEMENTED
+                This feature is currently note implemented.
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::setAdvertisingPolicyMode(Gap::AdvertisingPolicyMode_t mode)
+{
+   advertisingPolicyMode = mode;
+
+    return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Set the scanning policy filter mode that will be used in
+            the next call to startAdvertising().
+
+    @returns    \ref ble_errror_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly.
+
+                BLE_ERROR_NOT_IMPLEMENTED
+                This feature is currently note implemented.
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::setScanningPolicyMode(Gap::ScanningPolicyMode_t mode)
+{
+    scanningPolicyMode = mode;
+
+    return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Get the current advertising policy filter mode.
+
+    @returns    The advertising policy filter mode.
+*/
+/**************************************************************************/
+Gap::AdvertisingPolicyMode_t BlueNRGGap::getAdvertisingPolicyMode(void) const
+{
+    return advertisingPolicyMode;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Get the current scanning policy filter mode.
+
+    @returns    The scanning policy filter mode.
+
+*/
+/**************************************************************************/
+Gap::ScanningPolicyMode_t BlueNRGGap::getScanningPolicyMode(void) const
+{
+    return scanningPolicyMode;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Clear BlueNRGGap's state.
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGap::reset(void)
+{
+    /* Clear all state that is from the parent, including private members */
+    if (Gap::reset() != BLE_ERROR_NONE) {
+        return BLE_ERROR_INVALID_STATE;
+    }
+
+    /* Clear derived class members */
+    m_connectionHandle = BLE_CONN_HANDLE_INVALID;
+
+    /* Set the whitelist policy filter modes to IGNORE_WHITELIST */
+    advertisingPolicyMode = Gap::ADV_POLICY_IGNORE_WHITELIST;
+    scanningPolicyMode    = Gap::SCAN_POLICY_IGNORE_WHITELIST;
+
+    return BLE_ERROR_NONE;
+}
+
+void BlueNRGGap::setConnectionInterval(uint16_t interval) {
+    conn_min_interval = interval;
+    conn_max_interval = interval;
+}
+
+void BlueNRGGap::setGapRole(Role_t role)
+{
+    gapRole = role;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/BlueNRGGattClient.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,842 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+/**
+  ******************************************************************************
+  * @file    BlueNRGGattServer.cpp
+  * @author  STMicroelectronics
+  * @brief   Implementation of BlueNRG BLE_API GattServer Class
+  ******************************************************************************
+  * @copy
+  *
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+  *
+  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
+  */
+
+/** @defgroup BlueNRGGATTClient
+ *  @brief BlueNRG BLE_API GattClient Adaptation
+ *  @{
+ */
+
+#include "BlueNRGGattClient.h"
+#ifdef YOTTA_CFG_MBED_OS
+    #include "mbed-drivers/mbed.h"
+#else
+    #include "mbed.h"
+#endif 
+#include "BlueNRGGap.h"
+#include "ble_utils.h"
+#include "ble_debug.h"
+
+static uint8_t props_mask[] = {
+  0x01,
+  0x02,
+  0x04,
+  0x08,
+  0x10,
+  0x20,
+  0x40,
+  0x80
+  };
+
+void BlueNRGGattClient::gattProcedureCompleteCB(Gap::Handle_t connectionHandle, uint8_t error_code)
+{
+  if(error_code != BLE_STATUS_SUCCESS) {
+    _currentState = GATT_IDLE;
+    return;
+  }
+
+  // Service Discovery complete
+/*
+  if(_currentState != GATT_IDLE &&
+     _currentState != GATT_DISCOVERY_TERMINATED &&
+     _currentState != GATT_WRITE_CHAR &&
+     _currentState != GATT_READ_CHAR) {
+*/
+  if(_currentState == GATT_SERVICE_DISCOVERY) {
+    findServiceChars(connectionHandle);
+    return;
+  }
+
+  if(_currentState == GATT_CHAR_DESC_DISCOVERY) {
+      _currentState = GATT_IDLE;
+      if(charDescTerminationCallback != NULL) {
+         CharacteristicDescriptorDiscovery::TerminationCallbackParams_t params = {
+                                   _characteristic,
+                                   BLE_ERROR_NONE
+         };
+         charDescTerminationCallback(&params);
+       }
+      return;
+  }
+
+  // Read complete
+  if(_currentState == GATT_READ_CHAR) {
+    _currentState = GATT_IDLE;
+    BlueNRGGattClient::getInstance().processReadResponse(&readCBParams);
+    free((void*)(readCBParams.data));
+    readCBParams.data = NULL;
+    return;
+  }
+
+  // Write complete
+  if(_currentState == GATT_WRITE_CHAR) {
+    _currentState = GATT_IDLE;
+    BlueNRGGattClient::getInstance().processWriteResponse(&writeCBParams);
+    return;
+  }
+}
+
+void BlueNRGGattClient::primaryServicesCB(Gap::Handle_t connectionHandle,
+                                          uint8_t event_data_length,
+                                          uint8_t attribute_data_length,
+                                          uint8_t *attribute_data_list)
+{
+  GattAttribute::Handle_t startHandle, endHandle;
+  UUID uuid;
+  uint8_t i, offset, numAttr;
+  /* avoid compiler warnings about unused variables */
+  (void)connectionHandle;
+
+  numAttr = (event_data_length - 1) / attribute_data_length;
+
+  offset = 0;
+  for (i=0; i<numAttr; i++) {
+    startHandle = attribute_data_list[offset];
+    endHandle = attribute_data_list[offset+2];
+
+    // UUID Type
+    if (attribute_data_length == 6) {
+
+      PRINTF("UUID_TYPE_16\n\r");
+      uuid = attribute_data_list[offset+5]<<8|attribute_data_list[offset+4];
+      PRINTF("S UUID-%X attrs[%u %u]\r\n", uuid.getShortUUID(), startHandle, endHandle);
+
+    } else {
+
+      PRINTF("UUID_TYPE_128\n\r");
+      uuid.setupLong(attribute_data_list+offset+4, UUID::LSB);
+
+#ifdef DEBUG
+      PRINTF("S UUID-");
+      const uint8_t *longUUIDBytes = uuid.getBaseUUID();
+      for (unsigned j = 0; j < UUID::LENGTH_OF_LONG_UUID; j++) {
+        PRINTF("%02x", longUUIDBytes[j]);
+      }
+#endif
+      PRINTF(" attrs[%u %u]\r\n", startHandle, endHandle);
+
+    }
+
+    PRINTF("Setup serviceIndex = %d\n\r", _numServices);
+    discoveredService[_numServices].setup(uuid, startHandle, endHandle);
+
+    _numServices++;
+
+    offset += attribute_data_length;
+  }
+
+  PRINTF("!!!Service Discovery complete (numAttr=%u)!!!\n\r", numAttr);
+
+}
+
+void BlueNRGGattClient::primaryServiceCB(Gap::Handle_t connectionHandle,
+                                         uint8_t event_data_length,
+                                         uint8_t *handles_info_list)
+{
+  GattAttribute::Handle_t startHandle, endHandle;
+  UUID uuid;
+  uint8_t i, offset, numHandlePairs;
+  /* avoid compiler warnings about unused variables */
+  (void)connectionHandle;
+
+  numHandlePairs = (event_data_length - 1) / 2;
+
+  offset = 0;
+  for (i=0; i<numHandlePairs; i++) {
+    startHandle = handles_info_list[offset];
+    endHandle = handles_info_list[offset+2];
+
+    PRINTF("primaryServiceCB attrs[%u %u]\r\n", startHandle, endHandle);
+
+
+    if (_matchingServiceUUID.shortOrLong() == UUID::UUID_TYPE_SHORT) {
+        PRINTF("S UUID-%x attrs[%u %u]\r\n", _matchingServiceUUID.getShortUUID(), startHandle, endHandle);
+        uuid = _matchingServiceUUID.getShortUUID();
+    } else {
+#ifdef DEBUG
+        PRINTF("S UUID-");
+        const uint8_t *longUUIDBytes = _matchingServiceUUID.getBaseUUID();
+        for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++) {
+            PRINTF("%02x", longUUIDBytes[i]);
+        }
+#endif
+        PRINTF(" attrs[%u %u]\r\n", startHandle, endHandle);
+        uuid.setupLong(_matchingServiceUUID.getBaseUUID(), UUID::MSB);
+    }
+
+    discoveredService[i].setup(uuid, startHandle, endHandle);
+
+    _numServices++;
+
+    offset += 4;
+  }
+}
+
+void BlueNRGGattClient::serviceCharsCB(Gap::Handle_t connectionHandle,
+                                       uint8_t event_data_length,
+                                       uint8_t handle_value_pair_length,
+                                       uint8_t *handle_value_pair)
+{
+  // Charac Handle (2), Charac Properties(1), Charac Value Handle(2), Charac UUID(2/16)
+
+  GattAttribute::Handle_t declHandle, valueHandle, lastHandle;
+  UUID uuid;
+  uint8_t i, numChar, offset;
+
+  numChar = (event_data_length - 1) / handle_value_pair_length;
+
+  PRINTF("event_data_length=%d handle_value_pair_length=%d numChar=%d\n\r", event_data_length, handle_value_pair_length, numChar);
+
+  offset = 0;
+  for (i=0; i<numChar; i++) {
+    // UUID Type
+    if (handle_value_pair_length == 7) {
+      PRINTF("Char UUID_TYPE_16\n\r");
+      uuid = handle_value_pair[offset+6]<<8|handle_value_pair[offset+5];
+      PRINTF("C UUID-%X\r\n", uuid.getShortUUID());
+    } else {
+      PRINTF("Char UUID_TYPE_128\n\r");
+      uuid.setupLong(handle_value_pair+offset+5, UUID::LSB);
+#ifdef DEBUG
+      PRINTF("C UUID-");
+      const uint8_t *longUUIDBytes = uuid.getBaseUUID();
+      for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++) {
+        PRINTF("%02X", longUUIDBytes[i]);
+      }
+      PRINTF("\r\n");
+#endif
+    }
+
+    // Properties
+    DiscoveredCharacteristic::Properties_t p;
+
+    p._broadcast = (props_mask[0] & handle_value_pair[offset+2]);
+    p._read = (props_mask[1] & handle_value_pair[offset+2])>>1;
+    p._writeWoResp = (props_mask[2] & handle_value_pair[offset+2])>>2;
+    p._write = (props_mask[3] & handle_value_pair[offset+2])>>3;
+    p._notify = (props_mask[4] & handle_value_pair[offset+2])>>4;
+    p._indicate = (props_mask[5] & handle_value_pair[offset+2])>>5;
+    p._authSignedWrite = (props_mask[6] & handle_value_pair[offset+2])>>6;
+    PRINTF("p._broadcast=%d\n\r", p._broadcast);
+    PRINTF("p._read=%d\n\r", p._read);
+    PRINTF("p._writeWoResp=%d\n\r", p._writeWoResp);
+    PRINTF("p._write=%d\n\r", p._write);
+    PRINTF("p._notify=%d\n\r", p._notify);
+    PRINTF("p._indicate=%d\n\r", p._indicate);
+    PRINTF("p._authSignedWrite=%d\n\r", p._authSignedWrite);
+
+    /*
+    uint8_t props = handle_value_pair[offset+2];
+    PRINTF("CHAR PROPS: %d\n\r", props);
+    */
+
+    // Handles
+    declHandle = handle_value_pair[offset];
+    valueHandle = handle_value_pair[offset+3];
+    lastHandle = valueHandle+1;
+    PRINTF("declHandle: %u valueHandle=%u lastHandle=%u\n\r", declHandle, valueHandle, lastHandle);
+
+    discoveredChar[_numChars].setup(this,
+                                    connectionHandle,
+                                    uuid,
+                                    p,
+                                    declHandle,
+                                    valueHandle,
+                                    lastHandle);
+
+    if (_numChars != 0) {
+        discoveredChar[_numChars - 1].setLastHandle(declHandle - 1);
+
+        if(characteristicDiscoveryCallback) {
+          characteristicDiscoveryCallback(&discoveredChar[_numChars - 1]);
+        }
+    }
+
+    _numChars++;
+
+    offset += handle_value_pair_length;
+  }
+}
+
+void BlueNRGGattClient::serviceCharByUUIDCB(Gap::Handle_t connectionHandle,
+                                            uint8_t event_data_length,
+                                            uint16_t attr_handle,
+                                            uint8_t *attr_value)
+{
+  // Charac Properties(1), Charac Value Handle(2), Charac UUID(2/16)
+  GattAttribute::Handle_t declHandle, valueHandle, lastHandle;
+  UUID uuid;
+
+  PRINTF("serviceCharByUUIDCB\n\r");
+
+  // UUID Type
+  if (event_data_length == 7) {
+    PRINTF("Char UUID_TYPE_16\n\r");
+    uuid = attr_value[4]<<8|attr_value[3];
+    PRINTF("C UUID-%X\r\n", uuid.getShortUUID());
+  } else {
+    PRINTF("Char UUID_TYPE_128\n\r");
+    uuid.setupLong(attr_value+3, UUID::LSB);
+#ifdef DEBUG
+    PRINTF("C UUID-");
+    const uint8_t *longUUIDBytes = uuid.getBaseUUID();
+    for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++) {
+      PRINTF("%02X", longUUIDBytes[i]);
+    }
+    PRINTF("\r\n");
+#endif
+  }
+
+  // Properties
+  DiscoveredCharacteristic::Properties_t p;
+
+  p._broadcast = (props_mask[0] & attr_value[0]);
+  p._read = (props_mask[1] & attr_value[0])>>1;
+  p._writeWoResp = (props_mask[2] & attr_value[0])>>2;
+  p._write = (props_mask[3] & attr_value[0])>>3;
+  p._notify = (props_mask[4] & attr_value[0])>>4;
+  p._indicate = (props_mask[5] & attr_value[0])>>5;
+  p._authSignedWrite = (props_mask[6] & attr_value[0])>>6;
+  PRINTF("p._broadcast=%d\n\r", p._broadcast);
+  PRINTF("p._read=%d\n\r", p._read);
+  PRINTF("p._writeWoResp=%d\n\r", p._writeWoResp);
+  PRINTF("p._write=%d\n\r", p._write);
+  PRINTF("p._notify=%d\n\r", p._notify);
+  PRINTF("p._indicate=%d\n\r", p._indicate);
+  PRINTF("p._authSignedWrite=%d\n\r", p._authSignedWrite);
+
+  /*
+  uint8_t props = attr_value[0];
+  PRINTF("CHAR PROPS: %d\n\r", props);
+  */
+
+  // Handles
+  declHandle = attr_handle;
+  valueHandle = attr_value[1];
+  lastHandle = valueHandle+1;
+
+  discoveredChar[_numChars].setup(this,
+                                  connectionHandle,
+                                  uuid,
+                                  p,
+                                  declHandle,
+                                  valueHandle,
+                                  lastHandle);
+
+  if(characteristicDiscoveryCallback) {
+    characteristicDiscoveryCallback(&discoveredChar[_numChars]);
+  }
+  _numChars++;
+}
+
+ble_error_t BlueNRGGattClient::findServiceChars(Gap::Handle_t connectionHandle)
+{
+  PRINTF("findServiceChars\n\r");
+
+  tBleStatus ret;
+  uint8_t uuid_type = UUID_TYPE_16;
+  uint8_t short_uuid[2];
+  uint8_t *uuid = NULL;
+
+  DiscoveredService *service;
+
+  // complete the discovery of the last characteristic of the previous service.
+  // Its last handle wasn't known before this point
+  // update the handle and call the characteristic discovery callback.
+  if (_servIndex != 0 && _numChars != 0) {
+      discoveredChar[_numChars - 1].setLastHandle(discoveredService[_servIndex - 1].getEndHandle());
+
+      if(characteristicDiscoveryCallback) {
+        characteristicDiscoveryCallback(&discoveredChar[_numChars - 1]);
+      }
+  }
+
+  _numChars = 0;
+
+  // We finished chars discovery for all services
+  if(_servIndex >= _numServices) {
+    PRINTF("!!!We finished chars discovery for all services!!!\n\r");
+    //_currentState = GATT_CHARS_DISCOVERY_COMPLETE;
+
+    terminateServiceDiscovery();
+
+    return BLE_ERROR_NONE;
+  }
+
+  service = &discoveredService[_servIndex];
+  /*
+  if (service->getUUID().shortOrLong() == UUID::UUID_TYPE_SHORT) {
+    PRINTF("S UUID-%X\r\n", service->getUUID().getShortUUID());
+  } else {
+    PRINTF("S UUID-");
+    const uint8_t *longUUIDBytes = service->getUUID().getBaseUUID();
+    for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++) {
+      PRINTF("%02X", longUUIDBytes[i]);
+    }
+    PRINTF("\r\n");
+  }
+  */
+
+  if(serviceDiscoveryCallback) {
+    serviceDiscoveryCallback(service);
+  }
+
+  PRINTF("findServiceChars (_servIndex=%d)\n\r", _servIndex);
+  //ret = aci_gatt_disc_all_charac_of_serv(connectionHandle, service->getStartHandle(), service->getEndHandle());
+
+    if(_matchingCharacteristicUUIDIn == BLE_UUID_UNKNOWN) {
+        PRINTF("findServiceChars (BLE_UUID_UNKNOWN)\n\r");
+        ret = aci_gatt_disc_all_charac_of_serv(connectionHandle, service->getStartHandle(), service->getEndHandle());
+    } else {
+
+        uint8_t type = _matchingCharacteristicUUIDIn.shortOrLong();
+
+        if(type == UUID::UUID_TYPE_SHORT) {
+            STORE_LE_16(short_uuid, _matchingCharacteristicUUIDIn.getShortUUID());
+
+            uuid_type = UUID_TYPE_16;
+            uuid = short_uuid;
+#ifdef DEBUG
+            PRINTF("findServiceChars C UUID-");
+            for(unsigned i = 0; i < 2; i++) {
+                PRINTF("%02X", short_uuid[i]);
+            }
+            PRINTF("\n\r");
+#endif
+        } else if(type==UUID::UUID_TYPE_LONG) {
+
+            uuid_type = UUID_TYPE_128;
+            uuid = (unsigned char*)_matchingCharacteristicUUIDIn.getBaseUUID();
+#ifdef DEBUG
+            PRINTF("(findServiceChars) C UUID-");
+            for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++) {
+                PRINTF("%02X", uuid[i]);
+            }
+            PRINTF("\r\n");
+#endif
+        }
+
+        ret = aci_gatt_disc_charac_by_uuid(connectionHandle,
+                                           service->getStartHandle(),
+                                           service->getEndHandle(),
+                                           uuid_type,
+                                           uuid);
+    }
+
+  if(ret == BLE_STATUS_SUCCESS) {
+    _servIndex++;
+  }
+
+  PRINTF("findServiceChars ret=%d\n\r", ret);
+
+  return BLE_ERROR_NONE;
+}
+
+ble_error_t BlueNRGGattClient::launchServiceDiscovery(Gap::Handle_t                               connectionHandle,
+                                                      ServiceDiscovery::ServiceCallback_t         sc,
+                                                      ServiceDiscovery::CharacteristicCallback_t  cc,
+                                                      const UUID                                 &matchingServiceUUID,
+                                                      const UUID                                 &matchingCharacteristicUUIDIn)
+{
+  PRINTF("launchServiceDiscovery\n\r");
+
+  tBleStatus ret;
+  uint8_t uuid_type = UUID_TYPE_16;
+  uint8_t short_uuid[2];
+  uint8_t *uuid = NULL;
+  unsigned j;
+
+  if(isServiceDiscoveryActive()) {
+    return BLE_ERROR_OPERATION_NOT_PERMITTED;
+  }
+
+  if(!sc && !cc) {
+    // nothing to do
+    PRINTF("launchServiceDiscovery: nothing to do\n\r");
+    return BLE_ERROR_NONE;
+  }
+
+  _connectionHandle = connectionHandle;
+  serviceDiscoveryCallback = sc;
+  characteristicDiscoveryCallback = cc;
+  _matchingServiceUUID = matchingServiceUUID;
+  _matchingCharacteristicUUIDIn = matchingCharacteristicUUIDIn;
+
+  //reset services
+  _numServices = 0;
+  _numChars = 0;
+  _servIndex = 0;
+  for(j = 0; j < BLE_TOTAL_DISCOVERED_SERVICES; j++) {
+    discoveredService[j].setup(BLE_UUID_UNKNOWN, GattAttribute::INVALID_HANDLE, GattAttribute::INVALID_HANDLE);
+  }
+
+  if(matchingServiceUUID == BLE_UUID_UNKNOWN) {
+
+    // Wildcard: search for all services
+    ret = aci_gatt_disc_all_prim_services((uint16_t)connectionHandle);
+
+  } else {
+
+    uint8_t type = matchingServiceUUID.shortOrLong();
+    //PRINTF("AddService(): Type:%d\n\r", type);
+
+    if(type == UUID::UUID_TYPE_SHORT) {
+      STORE_LE_16(short_uuid, matchingServiceUUID.getShortUUID());
+#ifdef DEBUG
+      PRINTF("launchServiceDiscovery short_uuid=0x");
+      for(j = 0; j < 2; j++) {
+        PRINTF("%02X", short_uuid[j]);
+      }
+      PRINTF("\n\r");
+#endif
+
+      uuid_type = UUID_TYPE_16;
+      uuid = short_uuid;
+
+    } else if(type==UUID::UUID_TYPE_LONG) {
+
+      uuid_type = UUID_TYPE_128;
+      uuid = (unsigned char*)matchingServiceUUID.getBaseUUID();
+
+#ifdef DEBUG
+      PRINTF("launchServiceDiscovery base_uuid=0x");
+      for(j = 0; j < 16; j++) {
+        PRINTF("%02X", uuid[j]);
+      }
+      PRINTF("\n\r");
+#endif
+    }
+
+    // search for specific service by UUID
+    ret = aci_gatt_disc_prim_service_by_uuid((uint16_t)connectionHandle, uuid_type, uuid);
+    //ret = aci_gatt_disc_all_prim_services((uint16_t)connectionHandle);
+  }
+
+  if(ret == BLE_STATUS_SUCCESS) {
+    _currentState = GATT_SERVICE_DISCOVERY;
+  }
+
+  PRINTF("launchServiceDiscovery ret=%d\n\r", ret);
+
+  return BLE_ERROR_NONE;
+}
+
+ble_error_t BlueNRGGattClient::discoverServices(Gap::Handle_t                        connectionHandle,
+                                                ServiceDiscovery::ServiceCallback_t  callback,
+                                                const UUID                          &matchingServiceUUID)
+{
+  /* avoid compiler warnings about unused variables */
+  (void)connectionHandle;
+  (void)callback;
+  (void)matchingServiceUUID;
+
+  return BLE_ERROR_NOT_IMPLEMENTED;
+}
+
+ble_error_t BlueNRGGattClient::discoverServices(Gap::Handle_t                        connectionHandle,
+                                                ServiceDiscovery::ServiceCallback_t  callback,
+                                                GattAttribute::Handle_t              startHandle,
+                                                GattAttribute::Handle_t              endHandle)
+{
+  /* avoid compiler warnings about unused variables */
+  (void)connectionHandle;
+  (void)callback;
+  (void)startHandle;
+  (void)endHandle;
+
+  return BLE_ERROR_NOT_IMPLEMENTED;
+}
+
+bool BlueNRGGattClient::isServiceDiscoveryActive(void) const
+{
+  if(_currentState == GATT_SERVICE_DISCOVERY) {
+    return true;
+  }
+
+  return false;
+/*
+  if(_currentState == GATT_IDLE ||
+     _currentState == GATT_DISCOVERY_TERMINATED ||
+       _currentState == GATT_READ_CHAR ||
+         _currentState == GATT_WRITE_CHAR ) {
+    return false;
+  }
+
+  return true;
+*/
+}
+
+void BlueNRGGattClient::terminateServiceDiscovery(void)
+{
+  _currentState = GATT_IDLE;//GATT_DISCOVERY_TERMINATED;
+
+  if (terminationCallback) {
+    terminationCallback(_connectionHandle);
+  }
+}
+
+void BlueNRGGattClient::charReadCB(Gap::Handle_t connHandle,
+                                   uint8_t event_data_length,
+                                   uint8_t* attribute_value)
+{
+  // copy the data read, they will be forwarded to the user once the procedure
+  // has completed
+  readCBParams.connHandle = connHandle;
+  readCBParams.offset = 0;
+  readCBParams.len = event_data_length;
+  readCBParams.data = static_cast<uint8_t*>(malloc(event_data_length));
+  memcpy((void*)(readCBParams.data), attribute_value, event_data_length);
+}
+
+ble_error_t BlueNRGGattClient::read(Gap::Handle_t connHandle, GattAttribute::Handle_t attributeHandle, uint16_t offset) const
+{
+  /* avoid compiler warnings about unused variables */
+  (void)offset;
+
+  tBleStatus ret;
+
+  BlueNRGGattClient *gattc = const_cast<BlueNRGGattClient*>(this);
+
+  // Save the attribute_handle not provided by evt_att_read_resp
+  gattc->readCBParams.handle = attributeHandle;
+
+  ret = aci_gatt_read_charac_val(connHandle, attributeHandle);
+
+  if(ret == BLE_STATUS_SUCCESS) {
+    gattc->_currentState = GATT_READ_CHAR;
+    return BLE_ERROR_NONE;
+  }
+  switch (ret) {
+  case BLE_STATUS_BUSY:
+    return BLE_STACK_BUSY;
+  default:
+    return BLE_ERROR_INVALID_STATE;
+  }
+}
+
+void BlueNRGGattClient::charWritePrepareCB(Gap::Handle_t connHandle,
+                                           uint8_t event_data_length,
+                                           uint16_t attribute_handle,
+                                           uint16_t offset,
+                                           uint8_t *part_attr_value)
+{
+  /* avoid compiler warnings about unused variables */
+  (void)connHandle;
+
+  // Update the write response params
+  writeCBParams.handle = attribute_handle;
+  writeCBParams.offset = offset;
+  writeCBParams.len = event_data_length-4; //(?)
+  writeCBParams.data = part_attr_value;
+
+  BlueNRGGattClient::getInstance().processWriteResponse(&writeCBParams);
+}
+
+void BlueNRGGattClient::charWriteExecCB(Gap::Handle_t connHandle,
+                                        uint8_t event_data_length)
+{
+  /* avoid compiler warnings about unused variables */
+  (void)event_data_length;
+
+  writeCBParams.connHandle = connHandle;
+
+  BlueNRGGattClient::getInstance().processWriteResponse(&writeCBParams);
+}
+
+ble_error_t BlueNRGGattClient::write(GattClient::WriteOp_t    cmd,
+                                     Gap::Handle_t            connHandle,
+                                     GattAttribute::Handle_t  attributeHandle,
+                                     size_t                   length,
+                                     const uint8_t           *value) const
+{
+  /* avoid compiler warnings about unused variables */
+  (void)cmd;
+
+  tBleStatus ret;
+
+  BlueNRGGattClient *gattc = const_cast<BlueNRGGattClient*>(this);
+
+  // We save the write response params (used by the callback) because
+  // when the aci_gatt_write_charac_value() is used the only event received is the EVT_BLUE_GATT_PROCEDURE_COMPLETE
+  gattc->writeCBParams.connHandle = connHandle;
+  gattc->writeCBParams.writeOp = GattWriteCallbackParams::OP_WRITE_CMD;
+  gattc->writeCBParams.handle = attributeHandle;
+  gattc->writeCBParams.offset = 0;
+  gattc->writeCBParams.len = length;
+  gattc->writeCBParams.data = value;
+
+  ret = aci_gatt_write_charac_value(connHandle, attributeHandle, length, const_cast<uint8_t *>(value));
+  //ret = aci_gatt_write_charac_reliable(connHandle, attributeHandle, 0, length, const_cast<uint8_t *>(value));
+
+  if (ret == BLE_STATUS_SUCCESS) {
+    gattc->_currentState = GATT_WRITE_CHAR;
+    return BLE_ERROR_NONE;
+  }
+  switch (ret) {
+  case BLE_STATUS_BUSY:
+    return BLE_STACK_BUSY;
+  default:
+    return BLE_ERROR_INVALID_STATE;
+  }
+
+}
+
+void BlueNRGGattClient::discAllCharacDescCB(Gap::Handle_t connHandle,
+                                            uint8_t event_data_length,
+                                            uint8_t format,
+                                            uint8_t *handle_uuid_pair) {
+  GattAttribute::Handle_t attHandle;
+  UUID uuid;
+  uint8_t i, numCharacDesc, offset, handle_uuid_length;
+
+  handle_uuid_length = 4; //Handle + UUID_16
+  if (format == 2)
+    handle_uuid_length = 18; //Handle + UUID_128
+
+  numCharacDesc = (event_data_length - 1) / handle_uuid_length;
+
+  offset = 0;
+
+  PRINTF("\r\ncharacteristic descriptor discovered: data length %u, format %u\r\n",
+    event_data_length, format);
+
+
+  for (i=0; i<numCharacDesc; i++) {
+    memcpy(&attHandle, handle_uuid_pair + offset, sizeof(attHandle));
+
+    // UUID Type
+    if (handle_uuid_length == 4) {
+
+      PRINTF("UUID_TYPE_16\n\r");
+      uuid = handle_uuid_pair[offset+3]<<8|handle_uuid_pair[offset+2];
+      PRINTF("D UUID-%X attHandle=%u\r\n", uuid.getShortUUID(), attHandle);
+
+    } else {
+
+      PRINTF("UUID_TYPE_128\n\r");
+      uuid.setupLong(handle_uuid_pair+offset+2, UUID::LSB);
+#ifdef DEBUG
+      PRINTF("D UUID-");
+      const uint8_t *longUUIDBytes = uuid.getBaseUUID();
+      for (unsigned j = 0; j < UUID::LENGTH_OF_LONG_UUID; j++) {
+        PRINTF("%02x", longUUIDBytes[j]);
+      }
+#endif
+     }
+
+     if(charDescDiscoveryCallback != NULL) {
+       CharacteristicDescriptorDiscovery::DiscoveryCallbackParams_t params = {
+                                 _characteristic,
+                                 DiscoveredCharacteristicDescriptor(
+                                   _characteristic.getGattClient(),
+                                   connHandle,
+                                   attHandle,
+                                   uuid
+                                 )
+       };
+       charDescDiscoveryCallback(&params);
+     }
+
+    _numCharDesc++;
+
+    offset += handle_uuid_length;
+  }
+}
+
+ble_error_t BlueNRGGattClient::discoverCharacteristicDescriptors(
+        const DiscoveredCharacteristic& characteristic,
+        const CharacteristicDescriptorDiscovery::DiscoveryCallback_t& discoveryCallback,
+        const CharacteristicDescriptorDiscovery::TerminationCallback_t& terminationCallback) {
+
+  tBleStatus ret;
+
+  if(_currentState != GATT_IDLE) {
+    return BLE_ERROR_OPERATION_NOT_PERMITTED;
+  }
+
+  charDescDiscoveryCallback = discoveryCallback;
+  charDescTerminationCallback = terminationCallback;
+
+  Gap::Handle_t connHandle = characteristic.getConnectionHandle();
+  GattAttribute::Handle_t valueHandle = characteristic.getValueHandle();
+  GattAttribute::Handle_t lastHandle = characteristic.getLastHandle();
+
+  PRINTF("Starting aci_gatt_disc_all_charac_descriptors... [%u : %u]\n\r", valueHandle, lastHandle);
+  ret = aci_gatt_disc_all_charac_descriptors(connHandle, valueHandle, lastHandle);
+
+  if (ret == BLE_STATUS_SUCCESS) {
+    _currentState = GATT_CHAR_DESC_DISCOVERY;
+    _characteristic = characteristic;
+    return BLE_ERROR_NONE;
+  }
+  switch (ret) {
+  case BLE_STATUS_INVALID_PARAMS:
+    return BLE_ERROR_INVALID_PARAM;
+  default:
+    return BLE_ERROR_OPERATION_NOT_PERMITTED;
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Clear BlueNRGGattServer's state.
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGattClient::reset(void) {
+  /* Clear all state that is from the parent, including private members */
+  if (GattClient::reset() != BLE_ERROR_NONE) {
+    return BLE_ERROR_INVALID_STATE;
+  }
+
+  _currentState = GATT_IDLE;
+  _matchingServiceUUID = BLE_UUID_UNKNOWN;
+  _matchingCharacteristicUUIDIn = BLE_UUID_UNKNOWN;
+
+  _numServices = 0;
+  _servIndex = 0;
+  _numChars = 0;
+  _numCharDesc = 0;
+
+  /* Clear class members */
+  memset(discoveredService, 0, sizeof(discoveredService));
+  memset(discoveredChar, 0, sizeof(discoveredChar));
+
+  // free response if allocated
+  free((void*)(readCBParams.data));
+
+  return BLE_ERROR_NONE;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/BlueNRGGattServer.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,753 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+/**
+  ******************************************************************************
+  * @file    BlueNRGGattServer.cpp
+  * @author  STMicroelectronics
+  * @brief   Implementation of BlueNRG BLE_API GattServer Class
+  ******************************************************************************
+  * @copy
+  *
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+  *
+  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
+  */
+
+/** @defgroup BlueNRGGATTSERVER
+ *  @brief BlueNRG BLE_API GattServer Adaptation
+ *  @{
+ */
+
+#include "BlueNRGGattServer.h"
+#ifdef YOTTA_CFG_MBED_OS
+    #include "mbed-drivers/mbed.h"
+#else
+    #include "mbed.h"
+#endif 
+#include "BlueNRGGap.h"
+#include "ble_utils.h"
+#include "ble_debug.h"
+
+/**************************************************************************/
+/*!
+    @brief  Adds a new service to the GATT table on the peripheral
+
+    @params[in] service
+                Pointer to instance of the Gatt Server to add
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGattServer::addService(GattService &service)
+{
+    /* ToDo: Make sure we don't overflow the array, etc. */
+    /* ToDo: Make sure this service UUID doesn't already exist (?) */
+    /* ToDo: Basic validation */
+
+    tBleStatus ret;
+    uint8_t type;
+    uint16_t short_uuid;
+    uint8_t primary_short_uuid[2];
+    uint8_t primary_base_uuid[16];
+    uint8_t char_base_uuid[16];
+    const uint8_t *base_uuid;
+    const uint8_t *base_char_uuid;
+
+    uint8_t charsCount = service.getCharacteristicCount();
+    const uint8_t available_characteristics = BLE_TOTAL_CHARACTERISTICS - characteristicCount;
+
+    // check that there is enough characteristics left in the
+    // characteristic array.
+    if (charsCount > available_characteristics) {
+        PRINTF("charCount = %u and characteristicCount = %u\r\n", charsCount, available_characteristics);
+        return BLE_ERROR_NO_MEM;
+    }
+
+    const uint16_t maxAttrRecords = computeAttributesRecord(service);
+
+    type = (service.getUUID()).shortOrLong();
+    PRINTF("AddService(): Type:%d\n\r", type);
+
+    /* Add the service to the BlueNRG */
+    short_uuid = (service.getUUID()).getShortUUID();
+    STORE_LE_16(primary_short_uuid, short_uuid);
+
+    if(type==UUID::UUID_TYPE_LONG) {
+        base_uuid = (service.getUUID()).getBaseUUID();
+
+        COPY_UUID_128(primary_base_uuid, base_uuid[15],base_uuid[14],primary_short_uuid[1],primary_short_uuid[0],base_uuid[11],base_uuid[10],base_uuid[9],base_uuid[8],base_uuid[7],base_uuid[6],base_uuid[5],base_uuid[4],base_uuid[3],base_uuid[2],base_uuid[1],base_uuid[0]);
+    }
+
+    ret = BLE_STATUS_SUCCESS;
+
+    if(type==UUID::UUID_TYPE_SHORT) {
+        ret = aci_gatt_add_serv(UUID_TYPE_16,
+                                primary_short_uuid,
+                                PRIMARY_SERVICE,
+                                maxAttrRecords/*7*/,
+                                &servHandle);
+        PRINTF("aci_gatt_add_serv UUID_TYPE_SHORT ret=%d\n\r", ret);
+
+    } else if(type==UUID::UUID_TYPE_LONG) {
+        ret = aci_gatt_add_serv(UUID_TYPE_128,
+                                primary_base_uuid,
+                                PRIMARY_SERVICE,
+                                maxAttrRecords/*7*/,
+                                &servHandle);
+        PRINTF("aci_gatt_add_serv UUID_TYPE_LONG ret=%d\n\r", ret);
+    }
+
+    switch (ret) {
+        case BLE_STATUS_SUCCESS:
+            break;
+
+        case BLE_STATUS_INVALID_PARAMETER:
+            return BLE_ERROR_INVALID_PARAM;
+
+        case BLE_STATUS_OUT_OF_HANDLE:
+        case BLE_STATUS_INSUFFICIENT_RESOURCES:
+        case ERR_UNSPECIFIED_ERROR:
+            return BLE_ERROR_NO_MEM;
+
+        case BLE_STATUS_ERROR:
+        default:
+            return BLE_ERROR_INTERNAL_STACK_FAILURE;
+    }
+
+
+
+    service.setHandle(servHandle);
+    //serviceHandleVector.push_back(servHandle);
+    PRINTF("added servHandle handle =%u\n\r", servHandle);
+    uint16_t bleCharacteristic;
+
+    //iterate to include all characteristics
+    for (uint8_t i = 0; i < charsCount; i++) {
+        GattCharacteristic *p_char = service.getCharacteristic(i);
+        uint16_t char_uuid = (p_char->getValueAttribute().getUUID()).getShortUUID();
+
+        uint8_t int_8_uuid[2];
+        STORE_LE_16(int_8_uuid, char_uuid);
+
+        type = (p_char->getValueAttribute().getUUID()).shortOrLong();
+
+        if(type==UUID::UUID_TYPE_LONG) {
+            base_char_uuid = (p_char->getValueAttribute().getUUID()).getBaseUUID();
+#ifdef DEBUG
+            for(uint8_t j=0; j<16; j++) {
+                PRINTF("base_char_uuid[%d] 0x%02x ", j, base_char_uuid[j]);
+            }
+            PRINTF("\n\r");
+#endif
+            COPY_UUID_128(char_base_uuid,base_char_uuid[15],base_char_uuid[14],int_8_uuid[1],int_8_uuid[0],base_char_uuid[11],base_char_uuid[10],base_char_uuid[9],base_char_uuid[8],base_char_uuid[7],base_char_uuid[6],base_char_uuid[5],base_char_uuid[4],base_char_uuid[3],base_char_uuid[2],base_char_uuid[1],base_char_uuid[0]);
+        }
+
+        PRINTF("Char Properties 0x%x\n\r", p_char->getProperties());
+        /*
+        * Gatt_Evt_Mask -> HardCoded (0)
+        * Encryption_Key_Size -> Hardcoded (16)
+        * isVariable (variable length value field) -> Hardcoded (1)
+        */
+        uint8_t Gatt_Evt_Mask = 0x0;
+
+        if((p_char->getProperties() &
+                    (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE|
+                        GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE))) {
+            PRINTF("Setting up Gatt GATT_NOTIFY_ATTRIBUTE_WRITE Mask\n\r");
+            Gatt_Evt_Mask = Gatt_Evt_Mask | GATT_NOTIFY_ATTRIBUTE_WRITE  | GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP;
+        }
+        if((p_char->getProperties() &
+                    (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ|
+                        GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY| GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE))) {
+            PRINTF("Setting up Gatt GATT_NOTIFY_READ_REQ_AND_WAIT_FOR_APPL_RESP Mask\n\r");
+            Gatt_Evt_Mask = Gatt_Evt_Mask | GATT_NOTIFY_READ_REQ_AND_WAIT_FOR_APPL_RESP;
+        }    //This will support also GATT_SERVER_ATTR_READ_WRITE since it will be covered by previous if() check.
+
+        if(type==UUID::UUID_TYPE_SHORT) {
+            ret =  aci_gatt_add_char(service.getHandle(),
+                                     UUID_TYPE_16,
+                                     int_8_uuid,
+                                     p_char->getValueAttribute().getMaxLength() /*2*/ /*Value Length*/,
+                                     p_char->getProperties(),
+                                     ATTR_PERMISSION_NONE,
+                                     Gatt_Evt_Mask /*Gatt_Evt_Mask*/,
+                                     16 /*Encryption_Key_Size*/,
+                                     1 /*isVariable*/,
+                                     &bleCharacteristic);
+
+            PRINTF("aci_gatt_add_char UUID_TYPE_16 props=%d MaxLength=%d ret=%d\n\r",
+                    p_char->getProperties(), p_char->getValueAttribute().getMaxLength(), ret);
+
+        } else if(type==UUID::UUID_TYPE_LONG) {
+            ret =  aci_gatt_add_char(service.getHandle(),
+                                     UUID_TYPE_128,
+                                     char_base_uuid,
+                                     p_char->getValueAttribute().getMaxLength() /*2*/ /*Value Length*/,
+                                     p_char->getProperties(),
+                                     ATTR_PERMISSION_NONE,
+                                     Gatt_Evt_Mask /*Gatt_Evt_Mask*/,
+                                     16 /*Encryption_Key_Size*/,
+                                     1 /*isVariable*/,
+                                     &bleCharacteristic);
+
+            PRINTF("aci_gatt_add_char UUID_TYPE_128 props=%d MaxLength=%d ret=%d\n\r",
+                    p_char->getProperties(), p_char->getValueAttribute().getMaxLength(), ret);
+        }
+
+        switch (ret) {
+            case BLE_STATUS_SUCCESS:
+                break;
+
+            case ERR_UNSPECIFIED_ERROR:
+            case BLE_STATUS_INSUFFICIENT_RESOURCES:
+            case BLE_STATUS_OUT_OF_HANDLE:
+                // TODO remove characteristics and the service previously added.
+                // remove service in the stack by using: Aci_Gatt_Del_Service
+                // remove characteristics in the stack by using: Aci_Gatt_Del_Char
+                // update service counter
+                // destroy registered characteristic and updat echaracteristic counter
+                return BLE_ERROR_NO_MEM;
+
+            case BLE_STATUS_INVALID_HANDLE:
+            case BLE_STATUS_INVALID_PARAMETER:
+            case BLE_STATUS_CHARAC_ALREADY_EXISTS:
+            // TODO remove characteristics and the service previously added.
+            // remove service in the stack by using: Aci_Gatt_Del_Service
+            // remove characteristics in the stack by using: Aci_Gatt_Del_Char
+            // update service counter
+            // destroy registered characteristic and updat echaracteristic counter
+                return BLE_ERROR_INVALID_PARAM;
+
+            case BLE_STATUS_ERROR:
+            default:
+            // TODO remove characteristics and the service previously added.
+            // remove service in the stack by using: Aci_Gatt_Del_Service
+            // remove characteristics in the stack by using: Aci_Gatt_Del_Char
+            // update service counter
+            // destroy registered characteristic and updat echaracteristic counter
+                return BLE_ERROR_INTERNAL_STACK_FAILURE;
+        }
+
+        bleCharHandleMap.insert(std::pair<uint16_t, uint16_t>(bleCharacteristic, servHandle));
+
+        p_characteristics[characteristicCount++] = p_char;
+        /* Set the characteristic value handle */
+        p_char->getValueAttribute().setHandle(bleCharacteristic+BlueNRGGattServer::CHAR_VALUE_HANDLE);
+        PRINTF("added bleCharacteristic (value handle =%u)\n\r", p_char->getValueAttribute().getHandle());
+
+        if ((p_char->getValueAttribute().getValuePtr() != NULL) && (p_char->getValueAttribute().getLength() > 0)) {
+            ble_error_t err = write(p_char->getValueAttribute().getHandle(),
+                  p_char->getValueAttribute().getValuePtr(),
+                  p_char->getValueAttribute().getLength(), false /* localOnly */);
+            if (err) {
+                PRINTF("ERROR HERE !!!!\r\n");
+                return err;
+            }
+        }
+
+        // add descriptors now
+        uint16_t descHandle = 0;
+        PRINTF("p_char->getDescriptorCount()=%d\n\r", p_char->getDescriptorCount());
+
+        for(uint8_t descIndex=0; descIndex<p_char->getDescriptorCount(); descIndex++) {
+            GattAttribute *descriptor = p_char->getDescriptor(descIndex);
+            uint8_t desc_uuid[16] = { 0 };
+
+
+            uint8_t desc_uuid_type = CHAR_DESC_TYPE_16_BIT;
+            STORE_LE_16(desc_uuid, descriptor->getUUID().getShortUUID());
+
+            if((descriptor->getUUID()).shortOrLong() == UUID::UUID_TYPE_LONG) {
+                desc_uuid_type = CHAR_DESC_TYPE_128_BIT;
+                const uint8_t* base_desc_uuid  = descriptor->getUUID().getBaseUUID();
+
+                COPY_UUID_128(desc_uuid, base_desc_uuid[15], base_desc_uuid[14],base_desc_uuid[13],base_desc_uuid[12], base_desc_uuid[11], base_desc_uuid[10], base_desc_uuid[9], base_desc_uuid[8], base_desc_uuid[7], base_desc_uuid[6], base_desc_uuid[5], base_desc_uuid[4], base_desc_uuid[3], base_desc_uuid[2], base_desc_uuid[1], base_desc_uuid[0]);
+            }
+
+            ret = aci_gatt_add_char_desc(service.getHandle(),
+                                         bleCharacteristic,
+                                         desc_uuid_type,
+                                         desc_uuid,
+                                         descriptor->getMaxLength(),
+                                         descriptor->getLength(),
+                                         descriptor->getValuePtr(),
+                                         CHAR_DESC_SECURITY_PERMISSION,
+                                         CHAR_DESC_ACCESS_PERMISSION,
+                                         GATT_NOTIFY_ATTRIBUTE_WRITE,
+                                         MIN_ENCRY_KEY_SIZE,
+                                         CHAR_ATTRIBUTE_LEN_IS_FIXED,
+                                         &descHandle);
+            PRINTF("Adding Descriptor descriptor handle=%d ret=%d\n\r", descHandle, ret);
+
+            switch (ret) {
+                case BLE_STATUS_SUCCESS:
+                    PRINTF("Descriptor added successfully, descriptor handle=%d\n\r", descHandle);
+                    descriptor->setHandle(descHandle);
+                    break;
+
+                case ERR_UNSPECIFIED_ERROR:
+                case BLE_STATUS_INSUFFICIENT_RESOURCES:
+                case BLE_STATUS_OUT_OF_HANDLE:
+                    // TODO remove characteristics and the service previously added.
+                    // remove service in the stack by using: Aci_Gatt_Del_Service
+                    // remove characteristics in the stack by using: Aci_Gatt_Del_Char
+                    // update service counter
+                    // destroy registered characteristic and updat echaracteristic counter
+                    return BLE_ERROR_NO_MEM;
+
+                case BLE_STATUS_INVALID_HANDLE:
+                case BLE_STATUS_INVALID_PARAMETER:
+                // TODO remove characteristics and the service previously added.
+                // remove service in the stack by using: Aci_Gatt_Del_Service
+                // remove characteristics in the stack by using: Aci_Gatt_Del_Char
+                // update service counter
+                // destroy registered characteristic and updat echaracteristic counter
+                    return BLE_ERROR_INVALID_PARAM;
+
+                case BLE_STATUS_INVALID_OPERATION:
+                    return BLE_ERROR_OPERATION_NOT_PERMITTED;
+
+                case BLE_STATUS_ERROR:
+                default:
+                // TODO remove characteristics and the service previously added.
+                // remove service in the stack by using: Aci_Gatt_Del_Service
+                // remove characteristics in the stack by using: Aci_Gatt_Del_Char
+                // update service counter
+                // destroy registered characteristic and updat echaracteristic counter
+                    return BLE_ERROR_INTERNAL_STACK_FAILURE;
+            }
+        }
+    }
+
+    serviceCount++;
+
+    //FIXME: There is no GattService pointer array in GattServer.
+    //        There should be one? (Only the user is aware of GattServices!) Report to forum.
+
+    return BLE_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Reads the value of a characteristic, based on char handle
+
+    @param[in]  attributeHandle
+                The handle of the GattCharacteristic to read from
+    @param[in]  buffer
+                Buffer to hold the the characteristic's value
+                (raw byte array in LSB format)
+    @param[in]  lengthP
+                The number of bytes read into the buffer
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGattServer::read(GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP)
+{
+  tBleStatus ret;
+  uint16_t charHandle = attributeHandle;
+
+  ret = aci_gatt_read_handle_value(charHandle, *lengthP, lengthP, buffer);
+
+  if(ret == BLE_STATUS_SUCCESS) {
+    return BLE_ERROR_NONE;
+  }
+  switch (ret) {
+  case ERR_INVALID_HCI_CMD_PARAMS:
+    return BLE_ERROR_INVALID_PARAM;
+  default:
+    return BLE_ERROR_UNSPECIFIED;
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Reads the value of a characteristic, based on the connection
+            and char handle
+
+    @param[in]  connectionHandle
+                The handle of the connection
+    @param[in]  attributeHandle
+                The handle of the GattCharacteristic to write to
+    @param[in]  buffer
+                Data to use when updating the characteristic's value
+                (raw byte array in LSB format)
+    @param[in]  lengthP
+                The number of bytes in buffer
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGattServer::read(Gap::Handle_t connectionHandle,
+                                    GattAttribute::Handle_t attributeHandle,
+                                    uint8_t buffer[],
+                                    uint16_t *lengthP) {
+
+  /* avoid compiler warnings about unused variables */
+  (void)connectionHandle;
+  (void)attributeHandle;
+  (void)buffer;
+  (void)lengthP;
+
+  return BLE_ERROR_NONE;
+}
+
+ble_error_t BlueNRGGattServer::write(Gap::Handle_t connectionHandle,
+                                     GattAttribute::Handle_t,
+                                     const uint8_t[],
+                                     uint16_t, bool localOnly) {
+  /* avoid compiler warnings about unused variables */
+  (void)connectionHandle;
+  (void)localOnly;
+
+  return BLE_ERROR_NONE;
+}
+
+ble_error_t BlueNRGGattServer::write(GattAttribute::Handle_t attributeHandle, const uint8_t buffer[], uint16_t len, bool localOnly)
+{
+    /* avoid compiler warnings about unused variables */
+    (void)localOnly;
+
+    // check that the len of the data to write are compatible with the characteristic
+    GattCharacteristic* characteristic = getCharacteristicFromHandle(attributeHandle);
+    if (!characteristic) {
+        PRINTF("characteristic not found\r\n");
+        return BLE_ERROR_INVALID_PARAM;
+    }
+
+    // if the attribute handle is the attribute handle of the characteristic value then
+    // write the value
+    if (attributeHandle == characteristic->getValueHandle()) {
+        // assert the len in input is correct for this characteristic
+        const GattAttribute& value_attribute = characteristic->getValueAttribute();
+
+        // reject write if the lenght exceed the maximum lenght of this attribute
+        if (value_attribute.getMaxLength() < len) {
+            PRINTF("invalid variable length: %u, max length is: %u\r\n", len, value_attribute.getMaxLength());
+            return BLE_ERROR_INVALID_PARAM;
+        }
+
+        // reject write if the attribute size is fixed and the lenght in input is different than the
+        // length of the attribute.
+        if (value_attribute.hasVariableLength() == false && value_attribute.getMaxLength() != len) {
+            PRINTF("invalid fixed length: %u, len should be %u\r\n", len, value_attribute.getMaxLength());
+            return BLE_ERROR_INVALID_PARAM;
+        }
+
+        tBleStatus ret;
+
+        uint16_t charHandle = characteristic->getValueHandle() - BlueNRGGattServer::CHAR_VALUE_HANDLE;
+
+        PRINTF("updating bleCharacteristic valueHandle=%u,\
+                corresponding serviceHandle=%u len=%d\n\r",
+                attributeHandle, bleCharHandleMap.find(charHandle)->second, len);
+
+        /*
+         * If notifications (or indications) are enabled on that characteristic, a notification (or indication)
+         * will be sent to the client after sending this command to the BlueNRG.
+         */
+        ret = aci_gatt_update_char_value(bleCharHandleMap.find(charHandle)->second, charHandle, 0, len, buffer);
+
+        if (ret != BLE_STATUS_SUCCESS){
+          PRINTF("Error while updating characteristic (ret=0x%x).\n\r", ret);
+          switch (ret) {
+            case BLE_STATUS_INVALID_HANDLE:
+            case BLE_STATUS_INVALID_PARAMETER:
+              return BLE_ERROR_INVALID_PARAM;
+            default:
+              return BLE_STACK_BUSY;
+          }
+        }
+
+        return BLE_ERROR_NONE;
+    } else {
+        // write this handle has a descriptor handle
+        uint16_t charHandle = characteristic->getValueHandle() - BlueNRGGattServer::CHAR_VALUE_HANDLE;
+        uint16_t service_handle = bleCharHandleMap.find(charHandle)->second;
+
+        tBleStatus ret = aci_gatt_set_desc_value(
+            service_handle,
+            charHandle,
+            attributeHandle,
+            0,
+        	len,
+        	buffer
+        );
+
+        if (ret != BLE_STATUS_SUCCESS){
+          PRINTF("Error while updating characteristic descriptor (ret=0x%x).\n\r", ret);
+          switch (ret) {
+            case BLE_STATUS_INVALID_HANDLE:
+            case BLE_STATUS_INVALID_PARAMETER:
+              return BLE_ERROR_INVALID_PARAM;
+            default:
+              return BLE_STACK_BUSY;
+          }
+        }
+
+        return BLE_ERROR_NONE;
+    }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Reads a value according to the handle provided
+
+    @param[in]  attributeHandle
+                The handle of the attribute to read from
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGattServer::Read_Request_CB(uint16_t attributeHandle)
+{
+    uint16_t gapConnectionHandle = BlueNRGGap::getInstance().getConnectionHandle();
+
+    GattReadCallbackParams readParams;
+    readParams.handle = attributeHandle;
+
+    //PRINTF("readParams.handle = %d\n\r", readParams.handle);
+    HCIDataReadEvent(&readParams);
+
+    //EXIT:
+    if(gapConnectionHandle != 0){
+        //PRINTF("Calling aci_gatt_allow_read\n\r");
+        aci_gatt_allow_read(gapConnectionHandle);
+    }
+
+    return BLE_ERROR_NONE;
+}
+
+// ask if the write request should be accepted of rejected
+// return 0 in case of success or an ATT error response in
+// case of faillure
+uint8_t BlueNRGGattServer::Write_Request_CB(
+    uint16_t connection_handle, uint16_t attr_handle, uint8_t data_length,
+    const uint8_t* data) {
+
+    GattCharacteristic* characteristic = getCharacteristicFromHandle(attr_handle);
+    if(!characteristic) {
+        return AUTH_CALLBACK_REPLY_ATTERR_INVALID_HANDLE & 0xFF;
+    }
+
+    // check if the data length is in range
+    if (characteristic->getValueAttribute().getMaxLength() < data_length) {
+        return AUTH_CALLBACK_REPLY_ATTERR_INVALID_ATT_VAL_LENGTH & 0xFF;
+    }
+
+    // if the length of the characteristic value is fixed
+    // then the data in input should be of that length
+    if (characteristic->getValueAttribute().hasVariableLength() == false &&
+        characteristic->getValueAttribute().getMaxLength() != data_length) {
+        return AUTH_CALLBACK_REPLY_ATTERR_INVALID_ATT_VAL_LENGTH & 0xFF;
+    }
+
+    GattWriteAuthCallbackParams params = {
+        connection_handle,
+        attr_handle,
+        /* offset */ 0,
+        data_length,
+        data,
+        /* authorizationReply */ AUTH_CALLBACK_REPLY_ATTERR_WRITE_NOT_PERMITTED
+    };
+
+    return characteristic->authorizeWrite(&params) & 0xFF;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Returns the GattCharacteristic according to the handle provided
+
+    @param[in]  attrHandle
+                The handle of the attribute
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+
+    @section EXAMPLE
+
+    @code
+
+    @endcode
+*/
+/**************************************************************************/
+GattCharacteristic* BlueNRGGattServer::getCharacteristicFromHandle(uint16_t attrHandle)
+{
+    GattCharacteristic *p_char = NULL;
+    int i;
+    uint16_t handle, handle_1;
+
+    PRINTF("BlueNRGGattServer::getCharacteristicFromHandle()>>Attr Handle received %d\n\r",attrHandle);
+    for(i=0; i<characteristicCount; i++)
+    {
+        handle = p_characteristics[i]->getValueAttribute().getHandle()-BlueNRGGattServer::CHAR_VALUE_HANDLE;
+        PRINTF("handle(%d)=%d\n\r", i, handle);
+        if(i==characteristicCount-1)//Last Characteristic check
+        {
+            if(attrHandle>=handle)
+            {
+                p_char = p_characteristics[i];
+                PRINTF("Found Characteristic Properties 0x%x (handle=%d)\n\r",p_char->getProperties(), handle);
+                break;
+            }
+        }
+        else {
+            handle_1 = p_characteristics[i+1]->getValueAttribute().getHandle()-BlueNRGGattServer::CHAR_VALUE_HANDLE;
+            //Testing if attribute handle is between two Characteristic Handles
+            if(attrHandle>=handle && attrHandle<handle_1)
+            {
+                p_char = p_characteristics[i];
+                PRINTF("Found Characteristic Properties 0x%x (handle=%d handle_1=%d)\n\r",p_char->getProperties(), handle, handle_1);
+                break;
+            } else continue;
+        }
+    }
+
+    return p_char;
+}
+
+void BlueNRGGattServer::HCIDataWrittenEvent(const GattWriteCallbackParams *params) {
+    this->handleDataWrittenEvent(params);
+}
+
+void BlueNRGGattServer::HCIDataReadEvent(const GattReadCallbackParams *params) {
+    PRINTF("Called HCIDataReadEvent\n\r");
+    this->handleDataReadEvent(params);
+}
+
+void BlueNRGGattServer::HCIEvent(GattServerEvents::gattEvent_e type, uint16_t charHandle) {
+    this->handleEvent(type, charHandle);
+}
+
+void BlueNRGGattServer::HCIDataSentEvent(unsigned count) {
+    this->handleDataSentEvent(count);
+}
+
+
+ble_error_t BlueNRGGattServer::initializeGATTDatabase(void)   {
+    // <TODO>
+    return (ble_error_t)0;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Clear BlueNRGGattServer's state.
+
+    @returns    ble_error_t
+
+    @retval     BLE_ERROR_NONE
+                Everything executed properly
+*/
+/**************************************************************************/
+ble_error_t BlueNRGGattServer::reset(void)
+{
+    /* Clear all state that is from the parent, including private members */
+    if (GattServer::reset() != BLE_ERROR_NONE) {
+        return BLE_ERROR_INVALID_STATE;
+    }
+
+    /* Clear class members */
+    memset(p_characteristics,        0, sizeof(p_characteristics));
+    memset(bleCharacteristicHandles, 0, sizeof(bleCharacteristicHandles));
+    serviceCount = 0;
+    characteristicCount = 0;
+
+    return BLE_ERROR_NONE;
+}
+
+
+/// compute the number of attributes needed by this service.
+uint16_t BlueNRGGattServer::computeAttributesRecord(GattService& service) {
+    uint16_t attribute_records = 1;
+
+    for (uint8_t characteristic_index = 0; characteristic_index < service.getCharacteristicCount(); ++characteristic_index) {
+        // add two attributes, one for the characteristic declaration
+        // and the other for the characteristic value.
+        attribute_records += 2;
+
+        const GattCharacteristic* characteristic = service.getCharacteristic(characteristic_index);
+        const uint8_t properties = characteristic->getProperties();
+        // if notify or indicate are present, two attributes are
+        // needed
+        if ((properties & GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY) ||
+            (properties & GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE)) {
+            attribute_records += 2;
+        }
+
+        // if broadcast is set, two attributes are needed
+        if (properties & GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_BROADCAST) {
+            attribute_records += 2;
+        }
+
+        // if extended properties flag is set, two attributes are needed
+        if (properties & GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES) {
+            attribute_records += 2;
+        }
+
+        attribute_records += characteristic->getDescriptorCount();
+    }
+
+    // for some reason, if there is just a service, this value should
+    // be equal to 5
+    if (attribute_records == 1) {
+        attribute_records = 5;
+    }
+
+    return attribute_records;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/ble_hci.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1228 @@
+/**
+  ******************************************************************************
+  * @file    ble_hci.c 
+  * @author  AMS/HESA Application Team
+  * @brief   Function for managing HCI interface.
+  ******************************************************************************
+  *
+  *
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+  *
+  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
+  */ 
+
+#include "ble_hal_types.h"
+#include "ble_osal.h"
+#include "ble_status.h"
+#include "ble_hal.h"
+#include "ble_hci_const.h"
+#include "ble_gp_timer.h"
+#include "ble_debug.h"
+
+#include "stm32_bluenrg_ble.h"
+
+#if BLE_CONFIG_DBG_ENABLE
+#undef PRINTF
+#endif
+
+#define HCI_LOG_ON 0
+
+#define HCI_READ_PACKET_NUM_MAX 		 (0x40)
+
+#define MIN(a,b)            ((a) < (b) )? (a) : (b)
+#define MAX(a,b)            ((a) > (b) )? (a) : (b)
+
+tListNode hciReadPktPool;
+tListNode hciReadPktRxQueue;
+
+// betzw - DEBUG:
+//#define POOL_CNT
+#ifdef POOL_CNT
+#include <stdio.h>
+static unsigned int nr_hciReadPktPool;
+static unsigned int lowest_nr_hciReadPktPool;
+#endif // POOL_CNT
+
+/* pool of hci read packets */
+static tHciDataPacket   hciReadPacketBuffer[HCI_READ_PACKET_NUM_MAX];
+
+static volatile uint8_t readPacketListFull=FALSE;
+
+static volatile uint8_t hci_timer_id;
+static volatile uint8_t hci_timeout;
+
+void hci_timeout_callback(void)
+{
+  hci_timeout = 1;
+  return;
+}
+
+void HCI_Init(void)
+{
+  uint8_t index;
+  
+  Disable_SPI_IRQ();
+
+#ifdef POOL_CNT
+  nr_hciReadPktPool = 0;
+#endif // POOL_CNT
+
+  /* Initialize list heads of ready and free hci data packet queues */
+  list_init_head (&hciReadPktPool);
+  list_init_head (&hciReadPktRxQueue);
+  
+  /* Initialize the queue of free hci data packets */
+  for (index = 0; index < HCI_READ_PACKET_NUM_MAX; index++)
+  {
+    list_insert_tail(&hciReadPktPool, (tListNode *)&hciReadPacketBuffer[index]);
+#ifdef POOL_CNT
+    nr_hciReadPktPool++;
+#endif // POOL_CNT
+  }
+
+#ifdef POOL_CNT
+  lowest_nr_hciReadPktPool = nr_hciReadPktPool;
+#endif // POOL_CNT
+
+  Enable_SPI_IRQ();
+}
+
+#define HCI_PCK_TYPE_OFFSET                 0
+#define  EVENT_PARAMETER_TOT_LEN_OFFSET     2
+
+/**
+ * Verify if HCI packet is correctly formatted..
+ *
+ * @param[in] hciReadPacket    The packet that is received from HCI interface.
+ * @return 0 if HCI packet is as expected
+ */
+int HCI_verify(const tHciDataPacket * hciReadPacket)
+{
+  const uint8_t *hci_pckt = hciReadPacket->dataBuff;
+  
+  if(hci_pckt[HCI_PCK_TYPE_OFFSET] != HCI_EVENT_PKT)
+    return 1;  /* Incorrect type. */
+  
+  if(hci_pckt[EVENT_PARAMETER_TOT_LEN_OFFSET] != hciReadPacket->data_len - (1+HCI_EVENT_HDR_SIZE))
+    return 2; /* Wrong length (packet truncated or too long). */
+  
+  return 0;      
+}
+
+void HCI_Process(void)
+{
+  uint8_t data_len;
+  uint8_t buffer[HCI_READ_PACKET_SIZE];
+  tHciDataPacket * hciReadPacket = NULL;
+  
+#ifdef POOL_CNT
+  printf("betzw(%s, %d): nr_hciReadPktPool = %u (lowest = %u)\r\n", __func__, __LINE__, 
+	 nr_hciReadPktPool, lowest_nr_hciReadPktPool);
+#endif // POOL_CNT
+
+  Disable_SPI_IRQ();
+  uint8_t list_empty = list_is_empty(&hciReadPktRxQueue);        
+  /* process any pending events read */
+  while(list_empty == FALSE)
+  {
+    list_remove_head (&hciReadPktRxQueue, (tListNode **)&hciReadPacket);
+    Enable_SPI_IRQ();
+    HCI_Event_CB(hciReadPacket->dataBuff);
+    Disable_SPI_IRQ();
+    list_insert_tail(&hciReadPktPool, (tListNode *)hciReadPacket);
+#ifdef POOL_CNT
+    nr_hciReadPktPool++;
+#endif
+    list_empty = list_is_empty(&hciReadPktRxQueue);
+  }
+  if (readPacketListFull) {
+    while(BlueNRG_DataPresent()) {
+      data_len = BlueNRG_SPI_Read_All(buffer, HCI_READ_PACKET_SIZE);
+      if(data_len > 0)
+        HCI_Event_CB(buffer);
+    }
+    readPacketListFull = FALSE;
+  }
+  
+  Enable_SPI_IRQ();    
+}
+
+BOOL HCI_Queue_Empty(void)
+{
+  return list_is_empty(&hciReadPktRxQueue);
+}
+
+void HCI_Isr(void)
+{
+  tHciDataPacket * hciReadPacket = NULL;
+  uint8_t data_len;
+  
+  Clear_SPI_EXTI_Flag();
+  while(BlueNRG_DataPresent()){        
+    if (list_is_empty (&hciReadPktPool) == FALSE){
+      
+      /* enqueueing a packet for read */
+      list_remove_head (&hciReadPktPool, (tListNode **)&hciReadPacket);
+#ifdef POOL_CNT
+      nr_hciReadPktPool--;
+      if(nr_hciReadPktPool < lowest_nr_hciReadPktPool)
+	      lowest_nr_hciReadPktPool = nr_hciReadPktPool;
+#endif
+
+      data_len = BlueNRG_SPI_Read_All(hciReadPacket->dataBuff, HCI_READ_PACKET_SIZE);
+      if(data_len > 0){                    
+        hciReadPacket->data_len = data_len;
+        if(HCI_verify(hciReadPacket) == 0) {
+          list_insert_tail(&hciReadPktRxQueue, (tListNode *)hciReadPacket);
+	      signalEventsToProcess();
+        } else {
+          list_insert_head(&hciReadPktPool, (tListNode *)hciReadPacket);
+#ifdef POOL_CNT
+	  nr_hciReadPktPool++;
+#endif
+	}
+      }
+      else {
+        // Insert the packet back into the pool.
+        list_insert_head(&hciReadPktPool, (tListNode *)hciReadPacket);
+#ifdef POOL_CNT
+	nr_hciReadPktPool++;
+#endif
+      }
+    }
+    else{
+      // HCI Read Packet Pool is empty, wait for a free packet.
+      signalEventsToProcess();
+      readPacketListFull = TRUE;
+      Clear_SPI_EXTI_Flag();
+      return;
+    }
+    Clear_SPI_EXTI_Flag();
+  }
+}
+
+void hci_write(const void* data1, const void* data2, uint8_t n_bytes1, uint8_t n_bytes2){
+#if  HCI_LOG_ON
+  PRINTF("HCI <- ");
+  for(int i=0; i < n_bytes1; i++)
+    PRINTF("%02X ", *((uint8_t*)data1 + i));
+  for(int i=0; i < n_bytes2; i++)
+    PRINTF("%02X ", *((uint8_t*)data2 + i));
+  PRINTF("\n");    
+#endif
+  
+  Hal_Write_Serial(data1, data2, n_bytes1, n_bytes2);
+}
+
+void hci_send_cmd(uint16_t ogf, uint16_t ocf, uint8_t plen, void *param)
+{
+  hci_command_hdr hc;
+  
+  hc.opcode = htobs(cmd_opcode_pack(ogf, ocf));
+  hc.plen= plen;
+  
+  uint8_t header[HCI_HDR_SIZE + HCI_COMMAND_HDR_SIZE];
+  header[0] = HCI_COMMAND_PKT;
+  Osal_MemCpy(header+1, &hc, sizeof(hc));
+  
+  hci_write(header, param, sizeof(header), plen);
+}
+
+static void move_list(tListNode * dest_list, tListNode * src_list)
+{
+  pListNode tmp_node;
+  
+  while(!list_is_empty(src_list)){
+    list_remove_head(src_list, &tmp_node);
+    list_insert_tail(dest_list, tmp_node);
+  }
+}
+
+int hci_send_req(struct hci_request *r, BOOL async)
+{
+  uint8_t *ptr;
+  uint16_t opcode = htobs(cmd_opcode_pack(r->ogf, r->ocf));
+  hci_event_pckt *event_pckt;
+  hci_uart_pckt *hci_hdr;
+  int to = DEFAULT_TIMEOUT;
+  struct timer t;
+  tHciDataPacket * hciReadPacket = NULL;
+  tListNode hciTempQueue;
+  
+  list_init_head(&hciTempQueue);
+  
+  hci_send_cmd(r->ogf, r->ocf, r->clen, r->cparam);
+  
+  if(async){
+    goto done;
+  }
+  
+  /* Minimum timeout is 1. */
+  if(to == 0)
+    to = 1;
+  
+  Timer_Set(&t, to);
+  
+  while(1) {
+    evt_cmd_complete *cc;
+    evt_cmd_status *cs;
+    evt_le_meta_event *me;
+    int len;
+      
+#if ENABLE_MICRO_SLEEP    
+    while(1){
+      ATOMIC_SECTION_BEGIN();
+      if(Timer_Expired(&t)){
+        ATOMIC_SECTION_END();
+        goto failed;
+      }
+      if(!HCI_Queue_Empty()){
+        ATOMIC_SECTION_END();
+        break;
+      }
+      Enter_Sleep_Mode();
+      ATOMIC_SECTION_END();
+    }
+#else
+    while(1){
+      if(Timer_Expired(&t)){
+        goto failed;
+      }
+      if(!HCI_Queue_Empty()){
+        break;
+      }
+    }
+#endif
+    
+    /* Extract packet from HCI event queue. */
+    Disable_SPI_IRQ();
+    list_remove_head(&hciReadPktRxQueue, (tListNode **)&hciReadPacket);    
+    
+    hci_hdr = (void *)hciReadPacket->dataBuff;
+    if(hci_hdr->type != HCI_EVENT_PKT){
+      list_insert_tail(&hciTempQueue, (tListNode *)hciReadPacket); // See comment below
+      Enable_SPI_IRQ();
+      continue;
+    }
+    
+    event_pckt = (void *) (hci_hdr->data);
+    
+    ptr = hciReadPacket->dataBuff + (1 + HCI_EVENT_HDR_SIZE);
+    len = hciReadPacket->data_len - (1 + HCI_EVENT_HDR_SIZE);
+    
+    switch (event_pckt->evt) {
+      
+    case EVT_CMD_STATUS:
+      cs = (void *) ptr;
+      
+      if (cs->opcode != opcode)
+        goto failed;
+      
+      if (r->event != EVT_CMD_STATUS) {
+        if (cs->status) {
+          goto failed;
+        }
+        break;
+      }
+      
+      r->rlen = MIN(len, r->rlen);
+      Osal_MemCpy(r->rparam, ptr, r->rlen);
+      goto done;
+      
+    case EVT_CMD_COMPLETE:
+      cc = (void *) ptr;
+      
+      if (cc->opcode != opcode)
+        goto failed;
+      
+      ptr += EVT_CMD_COMPLETE_SIZE;
+      len -= EVT_CMD_COMPLETE_SIZE;
+      
+      r->rlen = MIN(len, r->rlen);
+      Osal_MemCpy(r->rparam, ptr, r->rlen);
+      goto done;
+      
+    case EVT_LE_META_EVENT:
+      me = (void *) ptr;
+      
+      if (me->subevent != r->event)
+        break;
+      
+      len -= 1;
+      r->rlen = MIN(len, r->rlen);
+      Osal_MemCpy(r->rparam, me->data, r->rlen);
+      goto done;
+      
+    case EVT_HARDWARE_ERROR:            
+      goto failed;
+      
+    default:      
+      break;
+    }
+    
+    /* In the meantime there could be other events from the controller.
+       In this case, insert the packet in a different queue. These packets will be
+       inserted back in the main queue just before exiting from send_req().
+    */
+    if(hciReadPacket != NULL) {
+	    list_insert_tail(&hciTempQueue, (tListNode *)hciReadPacket);
+	    hciReadPacket = NULL;
+    }
+    /* Be sure there is at list one packet in the pool to process the expected event. */
+    if(list_is_empty(&hciReadPktPool)){ // betzw: this is a kind of steeling (should never happen?!?)
+      pListNode tmp_node;      
+      list_remove_head(&hciReadPktRxQueue, &tmp_node);
+      list_insert_tail(&hciReadPktPool, tmp_node);     
+#ifdef POOL_CNT
+      nr_hciReadPktPool++;
+#endif
+    }
+    
+    Enable_SPI_IRQ();
+    
+  }
+  
+failed: 
+  // Insert the packet back into the pool.
+  if(hciReadPacket != NULL) {
+	  list_insert_head(&hciReadPktPool, (tListNode *)hciReadPacket); 
+#ifdef POOL_CNT
+	  nr_hciReadPktPool++;
+#endif
+	  hciReadPacket = NULL;
+  }
+  move_list(&hciReadPktRxQueue, &hciTempQueue);  
+  Enable_SPI_IRQ();
+  return -1;
+  
+done:
+  // Insert the packet back into the pool.
+  if(hciReadPacket != NULL) {
+	  list_insert_head(&hciReadPktPool, (tListNode *)hciReadPacket); 
+#ifdef POOL_CNT
+	  nr_hciReadPktPool++;
+#endif
+	  hciReadPacket = NULL;
+  }
+  move_list(&hciReadPktRxQueue, &hciTempQueue);
+  
+  Enable_SPI_IRQ();
+  return 0;
+}
+
+int hci_reset()
+{
+  struct hci_request rq;
+  uint8_t status;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_HOST_CTL;
+  rq.ocf = OCF_RESET;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;  
+}
+
+int hci_disconnect(uint16_t	handle, uint8_t reason)
+{
+  struct hci_request rq;
+  disconnect_cp cp;
+  uint8_t status;
+  
+  cp.handle = handle;
+  cp.reason = reason;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LINK_CTL;
+  rq.ocf = OCF_DISCONNECT;
+  rq.cparam = &cp;
+  rq.clen = DISCONNECT_CP_SIZE;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;  
+}
+
+int hci_le_read_local_version(uint8_t *hci_version, uint16_t *hci_revision, uint8_t *lmp_pal_version, 
+                              uint16_t *manufacturer_name, uint16_t *lmp_pal_subversion)
+{
+  struct hci_request rq;
+  read_local_version_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_INFO_PARAM;
+  rq.ocf = OCF_READ_LOCAL_VERSION;
+  rq.cparam = NULL;
+  rq.clen = 0;
+  rq.rparam = &resp;
+  rq.rlen = READ_LOCAL_VERSION_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  
+  *hci_version = resp.hci_version;
+  *hci_revision =  btohs(resp.hci_revision);
+  *lmp_pal_version = resp.lmp_pal_version;
+  *manufacturer_name = btohs(resp.manufacturer_name);
+  *lmp_pal_subversion = btohs(resp.lmp_pal_subversion);
+  
+  return 0;
+}
+
+int hci_le_read_buffer_size(uint16_t *pkt_len, uint8_t *max_pkt)
+{
+  struct hci_request rq;
+  le_read_buffer_size_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_READ_BUFFER_SIZE;
+  rq.cparam = NULL;
+  rq.clen = 0;
+  rq.rparam = &resp;
+  rq.rlen = LE_READ_BUFFER_SIZE_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  *pkt_len = resp.pkt_len;
+  *max_pkt = resp.max_pkt;
+  
+  return 0;
+}
+
+int hci_le_set_advertising_parameters(uint16_t min_interval, uint16_t max_interval, uint8_t advtype,
+                                      uint8_t own_bdaddr_type, uint8_t direct_bdaddr_type, const tBDAddr direct_bdaddr, uint8_t chan_map,
+                                      uint8_t filter)
+{
+  struct hci_request rq;
+  le_set_adv_parameters_cp adv_cp;
+  uint8_t status;
+  
+  Osal_MemSet(&adv_cp, 0, sizeof(adv_cp));
+  adv_cp.min_interval = min_interval;
+  adv_cp.max_interval = max_interval;
+  adv_cp.advtype = advtype;
+  adv_cp.own_bdaddr_type = own_bdaddr_type;
+  adv_cp.direct_bdaddr_type = direct_bdaddr_type;
+  if(direct_bdaddr != NULL)
+    Osal_MemCpy(adv_cp.direct_bdaddr,direct_bdaddr,sizeof(adv_cp.direct_bdaddr));
+  adv_cp.chan_map = chan_map;
+  adv_cp.filter = filter;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_SET_ADV_PARAMETERS;
+  rq.cparam = &adv_cp;
+  rq.clen = LE_SET_ADV_PARAMETERS_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+int hci_le_set_advertising_data(uint8_t length, const uint8_t data[])
+{
+  struct hci_request rq;
+  le_set_adv_data_cp adv_cp;
+  uint8_t status;
+  
+  Osal_MemSet(&adv_cp, 0, sizeof(adv_cp));
+  adv_cp.length = length;
+  Osal_MemCpy(adv_cp.data, data, MIN(31,length));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_SET_ADV_DATA;
+  rq.cparam = &adv_cp;
+  rq.clen = LE_SET_ADV_DATA_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+int hci_le_set_advertise_enable(uint8_t enable)
+{
+  struct hci_request rq;
+  le_set_advertise_enable_cp adv_cp;
+  uint8_t status;
+  
+  Osal_MemSet(&adv_cp, 0, sizeof(adv_cp));
+  adv_cp.enable = enable?1:0;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_SET_ADVERTISE_ENABLE;
+  rq.cparam = &adv_cp;
+  rq.clen = LE_SET_ADVERTISE_ENABLE_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+int hci_le_set_scan_parameters(uint8_t	type, uint16_t interval,
+                               uint16_t window, uint8_t own_bdaddr_type,
+                               uint8_t	filter)
+{
+  struct hci_request rq;
+  le_set_scan_parameters_cp scan_cp;
+  uint8_t status;
+  
+  Osal_MemSet(&scan_cp, 0, sizeof(scan_cp));
+  scan_cp.type = type;
+  scan_cp.interval = interval;
+  scan_cp.window = window;
+  scan_cp.own_bdaddr_type = own_bdaddr_type;
+  scan_cp.filter = filter;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_SET_SCAN_PARAMETERS;
+  rq.cparam = &scan_cp;
+  rq.clen = LE_SET_SCAN_PARAMETERS_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+int hci_le_set_scan_enable(uint8_t enable, uint8_t filter_dup)
+{
+  struct hci_request rq;
+  le_set_scan_enable_cp scan_cp;
+  uint8_t status;
+  
+  Osal_MemSet(&scan_cp, 0, sizeof(scan_cp));
+  scan_cp.enable = enable?1:0;
+  scan_cp.filter_dup = filter_dup;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_SET_SCAN_ENABLE;
+  rq.cparam = &scan_cp;
+  rq.clen = LE_SET_SCAN_ENABLE_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+int hci_le_rand(uint8_t random_number[8])
+{
+  struct hci_request rq;
+  le_rand_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_RAND;
+  rq.cparam = NULL;
+  rq.clen = 0;
+  rq.rparam = &resp;
+  rq.rlen = LE_RAND_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  Osal_MemCpy(random_number, resp.random, 8);
+  
+  return 0;
+}
+
+int hci_le_set_scan_resp_data(uint8_t length, const uint8_t data[])
+{
+  struct hci_request rq;
+  le_set_scan_response_data_cp scan_resp_cp;
+  uint8_t status;
+  
+  Osal_MemSet(&scan_resp_cp, 0, sizeof(scan_resp_cp));
+  scan_resp_cp.length = length;
+  Osal_MemCpy(scan_resp_cp.data, data, MIN(31,length));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_SET_SCAN_RESPONSE_DATA;
+  rq.cparam = &scan_resp_cp;
+  rq.clen = LE_SET_SCAN_RESPONSE_DATA_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+int hci_le_read_advertising_channel_tx_power(int8_t *tx_power_level)
+{
+  struct hci_request rq;
+  le_read_adv_channel_tx_power_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_READ_ADV_CHANNEL_TX_POWER;
+  rq.cparam = NULL;
+  rq.clen = 0;
+  rq.rparam = &resp;
+  rq.rlen = LE_RAND_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  *tx_power_level = resp.level;
+  
+  return 0;
+}
+
+int hci_le_set_random_address(tBDAddr bdaddr)
+{
+  struct hci_request rq;
+  le_set_random_address_cp set_rand_addr_cp;
+  uint8_t status;
+  
+  Osal_MemSet(&set_rand_addr_cp, 0, sizeof(set_rand_addr_cp));
+  Osal_MemCpy(set_rand_addr_cp.bdaddr, bdaddr, sizeof(tBDAddr));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_SET_RANDOM_ADDRESS;
+  rq.cparam = &set_rand_addr_cp;
+  rq.clen = LE_SET_RANDOM_ADDRESS_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+int hci_read_bd_addr(tBDAddr bdaddr)
+{
+  struct hci_request rq;
+  read_bd_addr_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_INFO_PARAM;
+  rq.ocf = OCF_READ_BD_ADDR;
+  rq.cparam = NULL;
+  rq.clen = 0;
+  rq.rparam = &resp;
+  rq.rlen = READ_BD_ADDR_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  Osal_MemCpy(bdaddr, resp.bdaddr, sizeof(tBDAddr));
+  
+  return 0;
+}
+
+int hci_le_create_connection(uint16_t interval,	uint16_t window, uint8_t initiator_filter, uint8_t peer_bdaddr_type,
+                             const tBDAddr peer_bdaddr,	uint8_t	own_bdaddr_type, uint16_t min_interval,	uint16_t max_interval,
+                             uint16_t latency,	uint16_t supervision_timeout, uint16_t min_ce_length, uint16_t max_ce_length)
+{
+  struct hci_request rq;
+  le_create_connection_cp create_cp;
+  uint8_t status;
+  
+  Osal_MemSet(&create_cp, 0, sizeof(create_cp));
+  create_cp.interval = interval;
+  create_cp.window =  window;
+  create_cp.initiator_filter = initiator_filter;
+  create_cp.peer_bdaddr_type = peer_bdaddr_type;
+  Osal_MemCpy(create_cp.peer_bdaddr, peer_bdaddr, sizeof(tBDAddr));
+  create_cp.own_bdaddr_type = own_bdaddr_type;
+  create_cp.min_interval=min_interval;
+  create_cp.max_interval=max_interval;
+  create_cp.latency = latency;
+  create_cp.supervision_timeout=supervision_timeout;
+  create_cp.min_ce_length=min_ce_length;
+  create_cp.max_ce_length=max_ce_length;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_CREATE_CONN;
+  rq.cparam = &create_cp;
+  rq.clen = LE_CREATE_CONN_CP_SIZE;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+int hci_le_create_connection_cancel(void)
+{
+  struct hci_request rq;
+  uint8_t status;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_CREATE_CONN_CANCEL;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+int hci_le_encrypt(uint8_t key[16], uint8_t plaintextData[16], uint8_t encryptedData[16])
+{
+  struct hci_request rq;
+  le_encrypt_cp params;
+  le_encrypt_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemCpy(params.key, key, 16);
+  Osal_MemCpy(params.plaintext, plaintextData, 16);
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_ENCRYPT;
+  rq.cparam = &params;
+  rq.clen = LE_ENCRYPT_CP_SIZE;
+  rq.rparam = &resp;
+  rq.rlen = LE_ENCRYPT_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  Osal_MemCpy(encryptedData, resp.encdata, 16);
+  
+  return 0;
+}
+
+int hci_le_ltk_request_reply(uint8_t key[16])
+{
+  struct hci_request rq;
+  le_ltk_reply_cp params;
+  le_ltk_reply_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  params.handle = 1;
+  Osal_MemCpy(params.key, key, 16);
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_LTK_REPLY;
+  rq.cparam = &params;
+  rq.clen = LE_LTK_REPLY_CP_SIZE;
+  rq.rparam = &resp;
+  rq.rlen = LE_LTK_REPLY_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return resp.status;
+}
+
+int hci_le_ltk_request_neg_reply()
+{
+  struct hci_request rq;
+  le_ltk_neg_reply_cp params;
+  le_ltk_neg_reply_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  params.handle = 1;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_LTK_NEG_REPLY;
+  rq.cparam = &params;
+  rq.clen = LE_LTK_NEG_REPLY_CP_SIZE;
+  rq.rparam = &resp;
+  rq.rlen = LE_LTK_NEG_REPLY_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return resp.status;
+}
+
+int hci_le_read_white_list_size(uint8_t *size)
+{
+  struct hci_request rq;
+  le_read_white_list_size_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_READ_WHITE_LIST_SIZE;
+  rq.rparam = &resp;
+  rq.rlen = LE_READ_WHITE_LIST_SIZE_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  *size = resp.size;
+  
+  return 0;
+}
+
+int hci_le_clear_white_list()
+{
+  struct hci_request rq;
+  uint8_t status;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_CLEAR_WHITE_LIST;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  return status;
+}
+
+int hci_le_add_device_to_white_list(uint8_t	bdaddr_type, tBDAddr bdaddr)
+{
+  struct hci_request rq;
+  le_add_device_to_white_list_cp params;
+  uint8_t status;
+  
+  params.bdaddr_type = bdaddr_type;
+  Osal_MemCpy(params.bdaddr, bdaddr, 6);
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_ADD_DEVICE_TO_WHITE_LIST;
+  rq.cparam = &params;
+  rq.clen = LE_ADD_DEVICE_TO_WHITE_LIST_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  return status;
+}
+
+int hci_le_remove_device_from_white_list(uint8_t bdaddr_type, tBDAddr bdaddr)
+{
+  struct hci_request rq;
+  le_remove_device_from_white_list_cp params;
+  uint8_t status;
+  
+  params.bdaddr_type = bdaddr_type;
+  Osal_MemCpy(params.bdaddr, bdaddr, 6);
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST;
+  rq.cparam = &params;
+  rq.clen = LE_REMOVE_DEVICE_FROM_WHITE_LIST_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  return status;
+}
+
+int hci_read_transmit_power_level(uint16_t *conn_handle, uint8_t type, int8_t * tx_level)
+{
+  struct hci_request rq;
+  read_transmit_power_level_cp params;
+  read_transmit_power_level_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  params.handle = *conn_handle;
+  params.type = type;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_HOST_CTL;
+  rq.ocf = OCF_READ_TRANSMIT_POWER_LEVEL;
+  rq.cparam = &params;
+  rq.clen = READ_TRANSMIT_POWER_LEVEL_CP_SIZE;
+  rq.rparam = &resp;
+  rq.rlen = READ_TRANSMIT_POWER_LEVEL_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  *conn_handle = resp.handle;
+  *tx_level = resp.level;
+  
+  return 0;
+}
+
+int hci_read_rssi(uint16_t *conn_handle, int8_t * rssi)
+{
+  struct hci_request rq;
+  read_rssi_cp params;
+  read_rssi_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  params.handle = *conn_handle;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_STATUS_PARAM;
+  rq.ocf = OCF_READ_RSSI;
+  rq.cparam = &params;
+  rq.clen = READ_RSSI_CP_SIZE;
+  rq.rparam = &resp;
+  rq.rlen = READ_RSSI_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  *conn_handle = resp.handle;
+  *rssi = resp.rssi;
+  
+  return 0;
+}
+
+int hci_le_read_local_supported_features(uint8_t *features)
+{
+  struct hci_request rq;
+  le_read_local_supported_features_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_READ_LOCAL_SUPPORTED_FEATURES;
+  rq.rparam = &resp;
+  rq.rlen = LE_READ_LOCAL_SUPPORTED_FEATURES_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  Osal_MemCpy(features, resp.features, sizeof(resp.features));
+  
+  return 0;
+}
+
+int hci_le_read_channel_map(uint16_t conn_handle, uint8_t ch_map[5])
+{
+  struct hci_request rq;
+  le_read_channel_map_cp params;
+  le_read_channel_map_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  params.handle = conn_handle;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_READ_CHANNEL_MAP;
+  rq.cparam = &params;
+  rq.clen = LE_READ_CHANNEL_MAP_CP_SIZE;
+  rq.rparam = &resp;
+  rq.rlen = LE_READ_CHANNEL_MAP_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  Osal_MemCpy(ch_map, resp.map, 5);
+  
+  return 0;
+}
+
+int hci_le_read_supported_states(uint8_t states[8])
+{
+  struct hci_request rq;
+  le_read_supported_states_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_READ_SUPPORTED_STATES;
+  rq.rparam = &resp;
+  rq.rlen = LE_READ_SUPPORTED_STATES_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  Osal_MemCpy(states, resp.states, 8);
+  
+  return 0;
+}
+
+int hci_le_receiver_test(uint8_t frequency)
+{
+  struct hci_request rq;
+  le_receiver_test_cp params;
+  uint8_t status;
+  
+  params.frequency = frequency;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_RECEIVER_TEST;
+  rq.cparam = &params;
+  rq.clen = LE_RECEIVER_TEST_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  return status;
+}
+
+int hci_le_transmitter_test(uint8_t frequency, uint8_t length, uint8_t payload)
+{
+  struct hci_request rq;
+  le_transmitter_test_cp params;
+  uint8_t status;
+  
+  params.frequency = frequency;
+  params.length = length;
+  params.payload = payload;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_TRANSMITTER_TEST;
+  rq.cparam = &params;
+  rq.clen = LE_TRANSMITTER_TEST_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  return status;
+}
+
+int hci_le_test_end(uint16_t *num_pkts)
+{
+  struct hci_request rq;
+  le_test_end_rp resp;
+  
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_LE_CTL;
+  rq.ocf = OCF_LE_TEST_END;
+  rq.rparam = &resp;
+  rq.rlen = LE_TEST_END_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0){
+    return BLE_STATUS_TIMEOUT;
+  }
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  *num_pkts = resp.num_pkts;
+  
+  return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_gap_aci.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1307 @@
+/******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
+* File Name          : bluenrg_hci.c
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 4-Oct-2013
+* Description        : File with HCI commands for BlueNRG FW6.0 and above.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#include "ble_hal_types.h"
+#include "ble_osal.h"
+#include "ble_status.h"
+#include "ble_hal.h"
+#include "ble_osal.h"
+#include "ble_hci_const.h"
+#include "bluenrg_aci_const.h"
+#include "bluenrg_gap_aci.h"
+#include "bluenrg_gatt_server.h"
+#include "bluenrg_gap.h"
+
+#define MIN(a,b)            ((a) < (b) )? (a) : (b)
+#define MAX(a,b)            ((a) > (b) )? (a) : (b)
+
+tBleStatus aci_gap_init_IDB05A1(uint8_t role, uint8_t privacy_enabled, uint8_t device_name_char_len, uint16_t* service_handle, uint16_t* dev_name_char_handle, uint16_t* appearance_char_handle)
+{
+  struct hci_request rq;
+  gap_init_cp_IDB05A1 cp;
+  gap_init_rp resp;
+ 
+  cp.role = role;
+  cp.privacy_enabled = privacy_enabled;
+  cp.device_name_char_len = device_name_char_len;
+    
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_INIT;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &resp;
+  rq.rlen = GAP_INIT_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  *service_handle = btohs(resp.service_handle);
+  *dev_name_char_handle = btohs(resp.dev_name_char_handle);
+  *appearance_char_handle = btohs(resp.appearance_char_handle);
+  
+  return 0;
+}
+tBleStatus aci_gap_init_IDB04A1(uint8_t role, uint16_t* service_handle, uint16_t* dev_name_char_handle, uint16_t* appearance_char_handle)
+{
+  struct hci_request rq;
+  gap_init_cp_IDB04A1 cp;
+  gap_init_rp resp;
+
+  cp.role = role;
+    
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_INIT;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &resp;
+  rq.rlen = GAP_INIT_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  *service_handle = btohs(resp.service_handle);
+  *dev_name_char_handle = btohs(resp.dev_name_char_handle);
+  *appearance_char_handle = btohs(resp.appearance_char_handle);
+  
+  return 0;
+}
+
+tBleStatus aci_gap_set_non_discoverable(void)
+{
+  struct hci_request rq;
+  uint8_t status;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_NON_DISCOVERABLE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;  
+}
+
+tBleStatus aci_gap_set_limited_discoverable(uint8_t AdvType, uint16_t AdvIntervMin, uint16_t AdvIntervMax,
+					    uint8_t OwnAddrType, uint8_t AdvFilterPolicy, uint8_t LocalNameLen,
+					    const char *LocalName, uint8_t ServiceUUIDLen, uint8_t* ServiceUUIDList,
+					    uint16_t SlaveConnIntervMin, uint16_t SlaveConnIntervMax)
+{
+  struct hci_request rq;
+  uint8_t status;    
+  uint8_t buffer[40];
+  uint8_t indx = 0;
+    
+  if((unsigned int)(LocalNameLen+ServiceUUIDLen+14) > sizeof(buffer))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  buffer[indx] = AdvType;
+  indx++;
+    
+  AdvIntervMin = htobs(AdvIntervMin);
+  Osal_MemCpy(buffer + indx, &AdvIntervMin, 2);
+  indx +=  2;
+    
+  AdvIntervMax = htobs(AdvIntervMax);
+  Osal_MemCpy(buffer + indx, &AdvIntervMax, 2);
+  indx +=  2;
+    
+  buffer[indx] = OwnAddrType;
+  indx++;
+    
+  buffer[indx] = AdvFilterPolicy;
+  indx++;
+    
+  buffer[indx] = LocalNameLen;
+  indx++;
+    
+  Osal_MemCpy(buffer + indx, LocalName, LocalNameLen);
+  indx +=  LocalNameLen;
+
+  buffer[indx] = ServiceUUIDLen;
+  indx++;
+
+  Osal_MemCpy(buffer + indx, ServiceUUIDList, ServiceUUIDLen);
+  indx +=  ServiceUUIDLen;
+
+  Osal_MemCpy(buffer + indx, &SlaveConnIntervMin, 2);
+  indx +=  2;
+
+  Osal_MemCpy(buffer + indx, &SlaveConnIntervMax, 2);
+  indx +=  2;    
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_LIMITED_DISCOVERABLE;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_set_discoverable(uint8_t AdvType, uint16_t AdvIntervMin, uint16_t AdvIntervMax,
+                             uint8_t OwnAddrType, uint8_t AdvFilterPolicy, uint8_t LocalNameLen,
+                             const char *LocalName, uint8_t ServiceUUIDLen, uint8_t* ServiceUUIDList,
+                             uint16_t SlaveConnIntervMin, uint16_t SlaveConnIntervMax)
+{
+  struct hci_request rq;
+  uint8_t status;    
+  uint8_t buffer[40];
+  uint8_t indx = 0;
+  
+  if ((unsigned int)(LocalNameLen+ServiceUUIDLen+14) > sizeof(buffer))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  buffer[indx] = AdvType;
+  indx++;
+  
+  AdvIntervMin = htobs(AdvIntervMin);
+  Osal_MemCpy(buffer + indx, &AdvIntervMin, 2);
+  indx +=  2;
+    
+  AdvIntervMax = htobs(AdvIntervMax);
+  Osal_MemCpy(buffer + indx, &AdvIntervMax, 2);
+  indx +=  2;
+    
+  buffer[indx] = OwnAddrType;
+  indx++;
+    
+  buffer[indx] = AdvFilterPolicy;
+  indx++;
+    
+  buffer[indx] = LocalNameLen;
+  indx++;
+    
+  Osal_MemCpy(buffer + indx, LocalName, LocalNameLen);
+  indx +=  LocalNameLen;
+  
+  buffer[indx] = ServiceUUIDLen;
+  indx++;
+
+  Osal_MemCpy(buffer + indx, ServiceUUIDList, ServiceUUIDLen);
+  indx +=  ServiceUUIDLen;  
+
+  SlaveConnIntervMin = htobs(SlaveConnIntervMin);
+  Osal_MemCpy(buffer + indx, &SlaveConnIntervMin, 2);
+  indx +=  2;
+  
+  SlaveConnIntervMax = htobs(SlaveConnIntervMax);
+  Osal_MemCpy(buffer + indx, &SlaveConnIntervMax, 2);
+  indx +=  2;    
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_DISCOVERABLE;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  if (status) {
+    return status;
+  }
+
+  return 0;
+}
+
+tBleStatus aci_gap_set_direct_connectable_IDB05A1(uint8_t own_addr_type, uint8_t directed_adv_type, uint8_t initiator_addr_type, const uint8_t *initiator_addr)
+{
+  struct hci_request rq;
+  gap_set_direct_conectable_cp_IDB05A1 cp;
+  uint8_t status;    
+
+  cp.own_bdaddr_type = own_addr_type;
+  cp.directed_adv_type = directed_adv_type;
+  cp.direct_bdaddr_type = initiator_addr_type;
+  Osal_MemCpy(cp.direct_bdaddr, initiator_addr, 6);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_DIRECT_CONNECTABLE;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+    
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+    
+  return status;
+}
+
+tBleStatus aci_gap_set_direct_connectable_IDB04A1(uint8_t own_addr_type, uint8_t initiator_addr_type, const uint8_t *initiator_addr)
+{
+  struct hci_request rq;
+  gap_set_direct_conectable_cp_IDB04A1 cp;
+  uint8_t status;    
+
+  cp.own_bdaddr_type = own_addr_type; 
+  cp.direct_bdaddr_type = initiator_addr_type;
+  Osal_MemCpy(cp.direct_bdaddr, initiator_addr, 6);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_DIRECT_CONNECTABLE;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+    
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+    
+  return status;
+}
+
+tBleStatus aci_gap_set_io_capability(uint8_t io_capability)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gap_set_io_capability_cp cp;
+    
+  cp.io_capability = io_capability;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_IO_CAPABILITY;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+    
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+    
+  return status;
+}
+
+tBleStatus aci_gap_set_auth_requirement(uint8_t mitm_mode,
+                                        uint8_t oob_enable,
+                                        uint8_t oob_data[16],
+                                        uint8_t min_encryption_key_size,
+                                        uint8_t max_encryption_key_size,
+                                        uint8_t use_fixed_pin,
+                                        uint32_t fixed_pin,
+                                        uint8_t bonding_mode)
+{
+  struct hci_request rq;
+  gap_set_auth_requirement_cp cp;    
+  uint8_t status;
+    
+  cp.mitm_mode = mitm_mode;
+  cp.oob_enable = oob_enable;
+  Osal_MemCpy(cp.oob_data, oob_data, 16);
+  cp.min_encryption_key_size = min_encryption_key_size;
+  cp.max_encryption_key_size = max_encryption_key_size;
+  cp.use_fixed_pin = use_fixed_pin;
+  cp.fixed_pin = htobl(fixed_pin);
+  cp.bonding_mode = bonding_mode;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_AUTH_REQUIREMENT;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  if (status) {
+    return status;
+  }
+    
+  return 0;
+}
+
+tBleStatus aci_gap_set_author_requirement(uint16_t conn_handle, uint8_t authorization_enable)
+{
+  struct hci_request rq;
+  gap_set_author_requirement_cp cp;    
+  uint8_t status;
+    
+  cp.conn_handle = htobs(conn_handle);
+  cp.authorization_enable = authorization_enable;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_AUTHOR_REQUIREMENT;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+tBleStatus aci_gap_pass_key_response(uint16_t conn_handle, uint32_t passkey)
+{
+  struct hci_request rq;
+  gap_passkey_response_cp cp;    
+  uint8_t status;
+    
+  cp.conn_handle = htobs(conn_handle);
+  cp.passkey = htobl(passkey);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_PASSKEY_RESPONSE;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+tBleStatus aci_gap_authorization_response(uint16_t conn_handle, uint8_t authorize)
+{
+  struct hci_request rq;
+  gap_authorization_response_cp cp;    
+  uint8_t status;
+    
+  cp.conn_handle = htobs(conn_handle);
+  cp.authorize = authorize;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_AUTHORIZATION_RESPONSE;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+tBleStatus aci_gap_set_non_connectable_IDB05A1(uint8_t adv_type, uint8_t own_address_type)
+{
+  struct hci_request rq;
+  gap_set_non_connectable_cp_IDB05A1 cp;    
+  uint8_t status;
+    
+  cp.advertising_event_type = adv_type;  
+  cp.own_address_type = own_address_type;
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_NON_CONNECTABLE;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+tBleStatus aci_gap_set_non_connectable_IDB04A1(uint8_t adv_type)
+{
+  struct hci_request rq;
+  gap_set_non_connectable_cp_IDB04A1 cp;    
+  uint8_t status;
+    
+  cp.advertising_event_type = adv_type;  
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_NON_CONNECTABLE;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+tBleStatus aci_gap_set_undirected_connectable(uint8_t own_addr_type, uint8_t adv_filter_policy)
+{
+  struct hci_request rq;
+  gap_set_undirected_connectable_cp cp;    
+  uint8_t status;
+    
+  cp.own_addr_type = own_addr_type;
+  cp.adv_filter_policy = adv_filter_policy;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_UNDIRECTED_CONNECTABLE;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+tBleStatus aci_gap_slave_security_request(uint16_t conn_handle, uint8_t bonding, uint8_t mitm_protection)
+{
+  struct hci_request rq;
+  gap_slave_security_request_cp cp;
+  uint8_t status;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.bonding = bonding;
+  cp.mitm_protection = mitm_protection;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SLAVE_SECURITY_REQUEST;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+
+}
+
+tBleStatus aci_gap_update_adv_data(uint8_t AdvLen, const uint8_t *AdvData)
+{
+  struct hci_request rq;
+  uint8_t status;
+  uint8_t buffer[32];
+  uint8_t indx = 0;
+    
+  if (AdvLen > (sizeof(buffer)-1))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  buffer[indx] = AdvLen;
+  indx++;
+    
+  Osal_MemCpy(buffer + indx, AdvData, AdvLen);
+  indx +=  AdvLen;
+    
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_UPDATE_ADV_DATA;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.rparam = &status;
+  rq.rlen = 1;
+    
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+    
+  return status;
+}
+
+tBleStatus aci_gap_delete_ad_type(uint8_t ad_type)
+{
+  struct hci_request rq;
+  gap_delete_ad_type_cp cp;
+  uint8_t status;
+
+  cp.ad_type = ad_type;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_DELETE_AD_TYPE;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_get_security_level(uint8_t* mitm_protection, uint8_t* bonding,
+                                      uint8_t* oob_data, uint8_t* passkey_required)
+{
+  struct hci_request rq;
+  gap_get_security_level_rp resp;
+    
+  Osal_MemSet(&resp, 0, sizeof(resp));
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_GET_SECURITY_LEVEL;
+  rq.rparam = &resp;
+  rq.rlen = GAP_GET_SECURITY_LEVEL_RP_SIZE;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if (resp.status) {
+    return resp.status;
+  }
+  
+  *mitm_protection = resp.mitm_protection;
+  *bonding = resp.bonding;
+  *oob_data = resp.oob_data;
+  *passkey_required = resp.passkey_required;
+
+  return resp.status;
+}
+
+tBleStatus aci_gap_configure_whitelist(void)
+{
+  struct hci_request rq;
+  uint8_t status;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_CONFIGURE_WHITELIST;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_terminate(uint16_t conn_handle, uint8_t reason)
+{
+  struct hci_request rq;
+  gap_terminate_cp cp;
+  uint8_t status;  
+
+  cp.handle = htobs(conn_handle);
+  cp.reason = reason;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_TERMINATE;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status; 
+}
+
+tBleStatus aci_gap_clear_security_database(void)
+{
+  struct hci_request rq;
+  uint8_t status;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_CLEAR_SECURITY_DB;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_allow_rebond_IDB05A1(uint16_t conn_handle)
+{
+  struct hci_request rq;
+  gap_allow_rebond_cp_IDB05A1 cp;
+  uint8_t status;
+  
+  cp.conn_handle = conn_handle;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_ALLOW_REBOND_DB;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+tBleStatus aci_gap_allow_rebond_IDB04A1(void)
+{
+  struct hci_request rq;
+  uint8_t status;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_ALLOW_REBOND_DB;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_start_limited_discovery_proc(uint16_t scanInterval, uint16_t scanWindow,
+						uint8_t own_address_type, uint8_t filterDuplicates)
+{
+  struct hci_request rq;
+  gap_start_limited_discovery_proc_cp cp;
+  uint8_t status;  
+
+  cp.scanInterval = htobs(scanInterval);
+  cp.scanWindow = htobs(scanWindow);
+  cp.own_address_type = own_address_type;
+  cp.filterDuplicates = filterDuplicates;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_START_LIMITED_DISCOVERY_PROC;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_start_general_discovery_proc(uint16_t scanInterval, uint16_t scanWindow,
+						uint8_t own_address_type, uint8_t filterDuplicates)
+{
+  struct hci_request rq;
+  gap_start_general_discovery_proc_cp cp;
+  uint8_t status;  
+
+  cp.scanInterval = htobs(scanInterval);
+  cp.scanWindow = htobs(scanWindow);
+  cp.own_address_type = own_address_type;
+  cp.filterDuplicates = filterDuplicates;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_START_GENERAL_DISCOVERY_PROC;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+
+tBleStatus aci_gap_start_name_discovery_proc(uint16_t scanInterval, uint16_t scanWindow,
+				     uint8_t peer_bdaddr_type, tBDAddr peer_bdaddr,	
+				     uint8_t own_bdaddr_type, uint16_t conn_min_interval,	
+				     uint16_t conn_max_interval, uint16_t conn_latency,	
+				     uint16_t supervision_timeout, uint16_t min_conn_length, 
+				     uint16_t max_conn_length)
+{
+  struct hci_request rq;
+  gap_start_name_discovery_proc_cp cp;
+  uint8_t status;  
+
+  cp.scanInterval = htobs(scanInterval);
+  cp.scanWindow = htobs(scanWindow);
+  cp.peer_bdaddr_type = peer_bdaddr_type;
+  Osal_MemCpy(cp.peer_bdaddr, peer_bdaddr, 6);
+  cp.own_bdaddr_type = own_bdaddr_type;
+  cp.conn_min_interval = htobs(conn_min_interval);
+  cp.conn_max_interval = htobs(conn_max_interval);
+  cp.conn_latency = htobs(conn_latency);
+  cp.supervision_timeout = htobs(supervision_timeout);
+  cp.min_conn_length = htobs(min_conn_length);
+  cp.max_conn_length = htobs(max_conn_length);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_START_NAME_DISCOVERY_PROC;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_start_auto_conn_establish_proc_IDB05A1(uint16_t scanInterval, uint16_t scanWindow,
+						 uint8_t own_bdaddr_type, uint16_t conn_min_interval,	
+						 uint16_t conn_max_interval, uint16_t conn_latency,	
+						 uint16_t supervision_timeout, uint16_t min_conn_length, 
+						 uint16_t max_conn_length,
+                         uint8_t num_whitelist_entries,
+                         const uint8_t *addr_array)
+{
+  struct hci_request rq;
+  uint8_t status;
+  uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
+  uint8_t indx = 0;
+    
+  if (((num_whitelist_entries*7)+25) > HCI_MAX_PAYLOAD_SIZE)
+    return BLE_STATUS_INVALID_PARAMS;
+
+  scanInterval = htobs(scanInterval);
+  Osal_MemCpy(buffer + indx, &scanInterval, 2);
+  indx += 2;
+    
+  scanWindow = htobs(scanWindow);
+  Osal_MemCpy(buffer + indx, &scanWindow, 2);
+  indx += 2;
+
+  buffer[indx] = own_bdaddr_type;
+  indx++;
+  
+  conn_min_interval = htobs(conn_min_interval);
+  Osal_MemCpy(buffer + indx, &conn_min_interval, 2);
+  indx +=  2;
+
+  conn_max_interval = htobs(conn_max_interval);
+  Osal_MemCpy(buffer + indx, &conn_max_interval, 2);
+  indx +=  2;
+
+  conn_latency = htobs(conn_latency);
+  Osal_MemCpy(buffer + indx, &conn_latency, 2);
+  indx +=  2;
+
+  supervision_timeout = htobs(supervision_timeout);
+  Osal_MemCpy(buffer + indx, &supervision_timeout, 2);
+  indx +=  2;
+
+  min_conn_length = htobs(min_conn_length);
+  Osal_MemCpy(buffer + indx, &min_conn_length, 2);
+  indx +=  2;
+
+  max_conn_length = htobs(max_conn_length);
+  Osal_MemCpy(buffer + indx, &max_conn_length, 2);
+  indx +=  2;
+
+  buffer[indx] = num_whitelist_entries;
+  indx++;
+
+  Osal_MemCpy(buffer + indx, addr_array, (num_whitelist_entries*7));
+  indx +=  num_whitelist_entries * 7;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_START_AUTO_CONN_ESTABLISH_PROC;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;  
+}
+
+tBleStatus aci_gap_start_auto_conn_establish_proc_IDB04A1(uint16_t scanInterval, uint16_t scanWindow,
+						 uint8_t own_bdaddr_type, uint16_t conn_min_interval,	
+						 uint16_t conn_max_interval, uint16_t conn_latency,	
+						 uint16_t supervision_timeout, uint16_t min_conn_length, 
+						 uint16_t max_conn_length,
+                         uint8_t use_reconn_addr,
+                         const tBDAddr reconn_addr,
+                         uint8_t num_whitelist_entries,
+                         const uint8_t *addr_array)
+{
+  struct hci_request rq;
+  uint8_t status;
+  uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
+  uint8_t indx = 0;
+    
+  if (((num_whitelist_entries*7)+25) > HCI_MAX_PAYLOAD_SIZE)
+    return BLE_STATUS_INVALID_PARAMS;
+
+  scanInterval = htobs(scanInterval);
+  Osal_MemCpy(buffer + indx, &scanInterval, 2);
+  indx += 2;
+    
+  scanWindow = htobs(scanWindow);
+  Osal_MemCpy(buffer + indx, &scanWindow, 2);
+  indx += 2;
+
+  buffer[indx] = own_bdaddr_type;
+  indx++;
+  
+  conn_min_interval = htobs(conn_min_interval);
+  Osal_MemCpy(buffer + indx, &conn_min_interval, 2);
+  indx +=  2;
+
+  conn_max_interval = htobs(conn_max_interval);
+  Osal_MemCpy(buffer + indx, &conn_max_interval, 2);
+  indx +=  2;
+
+  conn_latency = htobs(conn_latency);
+  Osal_MemCpy(buffer + indx, &conn_latency, 2);
+  indx +=  2;
+
+  supervision_timeout = htobs(supervision_timeout);
+  Osal_MemCpy(buffer + indx, &supervision_timeout, 2);
+  indx +=  2;
+
+  min_conn_length = htobs(min_conn_length);
+  Osal_MemCpy(buffer + indx, &min_conn_length, 2);
+  indx +=  2;
+
+  max_conn_length = htobs(max_conn_length);
+  Osal_MemCpy(buffer + indx, &max_conn_length, 2);
+  indx +=  2;
+  
+  buffer[indx] = use_reconn_addr;
+  indx++;
+
+  Osal_MemCpy(buffer + indx, reconn_addr, 6);
+  indx += 6;
+
+  buffer[indx] = num_whitelist_entries;
+  indx++;
+
+  Osal_MemCpy(buffer + indx, addr_array, (num_whitelist_entries*7));
+  indx +=  num_whitelist_entries * 7;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_START_AUTO_CONN_ESTABLISH_PROC;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;  
+}
+
+tBleStatus aci_gap_start_general_conn_establish_proc_IDB05A1(uint8_t scan_type, uint16_t scan_interval, uint16_t scan_window,
+						 uint8_t own_address_type, uint8_t filter_duplicates)
+{
+  struct hci_request rq;
+  gap_start_general_conn_establish_proc_cp_IDB05A1 cp;
+  uint8_t status;  
+
+  cp.scan_type = scan_type;
+  cp.scan_interval = htobs(scan_interval);
+  cp.scan_window = htobs(scan_window);
+  cp.own_address_type = own_address_type;
+  cp.filter_duplicates = filter_duplicates;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_START_GENERAL_CONN_ESTABLISH_PROC;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+tBleStatus aci_gap_start_general_conn_establish_proc_IDB04A1(uint8_t scan_type, uint16_t scan_interval, uint16_t scan_window,
+						 uint8_t own_address_type, uint8_t filter_duplicates, uint8_t use_reconn_addr, const tBDAddr reconn_addr)
+{
+  struct hci_request rq;
+  gap_start_general_conn_establish_proc_cp_IDB04A1 cp;
+  uint8_t status;  
+
+  cp.scan_type = scan_type;
+  cp.scan_interval = htobs(scan_interval);
+  cp.scan_window = htobs(scan_window);
+  cp.own_address_type = own_address_type;
+  cp.filter_duplicates = filter_duplicates;
+  cp.use_reconn_addr = use_reconn_addr;
+  Osal_MemCpy(cp.reconn_addr, reconn_addr, 6);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_START_GENERAL_CONN_ESTABLISH_PROC;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_start_selective_conn_establish_proc(uint8_t scan_type, uint16_t scan_interval, uint16_t scan_window,
+						 uint8_t own_address_type, uint8_t filter_duplicates, uint8_t num_whitelist_entries,
+                         const uint8_t *addr_array)
+{
+  struct hci_request rq;
+  gap_start_selective_conn_establish_proc_cp cp;
+  uint8_t status;
+  
+  if (((num_whitelist_entries*7)+GAP_START_SELECTIVE_CONN_ESTABLISH_PROC_CP_SIZE) > HCI_MAX_PAYLOAD_SIZE)
+    return BLE_STATUS_INVALID_PARAMS;
+  
+  cp.scan_type = scan_type;
+  cp.scan_interval = htobs(scan_interval);
+  cp.scan_window = htobs(scan_window);
+  cp.own_address_type = own_address_type;
+  cp.filter_duplicates = filter_duplicates;
+  cp.num_whitelist_entries = num_whitelist_entries;  
+  
+  Osal_MemCpy(cp.addr_array, addr_array, (num_whitelist_entries*7));
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_START_SELECTIVE_CONN_ESTABLISH_PROC;
+  rq.cparam = &cp;
+  rq.clen = GAP_START_SELECTIVE_CONN_ESTABLISH_PROC_CP_SIZE + (num_whitelist_entries*7);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_create_connection(uint16_t scanInterval, uint16_t scanWindow,
+				     uint8_t peer_bdaddr_type, tBDAddr peer_bdaddr,	
+				     uint8_t own_bdaddr_type, uint16_t conn_min_interval,	
+				     uint16_t conn_max_interval, uint16_t conn_latency,	
+				     uint16_t supervision_timeout, uint16_t min_conn_length, 
+				     uint16_t max_conn_length)
+{
+  struct hci_request rq;
+  gap_create_connection_cp cp;
+  uint8_t status;  
+
+  cp.scanInterval = htobs(scanInterval);
+  cp.scanWindow = htobs(scanWindow);
+  cp.peer_bdaddr_type = peer_bdaddr_type;
+  Osal_MemCpy(cp.peer_bdaddr, peer_bdaddr, 6);
+  cp.own_bdaddr_type = own_bdaddr_type;
+  cp.conn_min_interval = htobs(conn_min_interval);
+  cp.conn_max_interval = htobs(conn_max_interval);
+  cp.conn_latency = htobs(conn_latency);
+  cp.supervision_timeout = htobs(supervision_timeout);
+  cp.min_conn_length = htobs(min_conn_length);
+  cp.max_conn_length = htobs(max_conn_length);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_CREATE_CONNECTION;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_terminate_gap_procedure(uint8_t procedure_code)
+{
+  struct hci_request rq;
+  uint8_t status;  
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_TERMINATE_GAP_PROCEDURE;
+  rq.cparam = &procedure_code;
+  rq.clen = 1;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+
+}
+
+tBleStatus aci_gap_start_connection_update(uint16_t conn_handle, uint16_t conn_min_interval,	
+                                           uint16_t conn_max_interval, uint16_t conn_latency,	
+                                           uint16_t supervision_timeout, uint16_t min_conn_length, 
+                                           uint16_t max_conn_length)
+{
+  struct hci_request rq;
+  gap_start_connection_update_cp cp;
+  uint8_t status;  
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.conn_min_interval = htobs(conn_min_interval);
+  cp.conn_max_interval = htobs(conn_max_interval);
+  cp.conn_latency = htobs(conn_latency);
+  cp.supervision_timeout = htobs(supervision_timeout);
+  cp.min_conn_length = htobs(min_conn_length);
+  cp.max_conn_length = htobs(max_conn_length);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_START_CONNECTION_UPDATE;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_send_pairing_request(uint16_t conn_handle, uint8_t force_rebond)
+{
+  struct hci_request rq;
+  gap_send_pairing_request_cp cp;
+  uint8_t status;  
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.force_rebond = force_rebond;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SEND_PAIRING_REQUEST;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_resolve_private_address_IDB05A1(const tBDAddr private_address, tBDAddr actual_address)
+{
+  struct hci_request rq;
+  gap_resolve_private_address_cp cp;
+  gap_resolve_private_address_rp rp;
+
+  Osal_MemCpy(cp.address, private_address, 6);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_RESOLVE_PRIVATE_ADDRESS;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &rp;
+  rq.rlen = sizeof(rp);
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if(rp.status)
+    return rp.status;
+  
+  Osal_MemCpy(actual_address, rp.address, 6);  
+
+  return 0;
+}
+tBleStatus aci_gap_resolve_private_address_IDB04A1(const tBDAddr address)
+{
+  struct hci_request rq;
+  gap_resolve_private_address_cp cp;
+  uint8_t status;
+
+  Osal_MemCpy(cp.address, address, 6);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_RESOLVE_PRIVATE_ADDRESS;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+  
+tBleStatus aci_gap_set_broadcast_mode(uint16_t adv_interv_min, uint16_t adv_interv_max, uint8_t adv_type,
+				  uint8_t own_addr_type, uint8_t adv_data_length, const uint8_t *adv_data,  uint8_t num_whitelist_entries,
+                                  const uint8_t *addr_array)
+{
+  struct hci_request rq;
+  gap_set_broadcast_mode_cp cp;
+  uint8_t status;
+  uint8_t indx = 0;  
+  uint8_t variable_size =  1 + adv_data_length + 1 + num_whitelist_entries*7;
+  
+  if (variable_size > sizeof(cp.var_len_data) )
+    return BLE_STATUS_INVALID_PARAMS;
+  
+  cp.adv_interv_min = htobs(adv_interv_min);
+  cp.adv_interv_max = htobs(adv_interv_max);
+  cp.adv_type = adv_type;
+  cp.own_addr_type = own_addr_type;
+  
+  cp.var_len_data[indx] = adv_data_length;
+  indx++;
+  Osal_MemCpy(cp.var_len_data + indx, adv_data, adv_data_length);
+  indx += adv_data_length;
+  cp.var_len_data[indx] = num_whitelist_entries;
+  indx ++;
+  Osal_MemCpy(cp.var_len_data + indx, addr_array, num_whitelist_entries*7);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_SET_BROADCAST_MODE;
+  rq.cparam = &cp;
+  rq.clen = GAP_SET_BROADCAST_MODE_CP_SIZE + variable_size;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_start_observation_procedure(uint16_t scan_interval, uint16_t scan_window, uint8_t scan_type,
+						 uint8_t own_address_type, uint8_t filter_duplicates)
+{
+  struct hci_request rq;
+  gap_start_observation_proc_cp cp;
+  uint8_t status;
+  
+  cp.scan_interval = scan_interval;
+  cp.scan_window = scan_window;
+  cp.scan_type = scan_type;
+  cp.own_address_type = own_address_type;
+  cp.filter_duplicates = filter_duplicates;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_START_OBSERVATION_PROC;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_is_device_bonded(uint8_t peer_address_type, const tBDAddr peer_address)
+{
+  struct hci_request rq;
+  gap_is_device_bonded_cp cp;
+  uint8_t status;
+  
+  cp.peer_address_type = peer_address_type;
+  Osal_MemCpy(cp.peer_address, peer_address, sizeof(cp.peer_address));
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_IS_DEVICE_BONDED;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gap_get_bonded_devices(uint8_t *num_devices, uint8_t *device_list, uint8_t device_list_size)
+{
+  struct hci_request rq;
+  gap_get_bonded_devices_rp rp;
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GAP_GET_BONDED_DEVICES;
+  rq.rparam = &rp;
+  rq.rlen = sizeof(rp);
+  
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if (rp.status) {
+    return rp.status;
+  }
+  
+  *num_devices = rp.num_addr;
+  if(device_list != NULL)
+    Osal_MemCpy(device_list, rp.dev_list, MIN(device_list_size,rp.num_addr*7));
+  
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_gatt_aci.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1471 @@
+/******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
+* File Name          : bluenrg_gatt_aci.c
+* Author             : AMS - AAS
+* Version            : V1.0.0
+* Date               : 26-Jun-2014
+* Description        : File with GATT commands for BlueNRG FW6.3.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#include "ble_hal_types.h"
+#include "ble_osal.h"
+#include "ble_status.h"
+#include "ble_hal.h"
+#include "ble_hci_const.h"
+#include "bluenrg_aci_const.h"
+#include "bluenrg_gatt_aci.h"
+#include "bluenrg_gatt_server.h"
+#include "bluenrg_gap.h"
+
+#define MIN(a,b)            ((a) < (b) )? (a) : (b)
+#define MAX(a,b)            ((a) > (b) )? (a) : (b)
+
+
+tBleStatus aci_gatt_init(void)
+{
+  struct hci_request rq;
+  uint8_t status;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_INIT;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_add_serv(uint8_t service_uuid_type, const uint8_t* service_uuid, uint8_t service_type, uint8_t max_attr_records, uint16_t *serviceHandle)
+{
+  struct hci_request rq;
+  gatt_add_serv_rp resp;    
+  uint8_t buffer[19];
+  uint8_t uuid_len;
+  uint8_t indx = 0;
+    
+  buffer[indx] = service_uuid_type;
+  indx++;
+    
+  if(service_uuid_type == UUID_TYPE_16){
+    uuid_len = 2;
+  }
+  else {
+    uuid_len = 16;
+  }        
+  Osal_MemCpy(buffer + indx, service_uuid, uuid_len);
+  indx +=  uuid_len;
+    
+  buffer[indx] = service_type;
+  indx++;
+    
+  buffer[indx] = max_attr_records;
+  indx++;
+    
+    
+  Osal_MemSet(&resp, 0, sizeof(resp));
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_ADD_SERV;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.rparam = &resp;
+  rq.rlen = GATT_ADD_SERV_RP_SIZE;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  if (resp.status) {
+    return resp.status;
+  }
+    
+  *serviceHandle = btohs(resp.handle);
+
+  return 0;
+}
+
+tBleStatus aci_gatt_include_service(uint16_t service_handle, uint16_t included_start_handle,
+				    uint16_t included_end_handle, uint8_t included_uuid_type,
+				    const uint8_t* included_uuid, uint16_t *included_handle)
+{
+  struct hci_request rq;
+  gatt_include_serv_rp resp;    
+  uint8_t buffer[23];
+  uint8_t uuid_len;
+  uint8_t indx = 0;
+
+  service_handle = htobs(service_handle);
+  Osal_MemCpy(buffer, &service_handle, 2);
+  indx += 2;
+    
+  included_start_handle = htobs(included_start_handle);
+  Osal_MemCpy(buffer+indx, &included_start_handle, 2);
+  indx += 2;
+
+  included_end_handle = htobs(included_end_handle);
+  Osal_MemCpy(buffer+indx, &included_end_handle, 2);
+  indx += 2;
+
+  if(included_uuid_type == UUID_TYPE_16){
+    uuid_len = 2;
+  } else {
+    uuid_len = 16;
+  }        
+
+  buffer[indx] = included_uuid_type;
+  indx++;
+
+  Osal_MemCpy(buffer + indx, included_uuid, uuid_len);
+  indx += uuid_len;
+    
+  Osal_MemSet(&resp, 0, sizeof(resp));
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_INCLUDE_SERV;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.rparam = &resp;
+  rq.rlen = GATT_INCLUDE_SERV_RP_SIZE;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  if (resp.status) {
+    return resp.status;
+  }
+    
+  *included_handle = btohs(resp.handle);
+
+  return 0;
+}
+
+tBleStatus aci_gatt_add_char(uint16_t serviceHandle,
+			     uint8_t charUuidType,
+			     const uint8_t* charUuid, 
+			     uint8_t charValueLen, 
+			     uint8_t charProperties,
+			     uint8_t secPermissions,
+			     uint8_t gattEvtMask,
+			     uint8_t encryKeySize,
+			     uint8_t isVariable,
+			     uint16_t* charHandle)                     
+{
+  struct hci_request rq;
+  gatt_add_serv_rp resp;
+  uint8_t buffer[25];
+  uint8_t uuid_len;
+  uint8_t indx = 0;
+    
+  serviceHandle = htobs(serviceHandle);
+  Osal_MemCpy(buffer + indx, &serviceHandle, 2);
+  indx += 2;
+    
+  buffer[indx] = charUuidType;
+  indx++;
+    
+  if(charUuidType == UUID_TYPE_16){
+    uuid_len = 2;
+  }
+  else {
+    uuid_len = 16;
+  }        
+  Osal_MemCpy(buffer + indx, charUuid, uuid_len);
+  indx +=  uuid_len;
+    
+  buffer[indx] = charValueLen;
+  indx++;
+    
+  buffer[indx] = charProperties;
+  indx++;
+    
+  buffer[indx] = secPermissions;
+  indx++;
+    
+  buffer[indx] = gattEvtMask;
+  indx++;
+    
+  buffer[indx] = encryKeySize;
+  indx++;
+    
+  buffer[indx] = isVariable;
+  indx++;
+    
+  Osal_MemSet(&resp, 0, sizeof(resp));
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_ADD_CHAR;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.rparam = &resp;
+  rq.rlen = GATT_ADD_CHAR_RP_SIZE;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  if (resp.status) {
+    return resp.status;
+  }
+    
+  *charHandle = btohs(resp.handle);
+
+  return 0;
+}
+
+tBleStatus aci_gatt_add_char_desc(uint16_t serviceHandle,
+                                  uint16_t charHandle,
+                                  uint8_t descUuidType,
+                                  const uint8_t* uuid, 
+                                  uint8_t descValueMaxLen,
+                                  uint8_t descValueLen,
+                                  const void* descValue, 
+                                  uint8_t secPermissions,
+                                  uint8_t accPermissions,
+                                  uint8_t gattEvtMask,
+                                  uint8_t encryKeySize,
+                                  uint8_t isVariable,
+                                  uint16_t* descHandle)                     
+{
+  struct hci_request rq;
+  gatt_add_char_desc_rp resp;
+  uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
+  uint8_t uuid_len;
+  uint8_t indx = 0;
+    
+  serviceHandle = htobs(serviceHandle);
+  Osal_MemCpy(buffer + indx, &serviceHandle, 2);
+  indx += 2;
+    
+  charHandle = htobs(charHandle);
+  Osal_MemCpy(buffer + indx, &charHandle, 2);
+  indx += 2;
+    
+  buffer[indx] = descUuidType;
+  indx++;
+    
+  if(descUuidType == UUID_TYPE_16){
+    uuid_len = 2;
+  }
+  else {
+    uuid_len = 16;
+  }        
+  Osal_MemCpy(buffer + indx, uuid, uuid_len);
+  indx +=  uuid_len;
+    
+  buffer[indx] = descValueMaxLen;
+  indx++;
+    
+  buffer[indx] = descValueLen;
+  indx++;
+
+  if ((descValueLen+indx+5) > HCI_MAX_PAYLOAD_SIZE)
+    return BLE_STATUS_INVALID_PARAMS;
+  
+  Osal_MemCpy(buffer + indx, descValue, descValueLen);
+  indx += descValueLen;
+    
+  buffer[indx] = secPermissions;
+  indx++;
+    
+  buffer[indx] = accPermissions;
+  indx++;
+    
+  buffer[indx] = gattEvtMask;
+  indx++;
+    
+  buffer[indx] = encryKeySize;
+  indx++;
+    
+  buffer[indx] = isVariable;
+  indx++;
+    
+  Osal_MemSet(&resp, 0, sizeof(resp));
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_ADD_CHAR_DESC;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.rparam = &resp;
+  rq.rlen = GATT_ADD_CHAR_DESC_RP_SIZE;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  if (resp.status) {
+    return resp.status;
+  }
+    
+  *descHandle = btohs(resp.handle);
+
+  return 0;
+}
+
+
+tBleStatus aci_gatt_update_char_value(uint16_t servHandle, 
+				      uint16_t charHandle,
+				      uint8_t charValOffset,
+				      uint8_t charValueLen,   
+				      const void *charValue)
+{
+  struct hci_request rq;
+  uint8_t status;
+  uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
+  uint8_t indx = 0;
+    
+  if ((charValueLen+6) > HCI_MAX_PAYLOAD_SIZE)
+    return BLE_STATUS_INVALID_PARAMS;
+
+  servHandle = htobs(servHandle);
+  Osal_MemCpy(buffer + indx, &servHandle, 2);
+  indx += 2;
+    
+  charHandle = htobs(charHandle);
+  Osal_MemCpy(buffer + indx, &charHandle, 2);
+  indx += 2;
+    
+  buffer[indx] = charValOffset;
+  indx++;
+    
+  buffer[indx] = charValueLen;
+  indx++;
+        
+  Osal_MemCpy(buffer + indx, charValue, charValueLen);
+  indx +=  charValueLen;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_UPD_CHAR_VAL;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  if (status) {
+    return status;
+  }
+
+  return 0;
+}
+
+tBleStatus aci_gatt_del_char(uint16_t servHandle, uint16_t charHandle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_del_char_cp cp;
+
+  cp.service_handle = htobs(servHandle);
+  cp.char_handle = htobs(charHandle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_DEL_CHAR;
+  rq.cparam = &cp;
+  rq.clen = GATT_DEL_CHAR_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+                                      
+tBleStatus aci_gatt_del_service(uint16_t servHandle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_del_serv_cp cp;
+
+  cp.service_handle = htobs(servHandle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_DEL_SERV;
+  rq.cparam = &cp;
+  rq.clen = GATT_DEL_SERV_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_del_include_service(uint16_t servHandle, uint16_t includeServHandle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_del_inc_serv_cp cp;
+
+  cp.service_handle = htobs(servHandle);
+  cp.inc_serv_handle = htobs(includeServHandle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_DEL_INC_SERV;
+  rq.cparam = &cp;
+  rq.clen = GATT_DEL_INC_SERV_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_set_event_mask(uint32_t event_mask)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_set_evt_mask_cp cp;
+
+  cp.evt_mask = htobs(event_mask);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_SET_EVT_MASK;
+  rq.cparam = &cp;
+  rq.clen = GATT_SET_EVT_MASK_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+  
+tBleStatus aci_gatt_exchange_configuration(uint16_t conn_handle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_exchange_config_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_EXCHANGE_CONFIG;
+  rq.cparam = &cp;
+  rq.clen = GATT_EXCHANGE_CONFIG_CP_SIZE;
+  rq.event = EVT_CMD_STATUS; 
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+  
+tBleStatus aci_att_find_information_req(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  att_find_info_req_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.start_handle = htobs(start_handle);
+  cp.end_handle = htobs(end_handle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_ATT_FIND_INFO_REQ;
+  rq.cparam = &cp;
+  rq.clen = ATT_FIND_INFO_REQ_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_att_find_by_type_value_req(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle,
+                                          uint8_t* uuid, uint8_t attr_val_len, uint8_t* attr_val)
+{
+  struct hci_request rq;
+  uint8_t status;
+  att_find_by_type_value_req_cp cp;
+  
+  if(attr_val_len > sizeof(cp.attr_val))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.start_handle = htobs(start_handle);
+  cp.end_handle = htobs(end_handle);
+  Osal_MemCpy(cp.uuid, uuid, 2);
+  cp.attr_val_len = attr_val_len;
+  Osal_MemCpy(cp.attr_val, attr_val, attr_val_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_ATT_FIND_BY_TYPE_VALUE_REQ;
+  rq.cparam = &cp;
+  rq.clen = ATT_FIND_BY_TYPE_VALUE_REQ_CP_SIZE + attr_val_len;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_att_read_by_type_req(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle,
+                                    uint8_t  uuid_type, uint8_t* uuid)
+{
+  struct hci_request rq;
+  uint8_t status;
+  att_read_by_type_req_cp cp;
+  uint8_t uuid_len;
+  
+  if(uuid_type == UUID_TYPE_16){
+    uuid_len = 2;
+  }
+  else{
+    uuid_len = 16;
+  }
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.start_handle = htobs(start_handle);
+  cp.end_handle = htobs(end_handle);
+  cp.uuid_type = uuid_type;
+  Osal_MemCpy(cp.uuid, uuid, uuid_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_ATT_READ_BY_TYPE_REQ;
+  rq.cparam = &cp;
+  rq.clen = ATT_READ_BY_TYPE_REQ_CP_SIZE + uuid_len;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_att_read_by_group_type_req(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle,
+                                    uint8_t  uuid_type, uint8_t* uuid)
+{
+  struct hci_request rq;
+  uint8_t status;
+  att_read_by_group_type_req_cp cp;
+  uint8_t uuid_len;
+  
+  if(uuid_type == UUID_TYPE_16){
+    uuid_len = 2;
+  }
+  else{
+    uuid_len = 16;
+  }
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.start_handle = htobs(start_handle);
+  cp.end_handle = htobs(end_handle);
+  cp.uuid_type = uuid_type;
+  Osal_MemCpy(cp.uuid, uuid, uuid_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_ATT_READ_BY_GROUP_TYPE_REQ;
+  rq.cparam = &cp;
+  rq.clen = ATT_READ_BY_GROUP_TYPE_REQ_CP_SIZE + uuid_len;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_att_prepare_write_req(uint16_t conn_handle, uint16_t attr_handle, uint16_t value_offset,
+                                    uint8_t  attr_val_len, uint8_t* attr_val)
+{
+  struct hci_request rq;
+  uint8_t status;
+  att_prepare_write_req_cp cp;
+  
+  if(attr_val_len > sizeof(cp.attr_val))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.attr_handle = htobs(attr_handle);
+  cp.value_offset = htobs(value_offset);
+  cp.attr_val_len = attr_val_len;
+  Osal_MemCpy(cp.attr_val, attr_val, attr_val_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_ATT_PREPARE_WRITE_REQ;
+  rq.cparam = &cp;
+  rq.clen = ATT_PREPARE_WRITE_REQ_CP_SIZE + attr_val_len;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_att_execute_write_req(uint16_t conn_handle, uint8_t execute)
+{
+  struct hci_request rq;
+  uint8_t status;
+  att_execute_write_req_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.execute = execute;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_ATT_EXECUTE_WRITE_REQ;
+  rq.cparam = &cp;
+  rq.clen = ATT_EXECUTE_WRITE_REQ_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_disc_all_prim_services(uint16_t conn_handle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_disc_all_prim_services_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_DISC_ALL_PRIM_SERVICES;
+  rq.cparam = &cp;
+  rq.clen = GATT_DISC_ALL_PRIM_SERVICES_CP_SIZE;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_disc_prim_service_by_uuid(uint16_t conn_handle, uint8_t uuid_type, uint8_t* uuid)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_disc_prim_service_by_uuid_cp cp;
+  uint8_t uuid_len;
+  
+  if(uuid_type == UUID_TYPE_16){
+    uuid_len = 2;
+  }
+  else{
+    uuid_len = 16;
+  }
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.uuid_type = uuid_type;
+  Osal_MemCpy(cp.uuid, uuid, uuid_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_DISC_PRIM_SERVICE_BY_UUID;
+  rq.cparam = &cp;
+  rq.clen = GATT_DISC_PRIM_SERVICE_BY_UUID_CP_SIZE + uuid_len;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_find_included_services(uint16_t conn_handle, uint16_t start_service_handle, 
+					   uint16_t end_service_handle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_find_included_services_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.start_handle = htobs(start_service_handle);
+  cp.end_handle = htobs(end_service_handle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_FIND_INCLUDED_SERVICES;
+  rq.cparam = &cp;
+  rq.clen = GATT_FIND_INCLUDED_SERVICES_CP_SIZE;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_disc_all_charac_of_serv(uint16_t conn_handle, uint16_t start_attr_handle, 
+					    uint16_t end_attr_handle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_disc_all_charac_of_serv_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.start_attr_handle = htobs(start_attr_handle);
+  cp.end_attr_handle = htobs(end_attr_handle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_DISC_ALL_CHARAC_OF_SERV;
+  rq.cparam = &cp;
+  rq.clen = GATT_DISC_ALL_CHARAC_OF_SERV_CP_SIZE;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_disc_charac_by_uuid(uint16_t conn_handle, uint16_t start_handle,
+				                     uint16_t end_handle, uint8_t charUuidType,
+                                                     const uint8_t* charUuid)
+{
+  struct hci_request rq;
+  uint8_t status;
+  
+  uint8_t buffer[23];
+  uint8_t uuid_len;
+  uint8_t indx = 0;
+    
+  conn_handle = htobs(conn_handle);
+  Osal_MemCpy(buffer + indx, &conn_handle, 2);
+  indx += 2;
+    
+  start_handle = htobs(start_handle);
+  Osal_MemCpy(buffer + indx, &start_handle, 2);
+  indx += 2;
+  
+  end_handle = htobs(end_handle);
+  Osal_MemCpy(buffer + indx, &end_handle, 2);
+  indx += 2;
+  
+  buffer[indx] = charUuidType;
+  indx++;
+    
+  if(charUuidType == 0x01){
+    uuid_len = 2;
+  }
+  else {
+    uuid_len = 16;
+  }        
+  Osal_MemCpy(buffer + indx, charUuid, uuid_len);
+  indx +=  uuid_len;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_DISC_CHARAC_BY_UUID;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_disc_all_charac_descriptors(uint16_t conn_handle, uint16_t char_val_handle, 
+						uint16_t char_end_handle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_disc_all_charac_descriptors_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.char_val_handle = htobs(char_val_handle);
+  cp.char_end_handle = htobs(char_end_handle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_DISC_ALL_CHARAC_DESCRIPTORS;
+  rq.cparam = &cp;
+  rq.clen = GATT_DISC_ALL_CHARAC_DESCRIPTORS_CP_SIZE;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_read_charac_val(uint16_t conn_handle, uint16_t attr_handle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_read_charac_val_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.attr_handle = htobs(attr_handle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_READ_CHARAC_VAL;
+  rq.cparam = &cp;
+  rq.clen = GATT_READ_CHARAC_VAL_CP_SIZE;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+tBleStatus aci_gatt_read_using_charac_uuid(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle,
+                                    uint8_t  uuid_type, uint8_t* uuid)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_read_using_charac_uuid_cp cp;
+  uint8_t uuid_len;
+  
+  if(uuid_type == UUID_TYPE_16){
+    uuid_len = 2;
+  }
+  else{
+    uuid_len = 16;
+  }
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.start_handle = htobs(start_handle);
+  cp.end_handle = htobs(end_handle);
+  cp.uuid_type = uuid_type;
+  Osal_MemCpy(cp.uuid, uuid, uuid_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_READ_USING_CHARAC_UUID;
+  rq.cparam = &cp;
+  rq.clen = GATT_READ_USING_CHARAC_UUID_CP_SIZE + uuid_len;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_read_long_charac_val(uint16_t conn_handle, uint16_t attr_handle, 
+					 uint16_t val_offset)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_read_long_charac_val_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.attr_handle = htobs(attr_handle);
+  cp.val_offset = htobs(val_offset);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_READ_LONG_CHARAC_VAL;
+  rq.cparam = &cp;
+  rq.clen = GATT_READ_LONG_CHARAC_VAL_CP_SIZE;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_read_multiple_charac_val(uint16_t conn_handle, uint8_t num_handles, 
+                                             uint8_t* set_of_handles)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_read_multiple_charac_val_cp cp;
+  
+  if(num_handles*2 > sizeof(cp.set_of_handles))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.num_handles = htobs(num_handles);
+  Osal_MemCpy(cp.set_of_handles, set_of_handles, 2*num_handles);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_READ_MULTIPLE_CHARAC_VAL;
+  rq.cparam = &cp;
+  rq.clen = GATT_READ_MULTIPLE_CHARAC_VAL_CP_SIZE + 2*num_handles;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+
+
+tBleStatus aci_gatt_write_charac_value(uint16_t conn_handle, uint16_t attr_handle, 
+				       uint8_t value_len, uint8_t *attr_value)
+{
+  struct hci_request rq;
+  uint8_t status;
+  uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
+  uint8_t indx = 0;
+    
+  if ((value_len+5) > HCI_MAX_PAYLOAD_SIZE)
+    return BLE_STATUS_INVALID_PARAMS;
+
+  conn_handle = htobs(conn_handle);
+  Osal_MemCpy(buffer + indx, &conn_handle, 2);
+  indx += 2;
+    
+  attr_handle = htobs(attr_handle);
+  Osal_MemCpy(buffer + indx, &attr_handle, 2);
+  indx += 2;
+
+  buffer[indx] = value_len;
+  indx++;
+        
+  Osal_MemCpy(buffer + indx, attr_value, value_len);
+  indx +=  value_len;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_WRITE_CHAR_VALUE;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_write_long_charac_val(uint16_t conn_handle, uint16_t attr_handle,
+                                          uint16_t val_offset, uint8_t val_len, const uint8_t* attr_val)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_write_long_charac_val_cp cp;
+  
+  if(val_len > sizeof(cp.attr_val))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.attr_handle = htobs(attr_handle);
+  cp.val_offset = htobs(val_offset);
+  cp.val_len = val_len;
+  Osal_MemCpy(cp.attr_val, attr_val, val_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_WRITE_LONG_CHARAC_VAL;
+  rq.cparam = &cp;
+  rq.clen = GATT_WRITE_LONG_CHARAC_VAL_CP_SIZE + val_len;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_write_charac_reliable(uint16_t conn_handle, uint16_t attr_handle,
+                                          uint16_t val_offset, uint8_t val_len, uint8_t* attr_val)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_write_charac_reliable_cp cp;
+  
+  if(val_len > sizeof(cp.attr_val))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.attr_handle = htobs(attr_handle);
+  cp.val_offset = htobs(val_offset);
+  cp.val_len = val_len;
+  Osal_MemCpy(cp.attr_val, attr_val, val_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_WRITE_CHARAC_RELIABLE;
+  rq.cparam = &cp;
+  rq.clen = GATT_WRITE_CHARAC_RELIABLE_CP_SIZE + val_len;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_write_long_charac_desc(uint16_t conn_handle, uint16_t attr_handle,
+                                          uint16_t val_offset, uint8_t val_len, uint8_t* attr_val)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_write_charac_reliable_cp cp;
+  
+  if(val_len > sizeof(cp.attr_val))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.attr_handle = htobs(attr_handle);
+  cp.val_offset = htobs(val_offset);
+  cp.val_len = val_len;
+  Osal_MemCpy(cp.attr_val, attr_val, val_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_WRITE_LONG_CHARAC_DESC;
+  rq.cparam = &cp;
+  rq.clen = GATT_WRITE_LONG_CHARAC_DESC_CP_SIZE + val_len;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_read_long_charac_desc(uint16_t conn_handle, uint16_t attr_handle,
+                                          uint16_t val_offset)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_read_long_charac_desc_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.attr_handle = htobs(attr_handle);
+  cp.val_offset = htobs(val_offset);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_READ_LONG_CHARAC_DESC;
+  rq.cparam = &cp;
+  rq.clen = GATT_READ_LONG_CHARAC_DESC_CP_SIZE;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_write_charac_descriptor(uint16_t conn_handle, uint16_t attr_handle, 
+					   uint8_t value_len, uint8_t *attr_value)
+{
+  struct hci_request rq;
+  uint8_t status;
+  uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
+  uint8_t indx = 0;
+    
+  if ((value_len+5) > HCI_MAX_PAYLOAD_SIZE)
+    return BLE_STATUS_INVALID_PARAMS;
+
+  conn_handle = htobs(conn_handle);
+  Osal_MemCpy(buffer + indx, &conn_handle, 2);
+  indx += 2;
+    
+  attr_handle = htobs(attr_handle);
+  Osal_MemCpy(buffer + indx, &attr_handle, 2);
+  indx += 2;
+
+  buffer[indx] = value_len;
+  indx++;
+        
+  Osal_MemCpy(buffer + indx, attr_value, value_len);
+  indx +=  value_len;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_WRITE_CHAR_DESCRIPTOR;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.event = EVT_CMD_STATUS; 
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_read_charac_desc(uint16_t conn_handle, uint16_t attr_handle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_read_long_charac_desc_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.attr_handle = htobs(attr_handle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_READ_CHAR_DESCRIPTOR;
+  rq.cparam = &cp;
+  rq.clen = GATT_READ_CHAR_DESCRIPTOR_CP_SIZE;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_write_without_response(uint16_t conn_handle, uint16_t attr_handle,
+                                              uint8_t val_len, const uint8_t* attr_val)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_write_without_resp_cp cp;
+  
+  if(val_len > sizeof(cp.attr_val))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.attr_handle = htobs(attr_handle);
+  cp.val_len = val_len;
+  Osal_MemCpy(cp.attr_val, attr_val, val_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_WRITE_WITHOUT_RESPONSE;
+  rq.cparam = &cp;
+  rq.clen = GATT_WRITE_WITHOUT_RESPONSE_CP_SIZE + val_len; 
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_signed_write_without_resp(uint16_t conn_handle, uint16_t attr_handle,
+                                              uint8_t val_len, uint8_t* attr_val)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_signed_write_without_resp_cp cp;
+  
+  if(val_len > sizeof(cp.attr_val))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.attr_handle = htobs(attr_handle);
+  cp.val_len = val_len;
+  Osal_MemCpy(cp.attr_val, attr_val, val_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_SIGNED_WRITE_WITHOUT_RESPONSE;
+  rq.cparam = &cp;
+  rq.clen = GATT_SIGNED_WRITE_WITHOUT_RESPONSE_CP_SIZE + val_len;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_confirm_indication(uint16_t conn_handle)
+{
+  struct hci_request rq;
+  uint8_t status;
+  gatt_confirm_indication_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_CONFIRM_INDICATION;
+  rq.cparam = &cp;
+  rq.clen = GATT_CONFIRM_INDICATION_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;
+}
+
+tBleStatus aci_gatt_write_response(uint16_t conn_handle,
+                                   uint16_t attr_handle,
+                                   uint8_t write_status,
+                                   uint8_t err_code,
+                                   uint8_t att_val_len,
+                                   uint8_t *att_val)
+{
+  struct hci_request rq;
+  uint8_t status;
+  uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
+  uint8_t indx = 0;
+  
+  if ((att_val_len+7) > HCI_MAX_PAYLOAD_SIZE)
+    return BLE_STATUS_INVALID_PARAMS;
+
+  conn_handle = htobs(conn_handle);  
+  Osal_MemCpy(buffer + indx, &conn_handle, 2);
+  indx += 2;
+    
+  attr_handle = htobs(attr_handle);
+  Osal_MemCpy(buffer + indx, &attr_handle, 2);
+  indx += 2;
+    
+  buffer[indx] = write_status;
+  indx += 1;
+    
+  buffer[indx] = err_code;
+  indx += 1;
+    
+  buffer[indx] = att_val_len;
+  indx += 1;
+    
+  Osal_MemCpy(buffer + indx, att_val, att_val_len);
+  indx += att_val_len;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_WRITE_RESPONSE;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  if (status) {
+    return status;
+  }
+
+  return 0;
+}
+
+tBleStatus aci_gatt_allow_read(uint16_t conn_handle)
+{
+    struct hci_request rq;
+    gatt_allow_read_cp cp;
+    uint8_t status;
+    
+    cp.conn_handle = htobs(conn_handle);
+
+    Osal_MemSet(&rq, 0, sizeof(rq));
+    rq.ogf = OGF_VENDOR_CMD;
+    rq.ocf = OCF_GATT_ALLOW_READ;
+    rq.cparam = &cp;
+    rq.clen = GATT_ALLOW_READ_CP_SIZE;
+    rq.rparam = &status;
+    rq.rlen = 1;
+
+    if (hci_send_req(&rq, FALSE) < 0)
+      return BLE_STATUS_TIMEOUT;
+
+    return status;
+}
+
+tBleStatus aci_gatt_set_security_permission(uint16_t service_handle, uint16_t attr_handle,
+                                            uint8_t security_permission)
+{
+    struct hci_request rq;
+    gatt_set_security_permission_cp cp;
+    uint8_t status;
+    
+    cp.service_handle = htobs(service_handle);
+    cp.attr_handle = htobs(attr_handle);
+    cp.security_permission = security_permission;
+
+    Osal_MemSet(&rq, 0, sizeof(rq));
+    rq.ogf = OGF_VENDOR_CMD;
+    rq.ocf = OCF_GATT_SET_SECURITY_PERMISSION;
+    rq.cparam = &cp;
+    rq.clen = GATT_GATT_SET_SECURITY_PERMISSION_CP_SIZE;
+    rq.rparam = &status;
+    rq.rlen = 1;
+
+    if (hci_send_req(&rq, FALSE) < 0)
+      return BLE_STATUS_TIMEOUT;
+
+    return status;
+}
+
+tBleStatus aci_gatt_set_desc_value(uint16_t servHandle, 
+				   uint16_t charHandle,
+				   uint16_t charDescHandle,
+				   uint16_t charDescValOffset,
+				   uint8_t charDescValueLen,   
+				   const void *charDescValue)
+{
+  struct hci_request rq;
+  uint8_t status;
+  uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
+  uint8_t indx = 0;
+    
+  if ((charDescValueLen+9) > HCI_MAX_PAYLOAD_SIZE)
+    return BLE_STATUS_INVALID_PARAMS;
+
+  servHandle = htobs(servHandle);
+  Osal_MemCpy(buffer + indx, &servHandle, 2);
+  indx += 2;
+    
+  charHandle = htobs(charHandle);
+  Osal_MemCpy(buffer + indx, &charHandle, 2);
+  indx += 2;
+    
+  charDescHandle = htobs(charDescHandle);
+  Osal_MemCpy(buffer + indx, &charDescHandle, 2);
+  indx += 2;
+    
+  Osal_MemCpy(buffer + indx, &charDescValOffset, 2);
+  indx += 2;
+    
+  buffer[indx] = charDescValueLen;
+  indx++;
+        
+  Osal_MemCpy(buffer + indx, charDescValue, charDescValueLen);
+  indx +=  charDescValueLen;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_SET_DESC_VAL;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_gatt_read_handle_value(uint16_t attr_handle, uint16_t data_len, uint16_t *data_len_out_p, uint8_t *data)
+{
+  struct hci_request rq;
+  gatt_read_handle_val_cp cp;
+  gatt_read_handle_val_rp rp;
+ 
+  if(data_len > sizeof(rp.value))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  cp.attr_handle = htobs(attr_handle);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_READ_HANDLE_VALUE;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &rp;
+  rq.rlen = sizeof(rp);
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if(rp.status)
+    return rp.status;
+
+  *data_len_out_p = btohs(rp.value_len);
+
+  Osal_MemCpy(data, rp.value, MIN(data_len, *data_len_out_p));
+
+  return 0;
+}
+
+tBleStatus aci_gatt_read_handle_value_offset_IDB05A1(uint16_t attr_handle, uint8_t offset, uint16_t data_len, uint16_t *data_len_out_p, uint8_t *data)
+{
+  struct hci_request rq;
+  gatt_read_handle_val_offset_cp cp;
+  gatt_read_handle_val_offset_rp rp;
+  
+  if(data_len > sizeof(rp.value))
+    return BLE_STATUS_INVALID_PARAMS;
+
+  cp.attr_handle = htobs(attr_handle);
+  cp.offset = offset;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GATT_READ_HANDLE_VALUE_OFFSET;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &rp;
+  rq.rlen = sizeof(rp);
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  if(rp.status)
+    return rp.status;
+
+  *data_len_out_p = rp.value_len;
+
+  Osal_MemCpy(data, rp.value, MIN(data_len, *data_len_out_p));
+
+  return 0; 
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_hal_aci.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,183 @@
+/******************** (C) COPYRIGHT 2013 STMicroelectronics ********************
+* File Name          : bluenrg_hci.c
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 4-Oct-2013
+* Description        : File with HCI commands for BlueNRG FW6.0 and above.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#include "ble_hal_types.h"
+#include "ble_osal.h"
+#include "ble_status.h"
+#include "ble_hal.h"
+#include "ble_osal.h"
+#include "ble_hci_const.h"
+#include "bluenrg_aci_const.h"
+#include "bluenrg_hal_aci.h"
+#include "bluenrg_gatt_server.h"
+#include "bluenrg_gap.h"
+
+#define MIN(a,b)            ((a) < (b) )? (a) : (b)
+#define MAX(a,b)            ((a) > (b) )? (a) : (b)
+
+
+tBleStatus aci_hal_write_config_data(uint8_t offset, 
+                                    uint8_t len,
+                                    const uint8_t *val)
+{
+  struct hci_request rq;
+  uint8_t status;
+  uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
+  uint8_t indx = 0;
+    
+  if ((len+2) > HCI_MAX_PAYLOAD_SIZE)
+    return BLE_STATUS_INVALID_PARAMS;
+
+  buffer[indx] = offset;
+  indx++;
+    
+  buffer[indx] = len;
+  indx++;
+        
+  Osal_MemCpy(buffer + indx, val, len);
+  indx +=  len;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_HAL_WRITE_CONFIG_DATA;
+  rq.cparam = (void *)buffer;
+  rq.clen = indx;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  if (status) {
+    return status;
+  }
+
+  return 0;
+}
+
+tBleStatus aci_hal_read_config_data(uint8_t offset, uint16_t data_len, uint8_t *data_len_out_p, uint8_t *data)
+{
+  struct hci_request rq;
+  hal_read_config_data_cp cp;
+  hal_read_config_data_rp rp;
+
+  cp.offset = offset;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_HAL_READ_CONFIG_DATA;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &rp;
+  rq.rlen = sizeof(rp);
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  if(rp.status)
+    return rp.status;
+
+  *data_len_out_p = rq.rlen-1;
+
+  Osal_MemCpy(data, rp.data, MIN(data_len, *data_len_out_p));
+
+  return 0;
+}
+
+tBleStatus aci_hal_set_tx_power_level(uint8_t en_high_power, uint8_t pa_level)
+{
+  struct hci_request rq;
+  hal_set_tx_power_level_cp cp;    
+  uint8_t status;
+    
+  cp.en_high_power = en_high_power;
+  cp.pa_level = pa_level;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_HAL_SET_TX_POWER_LEVEL;
+  rq.cparam = &cp;
+  rq.clen = HAL_SET_TX_POWER_LEVEL_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  if (status) {
+    return status;
+  }
+
+  return 0;
+}
+
+tBleStatus aci_hal_device_standby(void)
+{
+  struct hci_request rq;
+  uint8_t status;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_HAL_DEVICE_STANDBY;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_hal_tone_start(uint8_t rf_channel)
+{
+  struct hci_request rq;
+  hal_tone_start_cp cp;    
+  uint8_t status;
+    
+  cp.rf_channel = rf_channel;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_HAL_TONE_START;
+  rq.cparam = &cp;
+  rq.clen = HAL_TONE_START_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+    
+  return status;
+}
+
+tBleStatus aci_hal_tone_stop(void)
+{
+  struct hci_request rq;
+  uint8_t status;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_HAL_TONE_STOP;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_l2cap_aci.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,118 @@
+/******************** (C) COPYRIGHT 2013 STMicroelectronics ********************
+* File Name          : bluenrg_hci.c
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 4-Oct-2013
+* Description        : File with HCI commands for BlueNRG FW6.0 and above.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#include "ble_hal_types.h"
+#include "ble_osal.h"
+#include "ble_status.h"
+#include "ble_hal.h"
+#include "ble_osal.h"
+#include "ble_hci_const.h"
+#include "bluenrg_aci_const.h"
+#include "bluenrg_hal_aci.h"
+#include "bluenrg_gap.h"
+
+#define MIN(a,b)            ((a) < (b) )? (a) : (b)
+#define MAX(a,b)            ((a) > (b) )? (a) : (b)
+
+tBleStatus aci_l2cap_connection_parameter_update_request(uint16_t conn_handle, uint16_t interval_min,
+							 uint16_t interval_max, uint16_t slave_latency,
+							 uint16_t timeout_multiplier)
+{
+  struct hci_request rq;
+  uint8_t status;
+  l2cap_conn_param_update_req_cp cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.interval_min = htobs(interval_min);
+  cp.interval_max = htobs(interval_max);
+  cp.slave_latency = htobs(slave_latency);
+  cp.timeout_multiplier = htobs(timeout_multiplier);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_L2CAP_CONN_PARAM_UPDATE_REQ;
+  rq.cparam = &cp;
+  rq.clen = L2CAP_CONN_PARAM_UPDATE_REQ_CP_SIZE;
+  rq.event = EVT_CMD_STATUS;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+  
+  return status;  
+}
+
+tBleStatus aci_l2cap_connection_parameter_update_response_IDB05A1(uint16_t conn_handle, uint16_t interval_min,
+							 uint16_t interval_max, uint16_t slave_latency,
+							 uint16_t timeout_multiplier, uint16_t min_ce_length, uint16_t max_ce_length,
+                             uint8_t id, uint8_t accept)
+{
+  struct hci_request rq;
+  uint8_t status;
+  l2cap_conn_param_update_resp_cp_IDB05A1 cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.interval_min = htobs(interval_min);
+  cp.interval_max = htobs(interval_max);
+  cp.slave_latency = htobs(slave_latency);
+  cp.timeout_multiplier = htobs(timeout_multiplier);
+  cp.min_ce_length = htobs(min_ce_length);
+  cp.max_ce_length = htobs(max_ce_length);
+  cp.id = id;
+  cp.accept = accept;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_L2CAP_CONN_PARAM_UPDATE_RESP;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+tBleStatus aci_l2cap_connection_parameter_update_response_IDB04A1(uint16_t conn_handle, uint16_t interval_min,
+							 uint16_t interval_max, uint16_t slave_latency,
+							 uint16_t timeout_multiplier, uint8_t id, uint8_t accept)
+{
+  struct hci_request rq;
+  uint8_t status;
+  l2cap_conn_param_update_resp_cp_IDB04A1 cp;
+
+  cp.conn_handle = htobs(conn_handle);
+  cp.interval_min = htobs(interval_min);
+  cp.interval_max = htobs(interval_max);
+  cp.slave_latency = htobs(slave_latency);
+  cp.timeout_multiplier = htobs(timeout_multiplier);
+  cp.id = id;
+  cp.accept = accept;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_L2CAP_CONN_PARAM_UPDATE_RESP;
+  rq.cparam = &cp;
+  rq.clen = sizeof(cp);
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_updater_aci.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,270 @@
+/******************** (C) COPYRIGHT 2013 STMicroelectronics ********************
+* File Name          : bluenrg_hci.c
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 4-Oct-2013
+* Description        : File with HCI commands for BlueNRG FW6.0 and above.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#include "ble_hal_types.h"
+#include "ble_osal.h"
+#include "ble_status.h"
+#include "ble_hal.h"
+#include "ble_osal.h"
+#include "ble_hci_const.h"
+#include "bluenrg_aci_const.h"
+#include "bluenrg_updater_aci.h"
+
+#define MIN(a,b)            ((a) < (b) )? (a) : (b)
+#define MAX(a,b)            ((a) > (b) )? (a) : (b)
+
+tBleStatus aci_updater_start(void)
+{
+  struct hci_request rq;
+  uint8_t status = 0;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_UPDATER_START;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  hci_send_req(&rq, FALSE); // No command complete is sent.
+
+  return status;  
+}
+
+tBleStatus aci_updater_reboot(void)
+{
+  struct hci_request rq;
+  uint8_t status = 0;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_UPDATER_REBOOT;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  hci_send_req(&rq, FALSE); // No command complete is sent.
+
+  return status;
+}
+
+tBleStatus aci_get_updater_version(uint8_t *version)
+{
+  struct hci_request rq;
+  get_updater_version_rp resp;
+
+  Osal_MemSet(&resp, 0, sizeof(resp));
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GET_UPDATER_VERSION;
+  rq.rparam = &resp;
+  rq.rlen = GET_UPDATER_VERSION_RP_SIZE;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+    
+  *version = resp.version;
+
+  return resp.status;
+}
+
+tBleStatus aci_get_updater_buffer_size(uint8_t *buffer_size)
+{
+  struct hci_request rq;
+  get_updater_bufsize_rp resp;
+
+  Osal_MemSet(&resp, 0, sizeof(resp));
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_GET_UPDATER_BUFSIZE;
+  rq.rparam = &resp;
+  rq.rlen = GET_UPDATER_BUFSIZE_RP_SIZE;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+    
+  *buffer_size = resp.buffer_size;
+
+  return resp.status;
+}
+
+tBleStatus aci_erase_blue_flag(void)
+{
+  struct hci_request rq;
+  uint8_t status;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_UPDATER_ERASE_BLUE_FLAG;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;  
+}
+
+tBleStatus aci_reset_blue_flag(void)
+{
+  struct hci_request rq;
+  uint8_t status;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_UPDATER_RESET_BLUE_FLAG;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;  
+}
+
+tBleStatus aci_updater_erase_sector(uint32_t address)
+{
+  struct hci_request rq;
+  updater_erase_sector_cp cp;    
+  uint8_t status;
+    
+  cp.address = htobl(address);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_UPDATER_ERASE_SECTOR;
+  rq.cparam = &cp;
+  rq.clen = UPDATER_ERASE_SECTOR_CP_SIZE;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+
+  return status;
+}
+
+tBleStatus aci_updater_program_data_block(uint32_t address, 
+				   uint16_t len,
+				   const uint8_t *data)
+{
+  struct hci_request rq;
+  uint8_t status;
+  updater_prog_data_block_cp cp;
+    
+  if( len > sizeof(cp.data))
+    return BLE_STATUS_INVALID_PARAMS;
+  
+  cp.address = htobl(address);
+  cp.data_len = htobs(len);        
+  Osal_MemCpy(cp.data, data, len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_UPDATER_PROG_DATA_BLOCK;
+  rq.cparam = &cp;
+  rq.clen = UPDATER_PROG_DATA_BLOCK_CP_SIZE+len;
+  rq.rparam = &status;
+  rq.rlen = 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+    
+  return status;
+}
+
+tBleStatus aci_updater_read_data_block(uint32_t address,
+				uint16_t data_len,
+				uint8_t *data)
+{
+  struct hci_request rq;
+  updater_read_data_block_cp cp;
+  uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
+    
+  if((data_len+1) > HCI_MAX_PAYLOAD_SIZE)
+    return BLE_STATUS_INVALID_PARAMS;
+    
+  cp.address = htobl(address);
+  cp.data_len = htobs(data_len);
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_UPDATER_READ_DATA_BLOCK;
+  rq.cparam = &cp;
+  rq.clen = UPDATER_READ_DATA_BLOCK_CP_SIZE;
+  rq.rparam = buffer;
+  rq.rlen = data_len + 1;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+    
+  // First byte is status
+  Osal_MemCpy(data, buffer+1, data_len);
+
+  return buffer[0];
+}
+
+tBleStatus aci_updater_calc_crc(uint32_t address,
+                         uint8_t num_sectors,
+                         uint32_t *crc)
+{
+  struct hci_request rq;
+  updater_calc_crc_cp cp;
+  updater_calc_crc_rp resp;
+    
+  Osal_MemSet(&resp, 0, sizeof(resp));
+    
+  cp.address = htobl(address);
+  cp.num_sectors = num_sectors;
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_UPDATER_CALC_CRC;
+  rq.cparam = &cp;
+  rq.clen = UPDATER_CALC_CRC_CP_SIZE;
+  rq.rparam = &resp;
+  rq.rlen = UPDATER_CALC_CRC_RP_SIZE;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+    
+  *crc = btohl(resp.crc);
+    
+  return resp.status;
+}
+
+tBleStatus aci_updater_hw_version(uint8_t *version)
+{
+  struct hci_request rq;
+  updater_hw_version_rp resp;
+
+  Osal_MemSet(&resp, 0, sizeof(resp));
+
+  Osal_MemSet(&rq, 0, sizeof(rq));
+  rq.ogf = OGF_VENDOR_CMD;
+  rq.ocf = OCF_UPDATER_HW_VERSION;
+  rq.rparam = &resp;
+  rq.rlen = UPDATER_HW_VERSION_RP_SIZE;
+
+  if (hci_send_req(&rq, FALSE) < 0)
+    return BLE_STATUS_TIMEOUT;
+    
+  *version = resp.version;
+
+  return resp.status;
+}
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/bluenrg-hci/hci/controller/bluenrg_utils.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,430 @@
+
+#include "ble_hal.h"
+#include "ble_hal_types.h"
+#include "ble_status.h"
+#include "bluenrg_aci.h"
+#include "bluenrg_utils.h"
+#include "ble_hci.h"
+#include "ble_osal.h"
+#include "string.h"
+#include "stm32_bluenrg_ble.h"
+
+#define SUPPORTED_BOOTLOADER_VERSION_MIN  3
+#define SUPPORTED_BOOTLOADER_VERSION_MAX  5
+
+#define BASE_ADDRESS 0x10010000
+
+#define FW_OFFSET       (2*1024)  // 2 KB
+#define FW_OFFSET_MS    0
+#define FULL_STACK_SIZE (66*1024) // 66 KB
+#define BOOTLOADER_SIZE (2*1024)  // 2 kB
+#define SECTOR_SIZE     (2*1024)  // 2 KB
+#define DATA_SIZE       64        // 64 bytes
+
+// x**32 + x**26 + x**23 + x ** 22 + x**16 + x**12 + x**11 +
+// x**10 + x**8 + x**7 + x**5 + x**4 + x**2 + x**1 + x**0
+#define CRC_POLY        0x04C11DB7      // the poly without the x**32
+
+#define BOOTLOADER_CRC_NOT_PATCHED 0x878FB3FC
+
+#define IFR_SIZE 192
+#define IFR_BASE_ADDRESS 0x10020000
+#define IFR_CONFIG_DATA_OFFSET (SECTOR_SIZE-IFR_SIZE)  // Offset in IFR sector containing configuration data
+
+#if BLUENRG_MS
+#define IFR_WRITE_OFFSET_BEGIN IFR_CONFIG_DATA_OFFSET
+#else
+#define IFR_WRITE_OFFSET_BEGIN 0
+#endif
+
+
+#define BLUE_FLAG_OFFSET 0x8C0
+#define MAX_ERASE_RETRIES 2
+#define MAX_WRITE_RETRIES 2
+#define MIN_WRITE_BLOCK_SIZE 4
+
+#define RETRY_COMMAND(func, num_ret, error)  \
+{					\
+  uint8_t num_retries;                  \
+  num_retries = 0;			\
+  error = 0;				\
+  while (num_retries++ < num_ret)  {	\
+    if (func == BLE_STATUS_SUCCESS)	\
+      break;				\
+    if (num_retries == num_ret)		\
+      error = BLE_UTIL_ACI_ERROR;	\
+  }					\
+}
+
+typedef struct{
+  uint8_t cold_ana_act_config_table[64];
+}cold_table_TypeDef;
+
+/* This function calculates the CRC of a sector of flash, if bytes passed are less than sector size, 
+   they are extended with 0xFF until sector size is reached
+*/
+static uint32_t updater_calc_crc(const uint8_t* data, uint16_t nr_of_bytes)
+{
+    uint32_t i, j, a1;
+    uint32_t crc, value;
+
+    crc = 0;
+    for (i = 0; i < SECTOR_SIZE; i += 4) {
+      uint8_t *dataw = (uint8_t *) &value;
+     
+      dataw[0] = (i < nr_of_bytes) ? data[i] : 0xFF;
+      dataw[1] = ((i + 1) < nr_of_bytes) ? data[i+1] : 0xFF;
+      dataw[2] = ((i + 2) < nr_of_bytes) ? data[i+2] : 0xFF;
+      dataw[3] = ((i + 3) < nr_of_bytes) ? data[i+3] : 0xFF;
+
+      crc = crc ^ value;
+      for (j = 0; j < 32; j ++) {
+	a1 = (crc >> 31) & 0x1;
+	crc = (crc << 1) ^ (a1 * CRC_POLY);
+      }
+    }
+
+    return crc;
+}
+
+int program_device(const uint8_t *fw_image, uint32_t fw_size)
+{
+  uint8_t version, num_erase_retries=0, status, data_size;
+  uint8_t number_sectors, module;
+  uint32_t address, j;
+  uint32_t crc, crc2, crc_size;
+  uint32_t fw_offset = FW_OFFSET;
+  
+  BlueNRG_HW_Bootloader();
+  HCI_Process(); // To receive the EVT_INITIALIZED
+
+  if(aci_get_updater_version(&version))
+    return BLE_UTIL_ACI_ERROR;
+  
+  if(version < SUPPORTED_BOOTLOADER_VERSION_MIN || version > SUPPORTED_BOOTLOADER_VERSION_MAX)
+    return BLE_UTIL_UNSUPPORTED_VERSION;
+  
+  if(aci_updater_hw_version(&version))
+    return BLE_UTIL_ACI_ERROR;
+  
+  if(version==0x31){
+    // It does not contain bootloader inside first sector. It may contain code.
+    fw_offset = FW_OFFSET_MS;
+  }
+  
+  if (fw_size != FULL_STACK_SIZE)
+    return BLE_UTIL_WRONG_IMAGE_SIZE;
+
+  if (fw_size % MIN_WRITE_BLOCK_SIZE)
+    return BLE_UTIL_WRONG_IMAGE_SIZE;
+
+  /* Calculate the number of sectors necessary to contain the fw image.*/
+  number_sectors = ((fw_size + SECTOR_SIZE - 1) / SECTOR_SIZE);
+
+  /***********************************************************************
+  * Erase BLUE flag
+  ************************************************************************/
+  RETRY_COMMAND(aci_erase_blue_flag(), MAX_WRITE_RETRIES, status);
+  if (status != BLE_STATUS_SUCCESS)
+    return status;
+
+  /***********************************************************************
+  * Erase and Program sectors
+  ************************************************************************/  
+  for(unsigned int i = fw_offset; i < (number_sectors * SECTOR_SIZE); i += SECTOR_SIZE) {
+    num_erase_retries = 0;
+    while (num_erase_retries++ < MAX_ERASE_RETRIES) {
+      aci_updater_erase_sector(BASE_ADDRESS + i);
+      if ((i/SECTOR_SIZE) < (unsigned int)(number_sectors-1))
+	data_size = DATA_SIZE;
+      else
+	data_size = MIN_WRITE_BLOCK_SIZE;	
+      for (j=i; ((j<SECTOR_SIZE+i)&&(j<fw_size)); j += data_size) {
+	RETRY_COMMAND(aci_updater_program_data_block(BASE_ADDRESS+j, data_size, fw_image+j), MAX_WRITE_RETRIES, status);
+	if (status != BLE_STATUS_SUCCESS)
+	  break;
+      }
+      if (status == BLE_STATUS_SUCCESS)
+	break;
+    }
+    if (num_erase_retries == MAX_ERASE_RETRIES)
+      return BLE_UTIL_ACI_ERROR;
+  }
+  
+  /***********************************************************************
+  * Verify firmware
+  ************************************************************************/
+  module = fw_size % SECTOR_SIZE;
+  crc_size = SECTOR_SIZE;
+  for(int i = fw_offset; i < (number_sectors*SECTOR_SIZE); i += SECTOR_SIZE){
+    address = BASE_ADDRESS + i;
+    if(aci_updater_calc_crc(address, 1, &crc))
+      return BLE_UTIL_ACI_ERROR;
+    
+    if ((module != 0)  && ((i/SECTOR_SIZE) == (number_sectors-1)))
+	crc_size = module;
+
+    crc2 = updater_calc_crc(fw_image+i,crc_size);
+    if(crc!=crc2)
+      return BLE_UTIL_CRC_ERROR;
+  }
+
+  /***********************************************************************
+  * Write BLUE flag
+  ************************************************************************/
+  RETRY_COMMAND(aci_reset_blue_flag(), MAX_WRITE_RETRIES, status);
+  if (status != BLE_STATUS_SUCCESS)
+    return status;
+  
+  BlueNRG_RST();
+  HCI_Process(); // To receive the EVT_INITIALIZED
+  
+  return BLE_STATUS_SUCCESS;
+}
+
+int read_IFR(uint8_t *data)
+{
+  uint8_t version, offset;
+  tBleStatus ret;
+  
+  offset = 0;
+  aci_updater_start();
+  if(aci_get_updater_version(&version))
+    return BLE_UTIL_ACI_ERROR;
+  
+  if(version < SUPPORTED_BOOTLOADER_VERSION_MIN || version > SUPPORTED_BOOTLOADER_VERSION_MAX)
+    return BLE_UTIL_UNSUPPORTED_VERSION;
+  
+  /***********************************************************************
+  * Reading last 3 IFR 64-byte blocks
+  ************************************************************************/
+  for(int i = (FULL_STACK_SIZE - IFR_SIZE); i < FULL_STACK_SIZE; i += DATA_SIZE){
+    ret = aci_updater_read_data_block(BASE_ADDRESS+i, DATA_SIZE, (data+offset));
+    offset += DATA_SIZE;
+    if(ret) return BLE_UTIL_ACI_ERROR;
+  }
+  
+  BlueNRG_RST();
+  HCI_Process(); // To receive the EVT_INITIALIZED
+
+  return BLE_STATUS_SUCCESS;
+  
+}
+
+void parse_IFR_data_config(const uint8_t data[64], IFR_config2_TypeDef *IFR_config)
+{
+  IFR_config->stack_mode = data[0];
+  IFR_config->slave_sca_ppm = LE_TO_HOST_16(data+28);
+  IFR_config->master_sca = data[30];
+  IFR_config->hs_startup_time = LE_TO_HOST_16(data+32);
+  IFR_config->year = BCD_TO_INT(data[41]);
+  IFR_config->month = BCD_TO_INT(data[42]);
+  IFR_config->day = BCD_TO_INT(data[43]);    
+}
+
+int IFR_validate(IFR_config2_TypeDef *IFR_config)
+{
+#if BLUENRG_MS
+  if(IFR_config->stack_mode < 1 || IFR_config->stack_mode > 4)
+#else
+    if(IFR_config->stack_mode < 1 || IFR_config->stack_mode > 3)
+#endif
+      return BLE_UTIL_PARSE_ERROR; // Unknown Stack Mode
+  if(IFR_config->master_sca > 7)
+    return BLE_UTIL_PARSE_ERROR; // Invalid Master SCA
+  if(IFR_config->month > 12 || IFR_config->month < 1)
+    return BLE_UTIL_PARSE_ERROR; // Invalid date
+  if(IFR_config->day > 31 || IFR_config->day < 1)
+    return BLE_UTIL_PARSE_ERROR; // Invalid date
+  if(IFR_config->month > 12 || IFR_config->month < 1)
+    return BLE_UTIL_PARSE_ERROR; // Invalid date
+  
+  return BLE_STATUS_SUCCESS;
+}
+
+/* TODO: Function to generate data from given options. */
+
+void change_IFR_data_config(IFR_config2_TypeDef *IFR_config, uint8_t data[64])
+{
+  data[0] = IFR_config->stack_mode;
+  HOST_TO_LE_16(data+28, IFR_config->slave_sca_ppm);
+  data[30] = IFR_config->master_sca;
+  HOST_TO_LE_16(data+32, IFR_config->hs_startup_time);  
+  data[41] = INT_TO_BCD(IFR_config->year);
+  data[42] = INT_TO_BCD(IFR_config->month);
+  data[43] = INT_TO_BCD(IFR_config->day);
+}
+
+
+int program_IFR(const IFR_config_TypeDef *ifr_image)
+{
+  uint8_t version, num_erase_retries;
+  tBleStatus ret;
+#if BLUENRG_MS
+  const uint8_t *ifr_data = (uint8_t *)ifr_image;
+#else
+  uint8_t ifr_data[SECTOR_SIZE];
+#endif
+  uint8_t hwVersion;
+  uint16_t fwVersion;
+    
+  if(getBlueNRGVersion(&hwVersion, &fwVersion))
+    return BLE_UTIL_ACI_ERROR;
+  
+  BlueNRG_HW_Bootloader();
+  HCI_Process(); // To receive the EVT_INITIALIZED
+  
+  if(aci_get_updater_version(&version))
+    return BLE_UTIL_ACI_ERROR;
+  
+  if(version < SUPPORTED_BOOTLOADER_VERSION_MIN || version > SUPPORTED_BOOTLOADER_VERSION_MAX)
+    return BLE_UTIL_UNSUPPORTED_VERSION;
+  
+#ifndef BLUENRG_MS
+    /***********************************************************************
+   * READ IFR data
+   ************************************************************************/  
+  for(int i = 0; i < SECTOR_SIZE; i += DATA_SIZE){
+    ret = aci_updater_read_data_block(IFR_BASE_ADDRESS+i, DATA_SIZE, ifr_data+i);
+    if(ret != BLE_STATUS_SUCCESS){
+      return ret;
+    }
+  }
+#endif
+  
+  /***********************************************************************
+  * Erase & Flashing IFR sectors
+  ************************************************************************/
+#ifndef BLUENRG_MS  
+  Osal_MemCpy(&ifr_data[SECTOR_SIZE-IFR_SIZE], ifr_image, IFR_SIZE);
+#endif
+  num_erase_retries = 0;
+  while (num_erase_retries++ < MAX_ERASE_RETRIES) {
+    aci_updater_erase_sector(IFR_BASE_ADDRESS);
+    for(int i = IFR_WRITE_OFFSET_BEGIN, j = 0; i < SECTOR_SIZE; i += DATA_SIZE, j += DATA_SIZE) {
+      RETRY_COMMAND(aci_updater_program_data_block(IFR_BASE_ADDRESS+i, DATA_SIZE, ifr_data+j), MAX_WRITE_RETRIES, ret);
+      if (ret != BLE_STATUS_SUCCESS)
+	break;
+    }
+    if (ret == BLE_STATUS_SUCCESS)
+      break;
+  }
+  if (num_erase_retries == MAX_ERASE_RETRIES)
+    return BLE_UTIL_ACI_ERROR;
+
+  /***********************************************************************
+  * Verify IFR
+  ************************************************************************/  
+  {
+    uint8_t ifr_updated[DATA_SIZE];
+    for(int i = IFR_WRITE_OFFSET_BEGIN, j = 0; i < SECTOR_SIZE; i += DATA_SIZE, j += DATA_SIZE){
+      ret = aci_updater_read_data_block(IFR_BASE_ADDRESS+i, DATA_SIZE, ifr_updated);
+      if(ret != BLE_STATUS_SUCCESS){
+	return ret;
+      }
+      if (memcmp(ifr_updated, ifr_data+j, DATA_SIZE) != 0)
+	return BLE_UTIL_WRONG_VERIFY;
+    }
+  }
+
+  BlueNRG_RST();
+  HCI_Process(); // To receive the EVT_INITIALIZED
+    
+  return BLE_STATUS_SUCCESS;
+}
+
+uint8_t verify_IFR(const IFR_config_TypeDef *ifr_data)
+{
+  uint8_t ifr_updated[DATA_SIZE];
+  uint8_t version, ret = BLE_STATUS_SUCCESS;
+    
+  aci_updater_start();
+  if(aci_get_updater_version(&version))
+    return BLE_UTIL_ACI_ERROR;
+  for(int i = 0; i < IFR_SIZE; i += DATA_SIZE){
+    ret = aci_updater_read_data_block((IFR_BASE_ADDRESS+SECTOR_SIZE-IFR_SIZE)+i, DATA_SIZE, ifr_updated);
+    if(ret != BLE_STATUS_SUCCESS){
+      return ret;
+    }
+    if (memcmp(ifr_updated, ((uint8_t*)ifr_data)+i, DATA_SIZE) != 0)
+    {
+      ret = BLE_UTIL_WRONG_VERIFY;
+      break;
+    }
+  }
+
+  BlueNRG_RST();
+  HCI_Process(); // To receive the EVT_INITIALIZED
+  
+  return ret;
+}
+
+uint8_t getBlueNRGVersion(uint8_t *hwVersion, uint16_t *fwVersion)
+{
+  uint8_t status;
+  uint8_t hci_version, lmp_pal_version;
+  uint16_t hci_revision, manufacturer_name, lmp_pal_subversion;
+
+  status = hci_le_read_local_version(&hci_version, &hci_revision, &lmp_pal_version, 
+				     &manufacturer_name, &lmp_pal_subversion);
+
+  if (status == BLE_STATUS_SUCCESS) {
+    *hwVersion = hci_revision >> 8;
+    *fwVersion = (hci_revision & 0xFF) << 8;              // Major Version Number
+    *fwVersion |= ((lmp_pal_subversion >> 4) & 0xF) << 4; // Minor Version Number
+    *fwVersion |= lmp_pal_subversion & 0xF;               // Patch Version Number
+  }
+  
+  return status;
+}
+
+uint8_t getBlueNRGUpdaterVersion(uint8_t *version)
+{
+
+  BlueNRG_HW_Bootloader();
+  HCI_Process(); // To receive the EVT_INITIALIZED
+
+  if(aci_get_updater_version(version))
+    return BLE_UTIL_ACI_ERROR;
+  
+  if(*version < SUPPORTED_BOOTLOADER_VERSION_MIN || *version > SUPPORTED_BOOTLOADER_VERSION_MAX)
+    return BLE_UTIL_UNSUPPORTED_VERSION;
+
+  BlueNRG_RST();
+  HCI_Process(); // To receive the EVT_INITIALIZED
+
+  return BLE_STATUS_SUCCESS;
+}
+
+uint8_t getBlueNRGUpdaterHWVersion(uint8_t *version)
+{
+
+  BlueNRG_HW_Bootloader();
+  HCI_Process(); // To receive the EVT_INITIALIZED
+
+  if(aci_updater_hw_version(version))
+    return BLE_UTIL_ACI_ERROR;
+  
+  BlueNRG_RST();
+  HCI_Process(); // To receive the EVT_INITIALIZED
+
+  return BLE_STATUS_SUCCESS;
+}
+
+uint8_t isHWBootloader_Patched(void)
+{
+  uint8_t status, version;
+  uint32_t crc, address = 0x10010000;
+
+  if(aci_get_updater_version(&version))
+    return BLE_UTIL_ACI_ERROR;
+
+  RETRY_COMMAND(aci_updater_calc_crc(address, 1, &crc), 2, status);
+  if (status != BLE_STATUS_SUCCESS)
+    return 0;
+
+  if (crc == BOOTLOADER_CRC_NOT_PATCHED)
+    return 0;
+
+  return 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/bluenrg-hci/utils/ble_gp_timer.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2004, Swedish Institute of Computer Science.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ * 3. Neither the name of the Institute nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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.
+ *
+ * This file is part of the Contiki operating system.
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ */
+
+#include "ble_clock.h"
+#include "ble_gp_timer.h"
+
+/*---------------------------------------------------------------------------*/
+/**
+ * Set a timer.
+ *
+ * This function sets a timer for a time sometime in the
+ * future. The function timer_expired() will evaluate to true after
+ * the timer has expired.
+ *
+ * @param[in] t         A pointer to the timer
+ * @param[in] interval  The interval before the timer expires.
+ *
+ */
+void
+Timer_Set(struct timer *t, tClockTime interval)
+{
+  t->interval = interval;
+  t->start = Clock_Time();
+}
+/*---------------------------------------------------------------------------*/
+/**
+ * Reset the timer with the same interval.
+ *
+ * This function resets the timer with the same interval that was
+ * given to the timer_set() function. The start point of the interval
+ * is the exact time that the timer last expired. Therefore, this
+ * function will cause the timer to be stable over time, unlike the
+ * timer_restart() function.
+ *
+ * \param t A pointer to the timer.
+ *
+ * \sa timer_restart()
+ */
+void
+Timer_Reset(struct timer *t)
+{
+  t->start += t->interval;
+}
+/*---------------------------------------------------------------------------*/
+/**
+ * Restart the timer from the current point in time
+ *
+ * This function restarts a timer with the same interval that was
+ * given to the timer_set() function. The timer will start at the
+ * current time.
+ *
+ * \note A periodic timer will drift if this function is used to reset
+ * it. For preioric timers, use the timer_reset() function instead.
+ *
+ * \param t A pointer to the timer.
+ *
+ * \sa timer_reset()
+ */
+void
+Timer_Restart(struct timer *t)
+{
+  t->start = Clock_Time();
+}
+/*---------------------------------------------------------------------------*/
+/**
+ * Check if a timer has expired.
+ *
+ * This function tests if a timer has expired and returns true or
+ * false depending on its status.
+ *
+ * \param t A pointer to the timer
+ *
+ * \return Non-zero if the timer has expired, zero otherwise.
+ *
+ */
+int
+Timer_Expired(struct timer *t)
+{
+  /* Note: Can not return diff >= t->interval so we add 1 to diff and return
+     t->interval < diff - required to avoid an internal error in mspgcc. */
+  tClockTime diff = (Clock_Time() - t->start) + 1;
+  return t->interval < diff;
+
+}
+/*---------------------------------------------------------------------------*/
+/**
+ * The time until the timer expires
+ *
+ * This function returns the time until the timer expires.
+ *
+ * \param t A pointer to the timer
+ *
+ * \return The time until the timer expires
+ *
+ */
+tClockTime
+Timer_Remaining(struct timer *t)
+{
+  return t->start + t->interval - Clock_Time();
+}
+/*---------------------------------------------------------------------------*/
+#ifdef __DMA_LP__
+
+tBleStatus Blue_NRG_HCI_Timer_Start(uint32_t expiryTime,
+                                    TIMER_HCI_TIMEOUT_NOTIFY_CALLBACK_TYPE timercb,
+                                    uint8_t *timerID)
+{
+  TIMER_Create(eTimerModuleID_BlueNRG_HCI, timerID, eTimerMode_SingleShot,
+               (pf_TIMER_TimerCallBack_t) timercb);
+  TIMER_Start(*timerID, expiryTime*1000/TIMERSERVER_TICK_VALUE);
+  
+  return (BLE_STATUS_SUCCESS);
+}
+
+/*---------------------------------------------------------------------------*/
+tBleStatus Blue_NRG_HCI_Timer_Stop(uint8_t timerID)
+{
+  TIMER_Delete(timerID);
+  
+  return (BLE_STATUS_SUCCESS);
+}
+
+#endif /* __DMA_LP__ */
+/*---------------------------------------------------------------------------*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/bluenrg-hci/utils/ble_list.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,119 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : ble_list.c
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : Circular Linked List Implementation.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/******************************************************************************
+ * Include Files
+******************************************************************************/
+#include <ble_hal_types.h>
+#include "ble_list.h"
+
+/******************************************************************************
+ * Function Definitions 
+******************************************************************************/
+void list_init_head (tListNode * listHead)
+{
+	listHead->next = listHead;
+	listHead->prev = listHead;	
+}
+
+uint8_t list_is_empty (tListNode * listHead)
+{
+	return ((listHead->next == listHead)? TRUE:FALSE);
+}
+
+void list_insert_head (tListNode * listHead, tListNode * node)
+{
+	node->next = listHead->next;
+	node->prev = listHead;
+	listHead->next = node;
+	(node->next)->prev = node;
+}
+
+
+void list_insert_tail (tListNode * listHead, tListNode * node)
+{
+	node->next = listHead;
+	node->prev = listHead->prev;
+	listHead->prev = node;
+	(node->prev)->next = node;
+}
+
+
+void list_remove_node (tListNode * node)
+{
+	(node->prev)->next = node->next;
+	(node->next)->prev = node->prev;
+}
+
+
+void list_remove_head (tListNode * listHead, tListNode ** node )
+{
+	*node = listHead->next;
+	list_remove_node (listHead->next);
+	(*node)->next = NULL;
+	(*node)->prev = NULL;
+}
+
+
+void list_remove_tail (tListNode * listHead, tListNode ** node )
+{
+	*node = listHead->prev;
+	list_remove_node (listHead->prev);
+	(*node)->next = NULL;
+	(*node)->prev = NULL;
+}
+
+
+void list_insert_node_after (tListNode * node, tListNode * ref_node)
+{
+	node->next = ref_node->next;
+	node->prev = ref_node;
+	ref_node->next = node;
+	(node->next)->prev = node;
+}
+
+
+void list_insert_node_before (tListNode * node, tListNode * ref_node)
+{
+	node->next = ref_node;
+	node->prev = ref_node->prev;
+	ref_node->prev = node;
+	(node->prev)->next = node;
+}
+
+
+int list_get_size (tListNode * listHead)
+{
+	int size = 0;
+	tListNode * temp = listHead->next;
+	while (temp != listHead)
+	{
+		size++;
+		temp = temp->next;		
+	}
+	return (size);
+}
+
+void list_get_next_node (tListNode * ref_node, tListNode ** node)
+{
+    *node = ref_node->next;
+}
+
+
+void list_get_prev_node (tListNode * ref_node, tListNode ** node)
+{
+    *node = ref_node->prev;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/bluenrg-hci/utils/ble_osal.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,72 @@
+/**
+******************************************************************************
+* @file    ble_osal.c 
+* @author  AMS - HEA&RF BU / CL
+* @version V1.0.0
+* @date    04-July-2014
+* @brief   Implementation of OS abstraction layer functions used by the
+*          library.
+******************************************************************************
+* @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. 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.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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.
+  *
+  ******************************************************************************
+  */
+  
+/* Includes ------------------------------------------------------------------*/
+#include <string.h>
+#include <ble_osal.h>
+ 
+ /**
+ * @brief  Osal_MemCpy
+ * @param  dest: Pointer to the destination buffer
+ * @param  src : Pointer to the source buffer
+ * @param  size: Number of bytes to copy from the source to the destination
+ *               buffer
+ * @retval Pointer to the destination buffer
+ */
+void* Osal_MemCpy(void *dest, const void *src, unsigned int size)
+{
+    return(memcpy(dest,src,size)); 
+}
+
+/**
+ * @brief  Osal_MemSet
+ * @param  ptr  : Pointer to block of memory to fill  
+ * @param  value: Value to assign to each byte of the memory block
+ * @param  size : Number of bytes to be set to "value"
+ * @retval Pointer to the filled block of memory
+ */
+void* Osal_MemSet(void *ptr, int value, unsigned int size)
+{
+    return(memset(ptr,value,size));
+}
+
+/******************************************************************************
+ * local Functions
+ *****************************************************************************/ 
+ 
+ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/platform/ble_clock.c	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+
+#include "ble_clock.h"
+#ifdef YOTTA_CFG_MBED_OS
+	#include "mbed-drivers/wait_api.h"
+	#include "mbed-drivers/rtc_time.h"
+#else
+    #include "wait_api.h"
+	#include "rtc_time.h"
+#endif
+
+const uint32_t CLOCK_SECOND = 1000;
+
+/*---------------------------------------------------------------------------*/
+
+void Clock_Init(void)
+{
+  //Not Used
+}
+
+/*---------------------------------------------------------------------------*/
+
+tClockTime Clock_Time(void)
+{
+	return clock();
+}
+
+/*---------------------------------------------------------------------------*/
+/**
+ * Wait for a multiple of 1 ms.
+ *
+ */
+void Clock_Wait(uint32_t i)
+{
+	wait_ms(i);
+}
+/*---------------------------------------------------------------------------*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/platform/btle.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,707 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+/**
+  ******************************************************************************
+  * @file    btle.cpp
+  * @author  STMicroelectronics
+  * @brief   Implementation BlueNRG Init and helper functions.
+  ******************************************************************************
+  * @copy
+  *
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+  *
+  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
+  */
+
+
+#include "btle.h"
+#include "ble/Gap.h"
+#include "ble/GapEvents.h"
+#include "BlueNRGGap.h"
+#include "BlueNRGGattServer.h"
+#include "BlueNRGGattClient.h"
+#include "ble_utils.h"
+
+#include "x_nucleo_idb0xa1_targets.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* C File Includes ------------------------------------------------------------------*/
+#include <stdio.h>
+#include <string.h>
+#include "ble_hci.h"
+#include "ble_hci_const.h"
+#include "bluenrg_aci.h"
+#include "bluenrg_hal_aci.h"
+#include "bluenrg_gap.h"
+#include "bluenrg_utils.h"
+
+#include "ble_hal_types.h"
+#include "ble_hal.h"
+#include "ble_gp_timer.h"
+#include "ble_osal.h"
+#include "ble_sm.h"
+#include "ble_debug.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+#define IDB04A1 0
+#define IDB05A1 1
+
+/* See file 'x_nucleo_idb0xa1_targets.h' for details regarding the IDB0XA1 STACK_MODE */
+#define STACK_MODE IDB0XA1_STACK_MODE
+
+void HCI_Input(tHciDataPacket * hciReadPacket);
+
+uint16_t g_gap_service_handle = 0;
+uint16_t g_appearance_char_handle = 0;
+uint16_t g_device_name_char_handle = 0;
+uint16_t g_preferred_connection_parameters_char_handle = 0;
+
+/* Private variables ---------------------------------------------------------*/
+volatile uint8_t set_connectable = 1;
+
+static char versionString[32];
+uint8_t bnrg_expansion_board = IDB04A1; /* at startup, suppose the X-NUCLEO-IDB04A1 is used */
+
+/**************************************************************************/
+/*!
+    @brief  Init the BTLE stack with the specified role
+    @returns void
+*/
+/**************************************************************************/
+void btleInit(void)
+{
+    PRINTF("btleInit>>\n\r");
+
+    int ret;
+    uint8_t  hwVersion;
+    uint16_t fwVersion;
+    uint16_t service_handle, dev_name_char_handle, appearance_char_handle;
+
+    /* Reset BlueNRG SPI interface */
+    BlueNRG_RST();
+
+    /* get the BlueNRG HW and FW versions */
+    getBlueNRGVersion(&hwVersion, &fwVersion);
+
+    /*
+     * Reset BlueNRG again otherwise we won't
+     * be able to change its MAC address.
+     * aci_hal_write_config_data() must be the first
+     * command after reset otherwise it will fail.
+     */
+    BlueNRG_RST();
+
+    if (hwVersion > 0x30) { /* X-NUCLEO-IDB05A1 expansion board is used */
+        bnrg_expansion_board = IDB05A1;
+    }
+
+    /* set BLE version string */
+    setVersionString(hwVersion, fwVersion);
+
+    if (bnrg_expansion_board == IDB05A1) {
+        uint8_t stackMode = STACK_MODE;
+        ret = aci_hal_write_config_data(CONFIG_DATA_ROLE,
+                                        CONFIG_DATA_ROLE_LEN,
+                                        &stackMode);
+    }
+
+    ret = aci_gatt_init();
+    if(ret != BLE_STATUS_SUCCESS){
+        PRINTF("GATT_Init failed.\n");
+    }
+    if (bnrg_expansion_board == IDB05A1) {
+        ret = aci_gap_init_IDB05A1(GAP_PERIPHERAL_ROLE_IDB05A1|GAP_CENTRAL_ROLE_IDB05A1|GAP_OBSERVER_ROLE_IDB05A1,
+                                   0,
+                                   0x18,
+                                   &service_handle,
+                                   &dev_name_char_handle,
+                                   &appearance_char_handle);
+    } else {
+        // IDB04A1 is configured as peripheral by default
+        ret = aci_gap_init_IDB04A1(GAP_PERIPHERAL_ROLE_IDB04A1, &service_handle, &dev_name_char_handle, &appearance_char_handle);
+    }
+
+    // read the default static address and inject it into the GAP object
+    {
+        Gap::Address_t BLE_address_BE = { 0 };
+        uint8_t data_len_out;
+        aci_hal_read_config_data(CONFIG_DATA_RANDOM_ADDRESS_IDB05A1, BDADDR_SIZE, &data_len_out, BLE_address_BE);
+        // FIXME error handling of this function
+        BlueNRGGap::getInstance().setAddress(BLEProtocol::AddressType::RANDOM_STATIC, BLE_address_BE);
+    }
+
+    if(ret != BLE_STATUS_SUCCESS){
+        PRINTF("GAP_Init failed.\n");
+    }
+
+    //FIXME: Security and passkey set by default
+    ret = aci_gap_set_auth_requirement(MITM_PROTECTION_REQUIRED,
+                                       OOB_AUTH_DATA_ABSENT,
+                                       NULL,
+                                       7,
+                                       16,
+                                       USE_FIXED_PIN_FOR_PAIRING,
+                                       123456,
+                                       BONDING);
+    if (ret != BLE_STATUS_SUCCESS) {
+        PRINTF("Auth Req set failed.\n");
+    }
+
+    aci_hal_set_tx_power_level(1,4);
+
+    g_gap_service_handle = service_handle;
+    g_appearance_char_handle = appearance_char_handle;
+    g_device_name_char_handle = dev_name_char_handle;
+    //Device Name is set from Accumulate Adv Data Payload or through setDeviceName API
+    /*ret = aci_gatt_update_char_value(service_handle, dev_name_char_handle, 0,
+                            strlen(name), (tHalUint8 *)name);*/
+
+    signalEventsToProcess();
+    // update the peripheral preferred conenction parameters handle
+    // This value is hardcoded at the moment.
+    g_preferred_connection_parameters_char_handle = 10;
+
+    return;
+}
+
+/**************************************************************************/
+/*!
+    @brief  mbedOS
+
+    @param[in]  void
+
+    @returns
+*/
+/**************************************************************************/
+int btle_handler_pending = 0;
+
+void btle_handler(void)
+{
+    btle_handler_pending = 0;
+	BlueNRGGap::getInstance().Process();    
+    HCI_Process();
+}
+
+/* set BLE Version string */
+void setVersionString(uint8_t hwVersion, uint16_t fwVersion)
+{
+    if(bnrg_expansion_board == IDB04A1 || bnrg_expansion_board == IDB05A1) {
+        snprintf(versionString, sizeof(versionString), "ST BLE4.1 HW v%u.%u FW v%u.%u",
+                                                        hwVersion>>4, (hwVersion&0x0F),
+                                                        fwVersion>>8, (fwVersion&0x00F0)>>4);
+    } else {
+        snprintf(versionString, sizeof(versionString), "ST (unknown spec)");
+    }
+}
+
+/* get BLE Version string */
+const char* getVersionString(void)
+{
+    return versionString;
+}
+
+tBleStatus btleStartRadioScan(uint8_t scan_type,
+                              uint16_t scan_interval,
+                              uint16_t scan_window,
+                              uint8_t own_address_type)
+{
+  tBleStatus ret;
+
+  // Observer role is not supported by X-NUCLEO-IDB04A1, return BLE_ERROR_NOT_IMPLEMENTED
+  if(bnrg_expansion_board == IDB05A1) {
+      PRINTF("scan_interval=%d scan_window=%d\n\r", scan_interval, scan_window);
+      PRINTF("scan_type=%d own_address_type=%d\n\r", scan_type, own_address_type);
+      ret = aci_gap_start_observation_procedure(scan_interval,
+                                                scan_window,
+                                                scan_type,
+                                                own_address_type,
+                                                0); // 1 to filter duplicates
+  } else {
+      ret = BLE_STATUS_INVALID_CID;
+  }
+
+  return ret;
+
+}
+
+/*!
+    @brief  Not Used
+
+    @param[in]  void
+
+    @returns
+*/
+void SPI_Poll(void)
+{
+    //HAL_GPIO_EXTI_Callback_Poll(BNRG_SPI_EXTI_PIN);
+    return;
+}
+
+void Attribute_Modified_CB(evt_blue_aci *blue_evt)
+{
+    uint16_t conn_handle;
+    uint16_t attr_handle;
+    uint8_t data_length;
+    uint8_t *att_data;
+    uint8_t offset;
+
+    if (bnrg_expansion_board == IDB05A1) {
+        evt_gatt_attr_modified_IDB05A1 *evt = (evt_gatt_attr_modified_IDB05A1*)blue_evt->data;
+        conn_handle = evt->conn_handle;
+        attr_handle = evt->attr_handle;
+        data_length = evt->data_length;
+        att_data = evt->att_data;
+        offset = evt->offset;
+    } else {
+        evt_gatt_attr_modified_IDB04A1 *evt = (evt_gatt_attr_modified_IDB04A1*)blue_evt->data;
+        conn_handle = evt->conn_handle;
+        attr_handle = evt->attr_handle;
+        data_length = evt->data_length;
+        att_data = evt->att_data;
+        offset = 0;
+    }
+
+    //Extract the GattCharacteristic from p_characteristics[] and find the properties mask
+    GattCharacteristic *p_char = BlueNRGGattServer::getInstance().getCharacteristicFromHandle(attr_handle);
+    if(p_char!=NULL) {
+        GattAttribute::Handle_t charHandle = p_char->getValueAttribute().getHandle()-BlueNRGGattServer::CHAR_VALUE_HANDLE;
+        BlueNRGGattServer::HandleEnum_t currentHandle = BlueNRGGattServer::CHAR_HANDLE;
+        PRINTF("CharHandle %d, length: %d, Data: %d\n\r", charHandle, data_length, (uint16_t)att_data[0]);
+        PRINTF("getProperties 0x%x\n\r",p_char->getProperties());
+
+        if(attr_handle == charHandle+BlueNRGGattServer::CHAR_VALUE_HANDLE) {
+            currentHandle = BlueNRGGattServer::CHAR_VALUE_HANDLE;
+        }
+
+        if(attr_handle == charHandle+BlueNRGGattServer::CHAR_DESC_HANDLE) {
+            currentHandle = BlueNRGGattServer::CHAR_DESC_HANDLE;
+        }
+        PRINTF("currentHandle %d\n\r", currentHandle);
+        if((p_char->getProperties() &
+            (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE)) &&
+            currentHandle == BlueNRGGattServer::CHAR_DESC_HANDLE) {
+
+            GattAttribute::Handle_t charDescHandle = p_char->getValueAttribute().getHandle()+1;
+
+            PRINTF("*****NOTIFICATION CASE\n\r");
+            //Now Check if data written in Enable or Disable
+            if((uint16_t)att_data[0]==1) {
+                //PRINTF("Notify ENABLED\n\r");
+                BlueNRGGattServer::getInstance().HCIEvent(GattServerEvents::GATT_EVENT_UPDATES_ENABLED, charDescHandle);
+            } else {
+                //PRINTF("Notify DISABLED\n\r");
+                BlueNRGGattServer::getInstance().HCIEvent(GattServerEvents::GATT_EVENT_UPDATES_DISABLED, charDescHandle);
+            }
+            return;
+        }
+
+        //Check if attr handle property is WRITEABLE, in the case generate GATT_EVENT_DATA_WRITTEN Event
+        if((p_char->getProperties() &
+            (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE)) &&
+            currentHandle == BlueNRGGattServer::CHAR_VALUE_HANDLE) {
+
+            PRINTF("*****WRITE CASE\n\r");
+
+            GattWriteCallbackParams writeParams;
+            writeParams.connHandle = conn_handle;
+            writeParams.handle = p_char->getValueAttribute().getHandle();
+            writeParams.writeOp = GattWriteCallbackParams::OP_WRITE_REQ;//Where to find this property in BLUENRG?
+            writeParams.len = data_length;
+            writeParams.data = att_data;
+            writeParams.offset = offset;
+
+            //BlueNRGGattServer::getInstance().handleEvent(GattServerEvents::GATT_EVENT_DATA_WRITTEN, attr_handle);
+            //Write the actual Data to the Attr Handle? (uint8_1[])att_data contains the data
+            if ((p_char->getValueAttribute().getValuePtr() != NULL) && (p_char->getValueAttribute().getLength() > 0)) {
+                BlueNRGGattServer::getInstance().write(
+                    p_char->getValueAttribute().getHandle(),
+                    (uint8_t*)att_data,
+                    data_length,
+                    false
+                );
+            }
+
+            BlueNRGGattServer::getInstance().HCIDataWrittenEvent(&writeParams);
+        } else {
+            PRINTF("*****WRITE DESCRIPTOR CASE\n\r");
+
+            GattWriteCallbackParams writeParams;
+            writeParams.connHandle = conn_handle;
+            writeParams.handle = attr_handle;
+            writeParams.writeOp = GattWriteCallbackParams::OP_WRITE_REQ;//Where to find this property in BLUENRG?
+            writeParams.len = data_length;
+            writeParams.data = att_data;
+            writeParams.offset = offset;
+
+            BlueNRGGattServer::getInstance().HCIDataWrittenEvent(&writeParams);
+        }
+    }
+
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    /**************************************************************************/
+    /*!
+    @brief      Handle HCI Stack Event
+
+    @param[in]  pckt
+                Event Packet sent by the stack to be decoded
+
+    @returns
+    */
+    /**************************************************************************/
+    extern void HCI_Event_CB(void *pckt) {
+        hci_uart_pckt *hci_pckt = (hci_uart_pckt*)pckt;
+        hci_event_pckt *event_pckt = (hci_event_pckt*)hci_pckt->data;
+
+        if(hci_pckt->type != HCI_EVENT_PKT)
+          return;
+
+        switch(event_pckt->evt){
+
+        case EVT_DISCONN_COMPLETE:
+            {
+                PRINTF("EVT_DISCONN_COMPLETE\n");
+
+                evt_disconn_complete *evt = (evt_disconn_complete*)event_pckt->data;
+
+                BlueNRGGap::getInstance().processDisconnectionEvent(evt->handle, (Gap::DisconnectionReason_t)evt->reason);
+            }
+            break;
+
+        case EVT_LE_META_EVENT:
+            {
+                PRINTF("EVT_LE_META_EVENT\n");
+
+                evt_le_meta_event *evt = (evt_le_meta_event *)event_pckt->data;
+
+                switch(evt->subevent){
+
+                case EVT_LE_CONN_COMPLETE:
+                    {
+                        PRINTF("EVT_LE_CONN_COMPLETE\n");
+                        Gap::Address_t ownAddr;
+                        Gap::AddressType_t ownAddrType;
+                        BlueNRGGap::getInstance().getAddress(&ownAddrType, ownAddr);
+
+                        Gap::AddressType_t peerAddrType = BLEProtocol::AddressType::RANDOM_STATIC;
+                        Gap::Role_t role;
+
+                        evt_le_connection_complete *cc = (evt_le_connection_complete *)evt->data;
+
+                        BlueNRGGap::getInstance().setConnectionHandle(cc->handle);
+                        BlueNRGGap::ConnectionParams_t connectionParams = {
+                            /* minConnectionInterval = */ cc->interval,
+                            /* maxConnectionInterval = */ cc->interval,
+                            /* slaveLatency = */ cc->latency,
+                            /* connectionSupervisionTimeout = */ cc->supervision_timeout
+                        };
+
+                        BlueNRGGap::getInstance().setConnectionInterval(cc->interval);
+
+                        switch (cc->peer_bdaddr_type) {
+                            case PUBLIC_ADDR:
+                                peerAddrType = BLEProtocol::AddressType::PUBLIC;
+                                break;
+                            case STATIC_RANDOM_ADDR:
+                                peerAddrType = BLEProtocol::AddressType::RANDOM_STATIC;
+                                break;
+                            case RESOLVABLE_PRIVATE_ADDR:
+                                peerAddrType = BLEProtocol::AddressType::RANDOM_PRIVATE_RESOLVABLE;
+                                break;
+                            case NON_RESOLVABLE_PRIVATE_ADDR:
+                                peerAddrType = BLEProtocol::AddressType::RANDOM_PRIVATE_NON_RESOLVABLE;
+                                break;
+                        }
+                        //PRINTF("EVT_LE_CONN_COMPLETE LL role=%d\n", cc->role);
+                        switch (cc->role) {
+			case 0: //master
+                                role = Gap::CENTRAL;
+                                break;
+			case 1:
+                                role = Gap::PERIPHERAL;
+                                break;
+			default:
+                                role = Gap::PERIPHERAL;
+				break;
+                        }
+
+                        BlueNRGGap::getInstance().setGapRole(role);
+
+                        BlueNRGGap::getInstance().processConnectionEvent(cc->handle,
+                                                                         role,
+                                                                         peerAddrType,
+                                                                         cc->peer_bdaddr,
+                                                                         ownAddrType,
+                                                                         ownAddr,
+                                                                         &connectionParams);
+                    }
+                    break;
+
+        case EVT_LE_ADVERTISING_REPORT:
+          PRINTF("EVT_LE_ADVERTISING_REPORT\n\r");
+          /* FIXME: comment this otherwise it will be obscure and error prone if BlueNRG FW will be updated */
+          // This event is generated only by X-NUCLEO-IDB05A1 version but not by X-NUCLEO-IDB04A1 (which generates DEVICE_FOUND EVT)
+          // Formally the structure related to both events are identical except that for the ADV REPORT
+          // there is one more field (number of reports) which is not forwarded to upper layer.
+          // Thus we need to move one byte over (((uint8_t*)evt->data)+1) before persing the ADV REPORT.
+          le_advertising_info *pr = (le_advertising_info*) (((uint8_t*)evt->data)+1);
+          PRINTF("EVT_LE_ADVERTISING_REPORT evt_type=%d\n\r", pr->evt_type);
+
+          BlueNRGGap::getInstance().Discovery_CB(BlueNRGGap::DEVICE_FOUND,
+                                                 pr->evt_type,
+                                                 pr->bdaddr_type,
+                                                 pr->bdaddr,
+                                                 &pr->data_length,
+                                                 &pr->data_RSSI[0],
+                                                 &pr->data_RSSI[pr->data_length]);
+                    break;
+                }
+            }
+            break;
+
+        case EVT_VENDOR:
+            {
+                evt_blue_aci *blue_evt = (evt_blue_aci*)event_pckt->data;
+                //PRINTF("EVT_VENDOR %d\n", blue_evt->ecode);
+
+                switch(blue_evt->ecode){
+
+                case EVT_BLUE_GATT_WRITE_PERMIT_REQ:
+                    {
+                        PRINTF("EVT_BLUE_GATT_WRITE_PERMIT_REQ\r\n");
+                        evt_gatt_write_permit_req* write_req = (evt_gatt_write_permit_req*)blue_evt->data;
+
+                        // ask the local server if the write operation is authorized
+                        uint8_t err_code = BlueNRGGattServer::getInstance().Write_Request_CB(
+                            write_req->conn_handle,
+                            write_req->attr_handle,
+                            write_req->data_length,
+                            write_req->data
+                        );
+                        uint8_t write_status = err_code == 0 ? 0 : 1;
+
+                        // reply to the shield
+                        aci_gatt_write_response(
+                            write_req->conn_handle,
+                            write_req->attr_handle,
+                            write_status,
+                            err_code,
+                            write_req->data_length,
+                            write_req->data
+                        );
+                    }
+                    break;
+
+                case EVT_BLUE_GATT_READ_PERMIT_REQ:
+                    {
+                        PRINTF("EVT_BLUE_GATT_READ_PERMIT_REQ_OK\n\r");
+                        evt_gatt_read_permit_req *pr = (evt_gatt_read_permit_req*)blue_evt->data;
+                        PRINTF("EVT_BLUE_GATT_READ_PERMIT_REQ_OK pr->attr_handle=%u\n\r", pr->attr_handle);
+                        BlueNRGGattServer::getInstance().Read_Request_CB(pr->attr_handle);
+                    }
+                    break;
+
+                case EVT_BLUE_GATT_ATTRIBUTE_MODIFIED:
+                    {
+                        PRINTF("EVT_BLUE_GATT_ATTRIBUTE_MODIFIED\n\r");
+                        /* this callback is invoked when a GATT attribute is modified
+                            extract callback data and pass to suitable handler function */
+                        Attribute_Modified_CB(blue_evt);
+                    }
+                    break;
+
+                    //Any cases for Data Sent Notifications?
+                case EVT_BLUE_GATT_NOTIFICATION:
+                    //This is only relevant for Client Side Event
+                    PRINTF("EVT_BLUE_GATT_NOTIFICATION");
+                    break;
+                case EVT_BLUE_GATT_INDICATION:
+                    //This is only relevant for Client Side Event
+                    PRINTF("EVT_BLUE_GATT_INDICATION");
+                    break;
+
+        case EVT_BLUE_ATT_READ_BY_GROUP_TYPE_RESP:
+          {
+            PRINTF("EVT_BLUE_ATT_READ_BY_GROUP_TYPE_RESP\n\r");
+            evt_att_read_by_group_resp *pr = (evt_att_read_by_group_resp*)blue_evt->data;
+            BlueNRGGattClient::getInstance().primaryServicesCB(pr->conn_handle,
+                                                               pr->event_data_length,
+                                                               pr->attribute_data_length,
+                                                               pr->attribute_data_list);
+          }
+          break;
+        case EVT_BLUE_ATT_READ_BY_TYPE_RESP:
+          {
+            PRINTF("EVT_BLUE_ATT_READ_BY_TYPE_RESP\n\r");
+            evt_att_read_by_type_resp *pr = (evt_att_read_by_type_resp*)blue_evt->data;
+            BlueNRGGattClient::getInstance().serviceCharsCB(pr->conn_handle,
+                                                            pr->event_data_length,
+                                                            pr->handle_value_pair_length,
+                                                            pr->handle_value_pair);
+          }
+          break;
+        case EVT_BLUE_ATT_READ_RESP:
+          {
+            PRINTF("EVT_BLUE_ATT_READ_RESP\n\r");
+            evt_att_read_resp *pr = (evt_att_read_resp*)blue_evt->data;
+            BlueNRGGattClient::getInstance().charReadCB(pr->conn_handle,
+                                                        pr->event_data_length,
+                                                        pr->attribute_value);
+          }
+          break;
+        case EVT_BLUE_ATT_EXEC_WRITE_RESP:
+          {
+            PRINTF("EVT_BLUE_ATT_EXEC_WRITE_RESP\n\r");
+            evt_att_prepare_write_resp *pr = (evt_att_prepare_write_resp*)blue_evt->data;
+            BlueNRGGattClient::getInstance().charWriteExecCB(pr->conn_handle,
+                                                             pr->event_data_length);
+          }
+          break;
+        case EVT_BLUE_ATT_PREPARE_WRITE_RESP:
+          {
+            PRINTF("EVT_BLUE_ATT_PREPARE_WRITE_RESP\n\r");
+            evt_att_prepare_write_resp *pr = (evt_att_prepare_write_resp*)blue_evt->data;
+            BlueNRGGattClient::getInstance().charWritePrepareCB(pr->conn_handle,
+                                                                pr->event_data_length,
+                                                                pr->attribute_handle,
+                                                                pr->offset,
+                                                                pr->part_attr_value);
+          }
+          break;
+        case EVT_BLUE_GATT_DISC_READ_CHAR_BY_UUID_RESP:
+          {
+            PRINTF("EVT_BLUE_GATT_DISC_READ_CHAR_BY_UUID_RESP\n\r");
+            evt_gatt_disc_read_char_by_uuid_resp *pr = (evt_gatt_disc_read_char_by_uuid_resp*)blue_evt->data;
+            BlueNRGGattClient::getInstance().serviceCharByUUIDCB(pr->conn_handle,
+                                                                 pr->event_data_length,
+                                                                 pr->attr_handle,
+                                                                 pr->attr_value);
+          }
+          break;
+        case EVT_BLUE_ATT_FIND_BY_TYPE_VAL_RESP:
+          {
+            PRINTF("EVT_BLUE_ATT_FIND_BY_TYPE_VAL_RESP\n\r");
+            evt_att_find_by_type_val_resp *pr = (evt_att_find_by_type_val_resp*)blue_evt->data;
+            BlueNRGGattClient::getInstance().primaryServiceCB(pr->conn_handle,
+                                                              pr->event_data_length,
+                                                              pr->handles_info_list);
+          }
+          break;
+        case EVT_BLUE_ATT_FIND_INFORMATION_RESP:
+          {
+            PRINTF("EVT_BLUE_ATT_FIND_INFORMATION_RESP\n\r");
+            evt_att_find_information_resp *pr = (evt_att_find_information_resp*)blue_evt->data;
+            BlueNRGGattClient::getInstance().discAllCharacDescCB(pr->conn_handle,
+                                                                 pr->event_data_length,
+                                                                 pr->format,
+                                                                 pr->handle_uuid_pair);
+          }
+          break;
+        case EVT_BLUE_GATT_PROCEDURE_COMPLETE:
+          {
+            evt_gatt_procedure_complete *evt = (evt_gatt_procedure_complete*)blue_evt->data;
+            PRINTF("EVT_BLUE_GATT_PROCEDURE_COMPLETE error_code=%d\n\r", evt->error_code);
+            BlueNRGGattClient::getInstance().gattProcedureCompleteCB(evt->conn_handle, evt->error_code);
+          }
+          break;
+
+        case EVT_BLUE_L2CAP_CONN_UPD_REQ:
+          {
+            PRINTF("EVT_BLUE_L2CAP_CONN_UPD_REQ\r\n");
+            evt_l2cap_conn_upd_req *evt = (evt_l2cap_conn_upd_req*)blue_evt->data;
+            if(bnrg_expansion_board == IDB05A1) {
+              // we assume the application accepts the request from the slave
+              aci_l2cap_connection_parameter_update_response_IDB05A1(evt->conn_handle,
+                                                                     evt->interval_min,
+                                                                     evt->interval_max,
+                                                                     evt->slave_latency,
+                                                                     evt->timeout_mult,
+                                                                     CONN_L1, CONN_L2,
+                                                                     evt->identifier,
+                                                                     0x0000);
+            }
+          }
+          break;
+
+        case EVT_BLUE_L2CAP_CONN_UPD_RESP:
+          {
+            PRINTF("EVT_BLUE_L2CAP_CONN_UPD_RESP\r\n");
+          }
+          break;
+
+        case EVT_LE_CONN_UPDATE_COMPLETE:
+          {
+            PRINTF("EVT_LE_CONN_UPDATE_COMPLETE\r\n");
+          }
+          break;
+
+        case EVT_BLUE_GAP_DEVICE_FOUND:
+          {
+            evt_gap_device_found *pr = (evt_gap_device_found*)blue_evt->data;
+            PRINTF("EVT_BLUE_GAP_DEVICE_FOUND evt_type=%d\n\r", pr->evt_type);
+
+            BlueNRGGap::getInstance().Discovery_CB(BlueNRGGap::DEVICE_FOUND,
+                                                   pr->evt_type,
+                                                   pr->bdaddr_type,
+                                                   pr->bdaddr,
+                                                   &pr->data_length,
+                                                   &pr->data_RSSI[0],
+                                                   &pr->data_RSSI[pr->data_length]);
+          }
+          break;
+
+        case EVT_BLUE_GAP_PROCEDURE_COMPLETE:
+          {
+            evt_gap_procedure_complete *pr = (evt_gap_procedure_complete*)blue_evt->data;
+            //PRINTF("EVT_BLUE_GAP_PROCEDURE_COMPLETE (code=0x%02X)\n\r", pr->procedure_code);
+
+            switch(pr->procedure_code) {
+            case GAP_OBSERVATION_PROC_IDB05A1:
+
+              BlueNRGGap::getInstance().Discovery_CB(BlueNRGGap::DISCOVERY_COMPLETE, 0, 0, NULL, NULL, NULL, NULL);
+              break;
+            }
+          }
+                    break;
+                }
+            }
+            break;
+        }
+        return ;
+    }
+
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/platform/stm32_bluenrg_ble.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,219 @@
+/**
+  ******************************************************************************
+  * @file    stm32_bluenrg_ble.cpp
+  * @author  CL
+  * @version V1.0.0
+  * @date    15-June-2015
+  * @brief   
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. 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.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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.
+  *
+  ******************************************************************************
+  */ 
+  
+/* Includes ------------------------------------------------------------------*/
+#include "BlueNRGGap.h"
+#include "BlueNRGDevice.h"
+//#include "Utils.h"
+#include "btle.h"
+
+// FIXME: find a better way to get the instance of the BlueNRG device
+extern BlueNRGDevice bluenrgDeviceInstance;
+
+
+////////////////////////////////////////
+// Start of C function wrappers
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "stm32_bluenrg_ble.h"
+#include "ble_gp_timer.h"
+#include "ble_debug.h"
+
+	
+void BlueNRG_RST(void)
+{
+    bluenrgDeviceInstance.reset();
+}
+
+uint8_t BlueNRG_DataPresent(void)
+{
+    return (bluenrgDeviceInstance.dataPresent());
+}
+ 
+
+/**
+ * @brief  This function is a utility to print the log time
+*          in the format HH:MM:SS:MSS (DK GUI time format)
+ * @param  None
+ * @retval None
+ */
+void print_csv_time(void){
+#ifdef PRINT_CSV_FORMAT
+  uint32_t ms = 0;//ms_counter;
+  PRINT_CSV("%02d:%02d:%02d.%03d", ms/(60*60*1000)%24, ms/(60*1000)%60, (ms/1000)%60, ms%1000);
+#endif
+}
+
+/**
+ * @brief  Writes data to a serial interface.
+ * @param  data1   :  1st buffer
+ * @param  data2   :  2nd buffer
+ * @param  n_bytes1: number of bytes in 1st buffer
+ * @param  n_bytes2: number of bytes in 2nd buffer
+ * @retval None
+ */
+void Hal_Write_Serial(const void* data1, const void* data2, int32_t n_bytes1,
+                      int32_t n_bytes2)
+{
+  struct timer t;
+
+  Timer_Set(&t, CLOCK_SECOND/10);
+
+#ifdef PRINT_CSV_FORMAT
+  print_csv_time();
+  for (int i=0; i<n_bytes1; i++) {
+    PRINT_CSV(" %02x", ((uint8_t *)data1)[i]);
+	 }
+  for (int i=0; i<n_bytes2; i++) {
+    PRINT_CSV(" %02x", ((uint8_t *)data2)[i]);
+	 }
+  PRINT_CSV("\n");
+#endif
+
+  while(1){
+    if(BlueNRG_SPI_Write((uint8_t *)data1,(uint8_t *)data2, n_bytes1, n_bytes2)==0) break;
+    if(Timer_Expired(&t)){
+      break;
+    }
+  }
+}
+
+
+/**
+ * @brief  Activate internal bootloader using pin.
+ * @param  None
+ * @retval None
+ */
+void BlueNRG_HW_Bootloader(void)
+{
+	// Reset BlueNRG SPI interface
+    BlueNRG_RST();
+    
+    // Send an ACI command to reboot BlueNRG in bootloader mode
+	// The safest way to get in bootloader mode is keeping high
+	// the interrupt pin during reset, but this would require many
+	// changes to the current mbed driver
+	aci_updater_start();
+}
+
+/**
+ * @brief  Reads from BlueNRG SPI buffer and store data into local buffer.
+ * @param  buffer   : Buffer where data from SPI are stored
+ * @param  buff_size: Buffer size
+ * @retval int32_t  : Number of read bytes
+ */
+int32_t BlueNRG_SPI_Read_All(uint8_t *buffer,
+                             uint8_t buff_size)
+{
+    int32_t ret = bluenrgDeviceInstance.spiRead(buffer, buff_size);
+
+    return ret;
+}
+
+/**
+ * @brief  Writes data from local buffer to SPI.
+ * @param  data1    : First data buffer to be written
+ * @param  data2    : Second data buffer to be written
+ * @param  Nb_bytes1: Size of first data buffer to be written
+ * @param  Nb_bytes2: Size of second data buffer to be written
+ * @retval Number of read bytes
+ */
+int32_t BlueNRG_SPI_Write(uint8_t* data1,
+                          uint8_t* data2, uint8_t Nb_bytes1, uint8_t Nb_bytes2)
+{  
+    int32_t ret = bluenrgDeviceInstance.spiWrite(data1, data2, Nb_bytes1, Nb_bytes2);
+
+		return ret;
+}
+     
+/**
+ * @brief  Enable SPI IRQ.
+ * @param  None
+ * @retval None
+ */
+void Enable_SPI_IRQ(void)
+{
+    bluenrgDeviceInstance.enable_irq();
+}
+
+void signalEventsToProcess(void)  {
+    if(btle_handler_pending == 0) {
+        btle_handler_pending = 1;
+        bluenrgDeviceInstance.signalEventsToProcess(BLE::DEFAULT_INSTANCE);
+    }
+}
+
+/**
+ * @brief  Disable SPI IRQ.
+ * @param  None
+ * @retval None
+ */
+void Disable_SPI_IRQ(void)
+{ 
+    bluenrgDeviceInstance.disable_irq();
+}
+
+/**
+ * @brief  Clear Pending SPI IRQ.
+ * @param  None
+ * @retval None
+ */
+void Clear_SPI_IRQ(void)
+{
+}
+
+/**
+ * @brief  Clear EXTI (External Interrupt) line for SPI IRQ.
+ * @param  None
+ * @retval None
+ */
+void Clear_SPI_EXTI_Flag(void)
+{  
+}
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+// End of C function wrappers
+////////////////////////////////////////
+ 
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/utils/ble_payload.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,118 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include <ble_payload.h>   
+
+Payload::Payload() {
+    stringLength = 0;
+    payloadUnitCount = 0;
+    payload = NULL;
+}
+
+Payload::Payload(const uint8_t *tokenString, uint8_t string_ength) {
+    // initialize private data members
+    stringLength = string_ength;
+    payloadUnitCount = 0;
+    payload = NULL;
+    
+    int index = 0;
+    while( index!=stringLength) {
+        int len=tokenString[index];
+        index=index+1+len;
+        payloadUnitCount++;               
+    }
+    
+    UnitPayload *obj = new UnitPayload[payloadUnitCount];
+    int i=0;
+    int c=0;
+    int j,k;
+
+    while(i<payloadUnitCount)
+    {   
+        obj[i].length=tokenString[c];
+        obj[i].id=tokenString[c+1];
+
+        obj[i].data = new uint8_t[obj[i].length];
+        for(j=c+2,k=0;(j<(c+obj[i].length+1))&&(k<obj[i].length-1);j++,k++)
+        {
+            obj[i].data[k]=tokenString[j];
+            
+        }           
+        
+        c=c+obj[i].length+1;
+        i++;
+
+    }
+    payload = obj;
+}
+
+uint8_t Payload::getPayloadUnitCount() {
+    return payloadUnitCount;
+}
+
+uint8_t Payload::getIDAtIndex(int index) {
+    return payload[index].get_id();
+}
+
+uint8_t Payload::getLengthAtIndex(int index) {
+    return payload[index].get_length();
+}
+
+uint8_t* Payload::getDataAtIndex(int index) {
+    return payload[index].get_data();
+}
+
+int8_t Payload::getInt8AtIndex(int index) {
+    uint8_t* str = payload[index].get_data();
+    int8_t value = (int8_t)str[0];
+    return value;
+}
+
+uint16_t Payload::getUint16AtIndex(int index) {
+    uint16_t* str = (uint16_t*)payload[index].get_data();
+    uint16_t value = str[0];
+    return value;    
+}
+
+uint8_t* Payload::getSerializedAdDataAtIndex(int index) {
+    uint8_t length = payload[index].get_length();
+    uint8_t* data = payload[index].get_data();
+    uint8_t id = payload[index].get_id();
+    uint8_t *serializedAdData = new uint8_t[length];
+    
+    serializedAdData[0] = id;
+    for(int i=0; i<length-1; i++) {
+        serializedAdData[i+1] = data[i];
+    }
+    return serializedAdData;
+}
+
+Payload::~Payload() {
+    int i = 0;
+
+    if(payload) {
+        while(i<payloadUnitCount) {
+            if(payload->data) {
+                delete[] payload->data;
+                payload->data = NULL;
+            }
+        }
+        delete[] payload;
+        payload = NULL;
+    }
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/source/utils/ble_utils.cpp	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,93 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include "ble_utils.h"
+
+/**************************************************************************/
+/*!
+    @brief  sets values of EN_HIGH_POWER and PA_LEVEL corresponding to dBMLevel of tx power
+
+*/
+/**************************************************************************/
+tBleStatus getHighPowerAndPALevelValue(int8_t dBMLevel, int8_t& EN_HIGH_POWER, int8_t& PA_LEVEL) {
+    tBleStatus ret = BLE_STATUS_SUCCESS;
+
+    if(dBMLevel==-18) {
+        EN_HIGH_POWER = 0;
+        PA_LEVEL = 0;         
+    }
+    else if(dBMLevel==-15) {
+        EN_HIGH_POWER = 0;
+        PA_LEVEL = 1;
+    }
+    else if(dBMLevel==-14) {
+        EN_HIGH_POWER = 1;
+        PA_LEVEL = 0;
+    }
+    else if(dBMLevel==-12) {
+        EN_HIGH_POWER = 0;
+        PA_LEVEL = 2;
+    }
+    else if(dBMLevel==-11) {
+        EN_HIGH_POWER = 1;
+        PA_LEVEL = 1;
+    }
+    else if(dBMLevel==-9) {
+        EN_HIGH_POWER = 0;
+        PA_LEVEL = 3;
+    }
+    else if(dBMLevel==-8) {
+        EN_HIGH_POWER = 1;
+        PA_LEVEL = 2;
+    }
+    else if(dBMLevel==-6) {
+        EN_HIGH_POWER = 0;
+        PA_LEVEL = 4;
+    }
+    else if(dBMLevel==-5) {
+        EN_HIGH_POWER = 1;
+        PA_LEVEL = 3;
+    }
+    else if(dBMLevel==-2) {
+        EN_HIGH_POWER = 1;
+        PA_LEVEL = 4;
+    }
+    else if(dBMLevel==0) {
+        EN_HIGH_POWER = 0;
+        PA_LEVEL = 6;
+    }
+    else if(dBMLevel==2) {
+        EN_HIGH_POWER = 1;
+        PA_LEVEL = 5;
+    }
+    else if(dBMLevel==4) {
+        EN_HIGH_POWER = 1;
+        PA_LEVEL = 6;
+    }
+    else if(dBMLevel==5) {
+        EN_HIGH_POWER = 0;
+        PA_LEVEL = 7;
+    }
+    else if(dBMLevel==8) {
+        EN_HIGH_POWER = 1;
+        PA_LEVEL = 7;
+    }
+    else {
+        ret = ERR_INVALID_HCI_CMD_PARAMS;
+    }
+
+    return ret;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/BlueNRGDevice.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,111 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/**
+  ******************************************************************************
+  * @file    BlueNRGDevice.h 
+  * @author  STMicroelectronics
+  * @brief   Header file for BLEDeviceInstanceBase based BlueNRGDevice
+  ******************************************************************************
+  * @copy
+  *
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+  *
+  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
+  */ 
+  
+#ifndef __BLUENRG_DEVICE_H__
+#define __BLUENRG_DEVICE_H__
+
+#define BLUENRG
+#define DEBUG_BLUENRG_USER
+
+#include "btle.h"
+
+#ifdef YOTTA_CFG_MBED_OS
+    #include "mbed-drivers/mbed.h"
+#else
+    #include "mbed.h"
+#endif 
+#include "ble/blecommon.h"
+#include "ble/BLEInstanceBase.h"
+#include "ble/BLE.h"
+#include "BlueNRGGap.h"
+#include "BlueNRGGattServer.h"
+#include "BlueNRGGattClient.h"
+
+
+class BlueNRGDevice : public BLEInstanceBase
+{
+
+public:
+    BlueNRGDevice(PinName mosi, PinName miso, PinName sck, PinName cs, PinName rst, PinName irq);
+    virtual ~BlueNRGDevice(void);
+
+    virtual ble_error_t init(BLE::InstanceID_t instanceID, FunctionPointerWithContext<BLE::InitializationCompleteCallbackContext *> callback);
+    virtual ble_error_t shutdown(void);   
+    virtual const char *getVersion(void);
+    virtual Gap&        getGap();
+    virtual const Gap&  getGap() const;
+    virtual GattServer& getGattServer();
+    virtual const GattServer& getGattServer() const;
+    virtual void        waitForEvent(void);
+    
+    virtual GattClient& getGattClient() {
+        return BlueNRGGattClient::getInstance();
+    }
+
+    virtual SecurityManager& getSecurityManager() {
+        return *sm;
+    }
+
+    virtual const SecurityManager& getSecurityManager() const {
+        return *sm;
+    }
+    void reset(void);
+    virtual bool hasInitialized(void) const {
+        return isInitialized;
+    }
+
+    uint8_t getUpdaterHardwareVersion(uint8_t *hw_version);
+    int updateFirmware(const uint8_t *fw_image, uint32_t fw_size);
+    bool dataPresent();
+    int32_t spiRead(uint8_t *buffer, uint8_t buff_size);
+    int32_t spiWrite(uint8_t* data1, uint8_t* data2, uint8_t Nb_bytes1, uint8_t Nb_bytes2);
+    void disable_irq();
+    void enable_irq();
+
+    virtual void processEvents();
+    
+private:
+    bool isInitialized;
+
+    SPI         spi_;
+    DigitalOut  nCS_;
+    DigitalOut  rst_;
+    InterruptIn irq_;
+
+    //FIXME: TBI (by now just placeholders to let build
+    /*** betzw: placeholders ***/
+    SecurityManager *sm;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/BlueNRGDiscoveredCharacteristic.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,46 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __BLUENRG_DISCOVERED_CHARACTERISTIC_H__
+#define __BLUENRG_DISCOVERED_CHARACTERISTIC_H__
+
+#include "ble/DiscoveredCharacteristic.h"
+
+class BlueNRGGattClient; /* forward declaration */
+
+class BlueNRGDiscoveredCharacteristic : public DiscoveredCharacteristic {
+public:
+
+  void setup(BlueNRGGattClient         *gattcIn,
+             Gap::Handle_t            connectionHandleIn,
+             DiscoveredCharacteristic::Properties_t    propsIn,
+             GattAttribute::Handle_t  declHandleIn,
+             GattAttribute::Handle_t  valueHandleIn,
+             GattAttribute::Handle_t  lastHandleIn);
+
+  void setup(BlueNRGGattClient         *gattcIn,
+             Gap::Handle_t            connectionHandleIn,
+             UUID   uuidIn,
+             DiscoveredCharacteristic::Properties_t    propsIn,
+             GattAttribute::Handle_t  declHandleIn,
+             GattAttribute::Handle_t  valueHandleIn,
+             GattAttribute::Handle_t  lastHandleIn);
+
+
+  void setLastHandle(GattAttribute::Handle_t  lastHandleIn);
+};
+
+#endif /* __BLUENRG_DISCOVERED_CHARACTERISTIC_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/BlueNRGGap.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,214 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/**
+  ******************************************************************************
+  * @file    BlueNRGGap.h
+  * @author  STMicroelectronics
+  * @brief   Header file for BlueNRG BLE_API Gap Class
+  ******************************************************************************
+  * @copy
+  *
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+  *
+  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
+  */
+
+#ifndef __BLUENRG_GAP_H__
+#define __BLUENRG_GAP_H__
+
+#ifdef YOTTA_CFG_MBED_OS
+    #include "mbed-drivers/mbed.h"
+#else
+    #include "mbed.h"
+#endif 
+#include "ble/blecommon.h"
+#include "btle.h"
+#include "ble/GapAdvertisingParams.h"
+#include "ble/GapAdvertisingData.h"
+#include "ble/Gap.h"
+
+#define BLE_CONN_HANDLE_INVALID 0x0
+#define BDADDR_SIZE 6
+
+#define BLUENRG_GAP_ADV_INTERVAL_MIN (0x0020)
+#define BLUENRG_GAP_ADV_INTERVAL_MAX (0x4000)
+#define BLUENRG_GAP_ADV_NONCON_INTERVAL_MIN (0x00A0)
+
+// Scanning and Connection Params used by Central for creating connection
+#define GAP_OBSERVATION_PROC (0x80)
+
+#define SCAN_P         (0x0010)
+#define SCAN_L         (0x0010)
+#define SUPERV_TIMEOUT (0xC80)
+#define CONN_P(x)      ((int)((x)/1.25f))
+#define CONN_L(x)      ((int)((x)/0.625f))
+#define CONN_P1        ((int)(_advParams.getInterval()+5)/1.25f)//(0x4C)//(0x6C)
+#define CONN_P2        ((int)(_advParams.getInterval()+5)/1.25f)//(0x4C)//(0x6C)
+#define CONN_L1        (0x0008)
+#define CONN_L2        (0x0008)
+#define GUARD_INT      5 //msec
+#define MIN_INT_CONN   0x0006 //=>7.5msec
+#define MAX_INT_CONN   0x0C80 //=>4000msec
+#define DEF_INT_CONN   0x0140 //=>400msec (default value for connection interval)
+
+/**************************************************************************/
+/*!
+    \brief
+
+*/
+/**************************************************************************/
+class BlueNRGGap : public Gap
+{
+public:
+    static BlueNRGGap &getInstance() {
+        static BlueNRGGap m_instance;
+        return m_instance;
+    }
+
+    enum Reason_t {
+        DEVICE_FOUND,
+        DISCOVERY_COMPLETE
+    };
+
+    /* Functions that must be implemented from Gap */
+    virtual ble_error_t setAddress(addr_type_t type, const BLEProtocol::AddressBytes_t address);
+    virtual ble_error_t getAddress(BLEProtocol::AddressType_t *typeP, BLEProtocol::AddressBytes_t address);
+    virtual ble_error_t setAdvertisingData(const GapAdvertisingData &, const GapAdvertisingData &);
+    virtual ble_error_t startAdvertising(const GapAdvertisingParams &);
+    virtual ble_error_t stopAdvertising(void);
+    virtual ble_error_t stopScan();
+    virtual uint16_t    getMinAdvertisingInterval(void) const {return GapAdvertisingParams::ADVERTISEMENT_DURATION_UNITS_TO_MS(BLUENRG_GAP_ADV_INTERVAL_MIN);}
+    virtual uint16_t    getMinNonConnectableAdvertisingInterval(void) const {return GapAdvertisingParams::ADVERTISEMENT_DURATION_UNITS_TO_MS(BLUENRG_GAP_ADV_NONCON_INTERVAL_MIN);}
+    virtual uint16_t    getMaxAdvertisingInterval(void) const {return GapAdvertisingParams::ADVERTISEMENT_DURATION_UNITS_TO_MS(BLUENRG_GAP_ADV_INTERVAL_MAX);}
+    virtual ble_error_t disconnect(DisconnectionReason_t reason);
+    virtual ble_error_t disconnect(Handle_t connectionHandle, DisconnectionReason_t reason);
+    virtual ble_error_t getPreferredConnectionParams(ConnectionParams_t *params);
+    virtual ble_error_t setPreferredConnectionParams(const ConnectionParams_t *params);
+    virtual ble_error_t updateConnectionParams(Handle_t handle, const ConnectionParams_t *params);
+
+    virtual ble_error_t setDeviceName(const uint8_t *deviceName);
+    virtual ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP);
+    virtual ble_error_t setAppearance(GapAdvertisingData::Appearance appearance);
+    virtual ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP);
+
+    virtual ble_error_t setScanningPolicyMode(ScanningPolicyMode_t mode);
+    virtual ble_error_t setAdvertisingPolicyMode(AdvertisingPolicyMode_t mode);
+    virtual AdvertisingPolicyMode_t getAdvertisingPolicyMode(void) const;
+    virtual ScanningPolicyMode_t getScanningPolicyMode(void) const;
+
+    virtual ble_error_t setTxPower(int8_t txPower);
+    virtual void        getPermittedTxPowerValues(const int8_t **, size_t *);
+
+    virtual ble_error_t connect(const Address_t peerAddr,
+                                Gap::AddressType_t peerAddrType,
+                                const ConnectionParams_t *connectionParams,
+                                const GapScanningParams *scanParams);
+
+    virtual ble_error_t reset(void);
+
+    void                Discovery_CB(Reason_t reason,
+                                     uint8_t adv_type,
+                                     uint8_t addr_type,
+                                     uint8_t *addr,
+                                     uint8_t *data_length,
+                                     uint8_t *data,
+                                     uint8_t *RSSI);
+    ble_error_t         createConnection(void);
+
+    void     setConnectionHandle(uint16_t con_handle);
+    uint16_t getConnectionHandle(void);
+
+    bool getIsSetAddress();
+
+    Timeout getAdvTimeout(void) const {
+        return advTimeout;
+    }
+    uint8_t getAdvToFlag(void) {
+        return AdvToFlag;
+    }
+    void setAdvToFlag(void);
+
+    void Process(void);
+
+    GapScanningParams* getScanningParams(void);
+
+    virtual ble_error_t startRadioScan(const GapScanningParams &scanningParams);
+
+    void setConnectionInterval(uint16_t interval);
+    void setGapRole(Role_t role);
+
+private:
+    uint16_t m_connectionHandle;
+    Role_t gapRole;
+    AddressType_t addr_type;
+    Address_t _peerAddr;
+    AddressType_t _peerAddrType;
+    uint8_t bdaddr[BDADDR_SIZE];
+    bool _scanning;
+    bool _connecting;
+    bool isSetAddress;
+    uint8_t deviceAppearance[2];
+
+    Timeout advTimeout;
+    bool AdvToFlag;
+
+    static uint16_t SCAN_DURATION_UNITS_TO_MSEC(uint16_t duration) {
+        return (duration * 625) / 1000;
+    }
+
+    uint16_t scanInterval;
+    uint16_t scanWindow;
+    uint16_t advInterval;
+    uint16_t slaveConnIntervMin;
+    uint16_t slaveConnIntervMax;
+    uint16_t conn_min_interval;
+    uint16_t conn_max_interval;
+    void setAdvParameters(void);
+    void setConnectionParameters(void);
+
+    Gap::AdvertisingPolicyMode_t advertisingPolicyMode;
+    Gap::ScanningPolicyMode_t scanningPolicyMode;
+
+    Whitelist_t whitelistAddresses;
+
+    ble_error_t updateAdvertisingData(void);
+
+    BlueNRGGap() {
+        m_connectionHandle = BLE_CONN_HANDLE_INVALID;
+        addr_type = BLEProtocol::AddressType::RANDOM_STATIC;
+
+        /* Set the whitelist policy filter modes to IGNORE_WHITELIST */
+        advertisingPolicyMode = Gap::ADV_POLICY_IGNORE_WHITELIST;
+        scanningPolicyMode    = Gap::SCAN_POLICY_IGNORE_WHITELIST;
+
+        isSetAddress = false;
+        memset(deviceAppearance, 0, sizeof(deviceAppearance));
+    }
+
+    BlueNRGGap(BlueNRGGap const &);
+    void operator=(BlueNRGGap const &);
+
+    GapAdvertisingData _advData;
+    GapAdvertisingData _scanResponse;
+};
+
+#endif // ifndef __BLUENRG_GAP_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/BlueNRGGattClient.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,185 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+/**
+  ******************************************************************************
+  * @file    BlueNRGGattClient.cpp 
+  * @author  STMicroelectronics
+  * @brief   Header file for BLE_API GattClient Class
+  ******************************************************************************
+  * @copy
+  *
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+  *
+  * <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2>
+  */
+ 
+#ifndef __BLUENRG_GATT_CLIENT_H__
+#define __BLUENRG_GATT_CLIENT_H__
+
+#ifdef YOTTA_CFG_MBED_OS
+    #include "mbed-drivers/mbed.h"
+#else
+    #include "mbed.h"
+#endif 
+#include "ble/blecommon.h"
+#include "btle.h"
+#include "ble/GattClient.h"
+#include "ble/DiscoveredService.h"
+#include "ble/CharacteristicDescriptorDiscovery.h"
+#include "BlueNRGDiscoveredCharacteristic.h"
+
+using namespace std;
+
+#define BLE_TOTAL_DISCOVERED_SERVICES 10
+#define BLE_TOTAL_DISCOVERED_CHARS 10
+
+class BlueNRGGattClient : public GattClient
+{
+public:
+    static BlueNRGGattClient &getInstance() {
+        static BlueNRGGattClient m_instance;
+        return m_instance;
+    }
+    
+    enum {
+      GATT_IDLE,
+      GATT_SERVICE_DISCOVERY,
+      GATT_CHAR_DESC_DISCOVERY,
+      //GATT_CHARS_DISCOVERY_COMPLETE,
+      //GATT_DISCOVERY_TERMINATED,
+      GATT_READ_CHAR,
+      GATT_WRITE_CHAR
+    };
+    
+    /* Functions that must be implemented from GattClient */
+    virtual ble_error_t launchServiceDiscovery(Gap::Handle_t                               connectionHandle,
+                                               ServiceDiscovery::ServiceCallback_t         sc                           = NULL,
+                                               ServiceDiscovery::CharacteristicCallback_t  cc                           = NULL,
+                                               const UUID                                 &matchingServiceUUID          = UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN),
+                                               const UUID                                 &matchingCharacteristicUUIDIn = UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN));
+
+    virtual ble_error_t discoverServices(Gap::Handle_t                        connectionHandle,
+                                         ServiceDiscovery::ServiceCallback_t  callback,
+                                         const UUID                          &matchingServiceUUID = UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN));
+
+    virtual ble_error_t discoverServices(Gap::Handle_t                        connectionHandle,
+                                         ServiceDiscovery::ServiceCallback_t  callback,
+                                         GattAttribute::Handle_t              startHandle,
+                                         GattAttribute::Handle_t              endHandle);
+
+    virtual bool isServiceDiscoveryActive(void) const;
+    virtual void terminateServiceDiscovery(void);
+    virtual void onServiceDiscoveryTermination(ServiceDiscovery::TerminationCallback_t callback) {
+      terminationCallback = callback;
+    }
+    virtual ble_error_t read(Gap::Handle_t connHandle, GattAttribute::Handle_t attributeHandle, uint16_t offset) const;
+    virtual ble_error_t write(GattClient::WriteOp_t    cmd,
+                              Gap::Handle_t            connHandle,
+                              GattAttribute::Handle_t  attributeHandle,
+                              size_t                   length,
+                              const uint8_t           *value) const;
+    virtual ble_error_t discoverCharacteristicDescriptors(
+        const DiscoveredCharacteristic& characteristic,
+        const CharacteristicDescriptorDiscovery::DiscoveryCallback_t& discoveryCallback,
+        const CharacteristicDescriptorDiscovery::TerminationCallback_t& terminationCallback);
+
+    virtual ble_error_t reset(void);
+
+    void gattProcedureCompleteCB(Gap::Handle_t connectionHandle, uint8_t error_code);
+
+    void primaryServicesCB(Gap::Handle_t connectionHandle,
+                           uint8_t event_data_length,
+                           uint8_t attribute_data_length,
+                           uint8_t *attribute_data_list);
+    
+    void primaryServiceCB(Gap::Handle_t connectionHandle,
+                          uint8_t event_data_length,
+                          uint8_t *handles_info_list);
+    
+    ble_error_t findServiceChars(Gap::Handle_t connectionHandle);
+    
+    void serviceCharsCB(Gap::Handle_t connectionHandle,
+                        uint8_t event_data_length,
+                        uint8_t handle_value_pair_length,
+                        uint8_t *handle_value_pair);
+    
+    void  serviceCharByUUIDCB(Gap::Handle_t connectionHandle,
+                              uint8_t event_data_length,
+                              uint16_t attr_handle,
+                              uint8_t *attr_value);
+
+    void discAllCharacDescCB(Gap::Handle_t connHandle,
+                             uint8_t event_data_length,
+                             uint8_t format,
+                             uint8_t *handle_uuid_pair);
+
+    void charReadCB(Gap::Handle_t connHandle,
+                    uint8_t event_data_length,
+                    uint8_t* attribute_value);
+
+    void charWritePrepareCB(Gap::Handle_t connHandle,
+                            uint8_t event_data_length,
+                            uint16_t attribute_handle,
+                            uint16_t offset,
+                            uint8_t *part_attr_value);
+    
+    void charWriteExecCB(Gap::Handle_t connHandle,
+                         uint8_t event_data_length);
+
+protected:
+
+    BlueNRGGattClient() {
+      _currentState = GATT_IDLE;
+      _matchingServiceUUID = BLE_UUID_UNKNOWN;
+      _matchingCharacteristicUUIDIn = BLE_UUID_UNKNOWN;
+    }
+
+    ServiceDiscovery::ServiceCallback_t  serviceDiscoveryCallback;
+    ServiceDiscovery::CharacteristicCallback_t characteristicDiscoveryCallback;
+    ServiceDiscovery::TerminationCallback_t terminationCallback;
+    CharacteristicDescriptorDiscovery::DiscoveryCallback_t charDescDiscoveryCallback;
+    CharacteristicDescriptorDiscovery::TerminationCallback_t charDescTerminationCallback;
+
+private:
+
+  BlueNRGGattClient(BlueNRGGattClient const &);
+  void operator=(BlueNRGGattClient const &);
+
+  Gap::Handle_t _connectionHandle;
+  DiscoveredService discoveredService[BLE_TOTAL_DISCOVERED_SERVICES];
+  BlueNRGDiscoveredCharacteristic discoveredChar[BLE_TOTAL_DISCOVERED_CHARS];
+  
+  GattReadCallbackParams readCBParams;
+  GattWriteCallbackParams writeCBParams;
+
+  // The char for which the descriptor discovery has been launched  
+  DiscoveredCharacteristic _characteristic;
+
+  UUID _matchingServiceUUID;
+  UUID _matchingCharacteristicUUIDIn;
+  uint8_t _currentState;
+  uint8_t _numServices, _servIndex;
+  uint8_t _numChars;
+  uint8_t _numCharDesc;
+  
+};
+
+#endif /* __BLUENRG_GATT_CLIENT_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/BlueNRGGattServer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,125 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+/**
+  ******************************************************************************
+  * @file    BlueNRGGattServer.cpp
+  * @author  STMicroelectronics
+  * @brief   Header file for BLE_API GattServer Class
+  ******************************************************************************
+  * @copy
+  *
+  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
+  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+  *
+  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
+  */
+
+#ifndef __BLUENRG_GATT_SERVER_H__
+#define __BLUENRG_GATT_SERVER_H__
+
+#ifdef YOTTA_CFG_MBED_OS
+    #include "mbed-drivers/mbed.h"
+#else
+    #include "mbed.h"
+#endif 
+#include "ble/blecommon.h"
+#include "btle.h"
+#include "ble/GattService.h"
+#include "ble/GattServer.h"
+#include <vector>
+#include <map>
+
+#define BLE_TOTAL_CHARACTERISTICS 10
+
+using namespace std;
+
+class BlueNRGGattServer : public GattServer
+{
+public:
+    static BlueNRGGattServer &getInstance() {
+        static BlueNRGGattServer m_instance;
+        return m_instance;
+    }
+
+    enum HandleEnum_t {
+        CHAR_HANDLE = 0,
+        CHAR_VALUE_HANDLE,
+        CHAR_DESC_HANDLE
+    };
+
+    /* Functions that must be implemented from GattServer */
+    virtual ble_error_t addService(GattService &);
+    virtual ble_error_t read(GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP);
+    virtual ble_error_t read(Gap::Handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP);
+    virtual ble_error_t write(GattAttribute::Handle_t, const uint8_t[], uint16_t, bool localOnly = false);
+    virtual ble_error_t write(Gap::Handle_t connectionHandle, GattAttribute::Handle_t, const uint8_t[], uint16_t, bool localOnly = false);
+    virtual ble_error_t initializeGATTDatabase(void);
+
+    virtual bool isOnDataReadAvailable() const {
+        return true;
+    }
+
+    virtual ble_error_t reset(void);
+
+    /* BlueNRG Functions */
+    void eventCallback(void);
+    //void hwCallback(void *pckt);
+    ble_error_t Read_Request_CB(uint16_t attributeHandle);
+    uint8_t Write_Request_CB(
+        uint16_t connection_handle, uint16_t attr_handle,
+        uint8_t data_length, const uint8_t* data
+    );
+    GattCharacteristic* getCharacteristicFromHandle(uint16_t charHandle);
+    void HCIDataWrittenEvent(const GattWriteCallbackParams *params);
+    void HCIDataReadEvent(const GattReadCallbackParams *params);
+    void HCIEvent(GattServerEvents::gattEvent_e type, uint16_t charHandle);
+    void HCIDataSentEvent(unsigned count);
+
+private:
+
+    // compute the number of attribute record needed by a service
+    static uint16_t computeAttributesRecord(GattService& service);
+
+
+    static const int MAX_SERVICE_COUNT = 10;
+    uint8_t serviceCount;
+    uint8_t characteristicCount;
+    uint16_t servHandle, charHandle;
+
+    std::map<uint16_t, uint16_t> bleCharHandleMap;  // 1st argument is characteristic, 2nd argument is service
+    GattCharacteristic *p_characteristics[BLE_TOTAL_CHARACTERISTICS];
+    uint16_t bleCharacteristicHandles[BLE_TOTAL_CHARACTERISTICS];
+
+    BlueNRGGattServer() {
+        serviceCount = 0;
+        characteristicCount = 0;
+    };
+
+    BlueNRGGattServer(BlueNRGGattServer const &);
+    void operator=(BlueNRGGattServer const &);
+
+    static const int CHAR_DESC_TYPE_16_BIT=0x01;
+    static const int CHAR_DESC_TYPE_128_BIT=0x02;
+    static const int CHAR_DESC_SECURITY_PERMISSION=0x00;
+    static const int CHAR_DESC_ACCESS_PERMISSION=0x03;
+    static const int CHAR_ATTRIBUTE_LEN_IS_FIXED=0x00;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_clock.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,59 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : ble_clock.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.1
+* Date               : 19-July-2012
+* Description        : Header file for clock library, that gives a simple time
+*                       reference to the BLE Stack.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __CLOCK_H__
+#define __CLOCK_H__
+
+#include <ble_hal_types.h>
+
+/**
+ * Number of clocks in one seconds.
+ * This value must be set by each platorm implementation, basing on its needs.
+ */
+extern const uint32_t CLOCK_SECOND;
+
+typedef uint32_t tClockTime;
+
+/**
+ * This function initializes the clock library and should be called before
+ * any other Stack functions.
+ *
+ */
+void Clock_Init(void);
+
+/**
+ * This function returns the current system clock time. it is used by
+ * the host stack and has to be implemented.
+ *
+ * @return The current clock time, measured in system ticks.
+ */
+tClockTime Clock_Time(void);
+
+/**
+ * This function waits for a given number of milliseconds.
+ *
+ */
+void Clock_Wait(uint32_t i);
+
+/**
+ * It suspends system clock.
+ *
+ */
+void Clock_Suspend(void);
+
+
+#endif /* __CLOCK_H__ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_compiler.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,36 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : compiler.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : Compiler-dependent macros.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+#ifdef __ICCARM__
+#define PACKED
+#else
+#ifdef __GNUC__
+#undef __packed
+#define __packed
+#ifndef PACKED
+#define PACKED __attribute__((packed))
+#endif
+#else
+#define PACKED
+#define __packed
+#endif
+#endif
+
+/* Change this define to 1 if zero-length arrays are not supported by your compiler. */
+#define VARIABLE_SIZE 1
+
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_debug.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,73 @@
+/**
+  ******************************************************************************
+  * @file    ble_debug.h
+  * @author  CL
+  * @version V1.0.0
+  * @date    04-July-2014
+  * @brief   This file defines print functions for debug purposes.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. 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.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __DEBUG_H
+#define __DEBUG_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include <string.h>
+
+/* Exported macro ------------------------------------------------------------*/
+//#define DEBUG
+#ifdef DEBUG
+#include <stdio.h>
+#define PRINTF(...) printf(__VA_ARGS__)
+#else
+#define PRINTF(...)
+#endif
+
+/* Print the data travelling over the SPI in the .csv format for the GUI*/
+//#define PRINT_CSV_FORMAT
+#ifdef PRINT_CSV_FORMAT
+#include <stdio.h>
+#define PRINT_CSV(...) printf(__VA_ARGS__)
+#else
+#define PRINT_CSV(...)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DEBUG_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_gp_timer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,105 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : gp_timer.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : General purpose timer library.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __GP_TIMER_H__
+#define __GP_TIMER_H__
+
+#include "ble_clock.h"
+#include "ble_status.h"
+#ifdef __DMA_LP__
+#include "stm32xx_timerserver.h"
+#endif /* __DMA_LP__ */
+
+/**
+ * timer
+ *
+ * A structure that represents a timer. Use Timer_Set() to set the timer.
+ *
+ */
+struct timer {
+    
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+    
+  tClockTime start;
+  tClockTime interval;
+  
+#endif
+};
+
+typedef void (* TIMER_HCI_TIMEOUT_NOTIFY_CALLBACK_TYPE)(void);
+
+/**
+ * Timer_Set
+ *
+ * @param[in] t             Pointer to a timer structure
+ * @param[in] interval      timeout value
+ *
+ * This function sets the timeout value of a timer.
+ *
+ */
+void Timer_Set(struct timer *t, tClockTime interval);
+
+/**
+ * Timer_Reset
+ * 
+ * @param[in] t     Pointer to a timer structure
+ * 
+ * This function resets the timer with the same interval given
+ * with Timer_Set, starting from the time it previously expired.
+ * 
+ */ 
+void Timer_Reset(struct timer *t);
+
+/**
+ * Timer_Restart
+ * 
+ * @param[in]  t   Pointer to a timer structure
+ * 
+ * This function resets the timer with the same interval given
+ * with Timer_Set, starting from the current time.
+ * 
+ */ 
+void Timer_Restart(struct timer *t);
+
+/**
+ * Timer_Expired
+ *
+ * @param[in] t    Pointer to a timer structure
+ *
+ * This function returns TRUE if timer is expired, FALSE otherwise.
+ *
+ */
+int Timer_Expired(struct timer *t);
+
+/**
+ * Timer_Expired
+ *
+ * @param[in] t    Pointer to a timer structure
+ *
+ * This function returns the time needed for expiration.
+ *
+ * @return  Time before timer's expiration.
+ */
+tClockTime Timer_Remaining(struct timer *t);
+
+#ifdef __DMA_LP__
+tBleStatus Blue_NRG_HCI_Timer_Start(uint32_t expiryTime,
+		TIMER_HCI_TIMEOUT_NOTIFY_CALLBACK_TYPE timercb,
+					   uint8_t *timerID);
+
+tBleStatus Blue_NRG_HCI_Timer_Stop(uint8_t timerID);
+#endif /* __DMA_LP__ */
+
+#endif /* __GP_TIMER_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_hal.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,108 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : hal.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : Header file which defines Hardware abstraction layer APIs
+*                       used by the BLE stack. It defines the set of functions
+*                       which needs to be ported to the target platform.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+#ifndef __HAL_H__
+#define __HAL_H__
+
+/******************************************************************************
+ * Includes
+ *****************************************************************************/
+#include <ble_hal_types.h>
+#include <ble_status.h>
+
+
+/******************************************************************************
+ * Macros
+ *****************************************************************************/
+/* Little Endian buffer to host endianess conversion */
+#define LE_TO_HOST_16(ptr)  (uint16_t) ( ((uint16_t) \
+                                           *((uint8_t *)ptr)) | \
+                                          ((uint16_t) \
+                                           *((uint8_t *)ptr + 1) << 8 ) )
+
+#define LE_TO_HOST_32(ptr)   (uint32_t) ( ((uint32_t) \
+                                           *((uint8_t *)ptr)) | \
+                                           ((uint32_t) \
+                                            *((uint8_t *)ptr + 1) << 8)  | \
+                                           ((uint32_t) \
+                                            *((uint8_t *)ptr + 2) << 16) | \
+                                           ((uint32_t) \
+                                            *((uint8_t *)ptr + 3) << 24) )
+
+/* Big Endian buffer to host endianess conversion */
+#define BE_TO_HOST_16(ptr)  (uint16_t) ( ((uint16_t) \
+                                           *((uint8_t *)ptr)) << 8 | \
+                                          ((uint16_t) \
+                                           *((uint8_t *)ptr + 1) ) )
+											
+/* Store Value into a buffer in Little Endian Format */
+#define HOST_TO_LE_16(buf, val)    ( ((buf)[0] =  (uint8_t) (val)    ) , \
+                                   ((buf)[1] =  (uint8_t) (val>>8) ) )
+
+#define HOST_TO_LE_32(buf, val)    ( ((buf)[0] =  (uint8_t) (val)     ) , \
+                                   ((buf)[1] =  (uint8_t) (val>>8)  ) , \
+                                   ((buf)[2] =  (uint8_t) (val>>16) ) , \
+                                   ((buf)[3] =  (uint8_t) (val>>24) ) ) 
+
+
+/* Store Value into a buffer in Big Endian Format */
+#define HOST_TO_BE_16(buf, val)    ( ((buf)[1] =  (uint8_t) (val)    ) , \
+                                   ((buf)[0] =  (uint8_t) (val>>8) ) )
+
+#define DISABLE_INTERRUPTS() __disable_interrupt()
+#define ENABLE_INTERRUPTS() __enable_interrupt()
+#define SAVE_PRIMASK() uint32_t uwPRIMASK_Bit = __get_PRIMASK()
+#define ATOMIC_SECTION_BEGIN() uint32_t uwPRIMASK_Bit = __get_PRIMASK(); \
+                                __disable_interrupt(); \
+/* Must be called in the same or in a lower scope of SUSPEND_INTERRUPTS */
+#define ATOMIC_SECTION_END() __set_PRIMASK(uwPRIMASK_Bit)
+ 
+/******************************************************************************
+ * Types
+ *****************************************************************************/
+
+/******************************************************************************
+ * Function Prototypes
+ *****************************************************************************/
+
+/**
+ * Writes data to a serial interface.
+ *
+ * @param[in]  data1    1st buffer
+ * @param[in]  data2    2nd buffer
+ * @param[in]  n_bytes1 number of bytes in 1st buffer
+ * @param[in]  n_bytes2 number of bytes in 2nd buffer
+ */
+void Hal_Write_Serial(const void* data1, const void* data2, int32_t n_bytes1, int32_t n_bytes2);
+
+/**
+ * Enable interrupts from HCI controller.
+ */
+void Enable_SPI_IRQ(void);
+
+/**
+ * Disable interrupts from BLE controller.
+ */
+void Disable_SPI_IRQ(void);
+
+void signalEventsToProcess(void);
+
+void Hal_Init_Timer(void);
+uint32_t Hal_Get_Timer_Value(void);
+void Hal_Start_Timer(uint32_t timeout);
+void Hal_Stop_Timer(void);
+
+#endif /* __HAL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_hal_types.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,58 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : ble_hal_types.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : This header file defines the basic data types used by the
+*                       BLE stack.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+#ifndef __HAL_TYPES_H__
+#define __HAL_TYPES_H__
+
+#include <stdint.h>
+
+#ifndef NULL
+#define NULL ((void *)0)
+#endif
+
+#ifndef __LITTLE_ENDIAN
+#define __LITTLE_ENDIAN 0
+#define __BIG_ENDIAN    1
+#endif
+
+/* Byte order conversions */
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define htobs(d)  (d)
+#define htobl(d)  (d)
+#define btohs(d)  (d)
+#define btohl(d)  (d)
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define htobs(d)  (d<<8|d>>8)
+#define htobl(d)  (d<<24|((d<<8)&0x00ff0000)|((d>>8)&0x0000ff00)|((d>>24)&0x000000ff))
+#define btohs(d)  (d<<8|d>>8)
+#define btohl(d)  (d<<24|((d<<8)&0x00ff0000)|((d>>8)&0x0000ff00)|((d>>24)&0x000000ff))
+#else
+#error "Unknown byte order"
+#endif
+
+typedef uint8_t BOOL;
+
+#ifndef TRUE 
+#define TRUE (1)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+
+
+#endif /* __HAL_TYPES_H__ */ 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_hci.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,241 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : hci.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : Constants and functions for HCI layer. See Bluetooth Core
+*                      v 4.0, Vol. 2, Part E.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __HCI_H_
+#define __HCI_H_
+
+#include "ble_hal_types.h"
+#include "ble_link_layer.h"
+#include <ble_list.h>
+
+#define HCI_READ_PACKET_SIZE                    128 //71
+
+/*** Data types ***/
+
+/* structure used to read received data */
+typedef struct _tHciDataPacket
+{
+  tListNode currentNode;
+  uint8_t dataBuff[HCI_READ_PACKET_SIZE];
+  uint8_t data_len;
+} tHciDataPacket;
+
+typedef enum
+{
+  BUSY,
+  AVAILABLE
+} HCI_CMD_STATUS_t;
+
+/**
+ * @defgroup HCI_Error_codes HCI Error codes
+ * @{
+ */
+#define HCI_UNKNOWN_COMMAND                     0x01
+#define HCI_NO_CONNECTION                       0x02
+#define HCI_HARDWARE_FAILURE                    0x03
+#define HCI_PAGE_TIMEOUT                        0x04
+#define HCI_AUTHENTICATION_FAILURE              0x05
+#define HCI_PIN_OR_KEY_MISSING                  0x06
+#define HCI_MEMORY_FULL                         0x07
+#define HCI_CONNECTION_TIMEOUT                  0x08
+#define HCI_MAX_NUMBER_OF_CONNECTIONS		0x09
+#define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS	0x0a
+#define HCI_ACL_CONNECTION_EXISTS               0x0b
+#define HCI_COMMAND_DISALLOWED                  0x0c
+#define HCI_REJECTED_LIMITED_RESOURCES          0x0d
+#define HCI_REJECTED_SECURITY                   0x0e
+#define HCI_REJECTED_PERSONAL                   0x0f
+#define HCI_HOST_TIMEOUT                        0x10
+#define HCI_UNSUPPORTED_FEATURE                 0x11
+#define HCI_INVALID_PARAMETERS                  0x12
+#define HCI_OE_USER_ENDED_CONNECTION            0x13
+#define HCI_OE_LOW_RESOURCES                    0x14
+#define HCI_OE_POWER_OFF                        0x15
+#define HCI_CONNECTION_TERMINATED               0x16
+#define HCI_REPEATED_ATTEMPTS                   0x17
+#define HCI_PAIRING_NOT_ALLOWED                 0x18
+#define HCI_UNKNOWN_LMP_PDU                     0x19
+#define HCI_UNSUPPORTED_REMOTE_FEATURE          0x1a
+#define HCI_SCO_OFFSET_REJECTED                 0x1b
+#define HCI_SCO_INTERVAL_REJECTED               0x1c
+#define HCI_AIR_MODE_REJECTED                   0x1d
+#define HCI_INVALID_LMP_PARAMETERS              0x1e
+#define HCI_UNSPECIFIED_ERROR                   0x1f
+#define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE     0x20
+#define HCI_ROLE_CHANGE_NOT_ALLOWED             0x21
+#define HCI_LMP_RESPONSE_TIMEOUT                0x22
+#define HCI_LMP_ERROR_TRANSACTION_COLLISION     0x23
+#define HCI_LMP_PDU_NOT_ALLOWED                 0x24
+#define HCI_ENCRYPTION_MODE_NOT_ACCEPTED        0x25
+#define HCI_UNIT_LINK_KEY_USED                  0x26
+#define HCI_QOS_NOT_SUPPORTED                   0x27
+#define HCI_INSTANT_PASSED                      0x28
+#define HCI_PAIRING_NOT_SUPPORTED               0x29
+#define HCI_TRANSACTION_COLLISION               0x2a
+#define HCI_QOS_UNACCEPTABLE_PARAMETER          0x2c
+#define HCI_QOS_REJECTED                        0x2d
+#define HCI_CLASSIFICATION_NOT_SUPPORTED        0x2e
+#define HCI_INSUFFICIENT_SECURITY               0x2f
+#define HCI_PARAMETER_OUT_OF_RANGE              0x30
+#define HCI_ROLE_SWITCH_PENDING                 0x32
+#define HCI_SLOT_VIOLATION                      0x34
+#define HCI_ROLE_SWITCH_FAILED                  0x35
+#define HCI_EIR_TOO_LARGE                       0x36
+#define HCI_SIMPLE_PAIRING_NOT_SUPPORTED        0x37
+#define HCI_HOST_BUSY_PAIRING                   0x38
+#define HCI_CONN_REJ_NO_CH_FOUND                0x39
+#define HCI_CONTROLLER_BUSY                     0x3A
+#define HCI_UNACCEPTABLE_CONN_INTERV            0x3B
+#define HCI_DIRECTED_ADV_TIMEOUT                0x3C
+#define HCI_CONN_TERM_MIC_FAIL                  0x3D
+#define HCI_CONN_FAIL_TO_BE_ESTABL              0x3E
+#define HCI_MAC_CONN_FAILED                     0x3F
+/**
+ * @}
+ */
+
+
+/*
+ * HCI library functions.
+ * Each function returns 0 in case of success, otherwise one of the error codes.
+ */
+
+int hci_reset(void);
+
+int hci_disconnect(uint16_t handle, uint8_t reason);
+
+int hci_le_set_advertise_enable(uint8_t enable);
+
+int hci_le_set_advertising_parameters(uint16_t min_interval, uint16_t max_interval, uint8_t advtype,
+		uint8_t own_bdaddr_type, uint8_t direct_bdaddr_type, const tBDAddr direct_bdaddr, uint8_t chan_map,
+		uint8_t filter);
+
+int hci_le_set_scan_parameters(uint8_t type, uint16_t interval,
+                               uint16_t window, uint8_t own_bdaddr_type,
+                               uint8_t filter);
+
+int hci_le_set_scan_enable(uint8_t enable, uint8_t filter_dup);
+
+int hci_le_set_advertising_data(uint8_t length, const uint8_t data[]);
+
+int hci_le_set_scan_resp_data(uint8_t length, const uint8_t data[]);
+
+int hci_le_rand(uint8_t random_number[8]);
+
+int hci_le_read_advertising_channel_tx_power(int8_t *tx_power_level);
+
+int hci_acl_data(const uint8_t * data, uint16_t len);
+
+int hci_le_set_random_address(tBDAddr bdaddr);
+
+int hci_read_bd_addr(tBDAddr bdaddr);
+
+int hci_le_read_white_list_size(uint8_t *size);
+
+int hci_le_clear_white_list(void);
+
+int hci_le_add_device_to_white_list(uint8_t bdaddr_type, tBDAddr bdaddr);
+
+int hci_le_remove_device_from_white_list(uint8_t bdaddr_type, tBDAddr bdaddr);
+
+int hci_le_encrypt(uint8_t key[16], uint8_t plaintextData[16], uint8_t encryptedData[16]);
+
+int hci_le_ltk_request_reply(uint8_t key[16]);
+
+int hci_le_ltk_request_neg_reply(void);
+
+int hci_le_read_buffer_size(uint16_t *pkt_len, uint8_t *max_pkt);
+
+int hci_le_create_connection(uint16_t interval,	uint16_t window, uint8_t initiator_filter, uint8_t peer_bdaddr_type,
+                             const tBDAddr peer_bdaddr,	uint8_t	own_bdaddr_type, uint16_t min_interval,	uint16_t max_interval,
+                             uint16_t latency, uint16_t supervision_timeout, uint16_t min_ce_length, uint16_t max_ce_length);
+
+int hci_le_create_connection_cancel(void);
+
+int hci_read_transmit_power_level(uint16_t *conn_handle, uint8_t type, int8_t *tx_level);
+
+int hci_read_rssi(uint16_t *conn_handle, int8_t *rssi);
+
+int hci_le_read_local_supported_features(uint8_t *features);
+
+int hci_le_read_channel_map(uint16_t conn_handle, uint8_t ch_map[5]);
+
+int hci_le_read_supported_states(uint8_t states[8]);
+
+int hci_le_receiver_test(uint8_t frequency);
+
+int hci_le_transmitter_test(uint8_t frequency, uint8_t length, uint8_t payload);
+
+int hci_le_test_end(uint16_t *num_pkts);
+
+int hci_le_read_local_version(uint8_t *hci_version, uint16_t *hci_revision, uint8_t *lmp_pal_version, 
+			      uint16_t *manufacturer_name, uint16_t *lmp_pal_subversion);
+
+/**
+ * This function must be used to pass the packet received from the HCI
+ * interface to the BLE Stack HCI state machine.
+ *
+ * @param[in] hciReadPacket    The packet that is received from HCI interface.
+ *
+ */
+void HCI_Input(tHciDataPacket *hciReadPacket);
+
+/**
+ * Initialization function. Must be done before any data can be received from
+ * BLE controller.
+ */
+void HCI_Init(void);
+
+/**
+ * Callback used to pass events to application.
+ *
+ * @param[in] pckt    The event.
+ *
+ */
+extern void HCI_Event_CB(void *pckt);
+
+/**
+ * Processing function that must be called after an event is received from
+ * HCI interface. Must be called outside ISR. It will call HCI_Event_CB if
+ * necessary.
+*/
+void HCI_Process(void);
+
+/**
+ * @brief Check if queue of HCI event is empty or not.
+ * @note This funtion can be used to check if the event queue from BlueNRG is empty. This
+ *        is useful when checking if it is safe to go to sleep. 
+ * @return TRUE if event queue is empty. FALSE otherwhise.
+ */
+BOOL HCI_Queue_Empty(void);
+/**
+ * Iterrupt service routine that must be called when the BlueNRG 
+ * reports a packet received or an event to the host through the 
+ * BlueNRG interrupt line.
+ */
+#ifdef __DMA_LP__
+void HCI_Isr(uint8_t *buffer, uint8_t event_payload_len);
+void HCI_Process_Notification_Request(void);
+void HCI_Cmd_Status(HCI_CMD_STATUS_t Hci_Cmd_Status);
+void HCI_Wait_For_Response(void);
+#else
+void HCI_Isr(void);
+#endif /* __DMA_LP__ */
+
+extern tListNode hciReadPktPool;
+extern tListNode hciReadPktRxQueue;
+
+#endif /* __HCI_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_hci_const.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,563 @@
+/******************************************************************************
+*
+*  File Description 
+*  ---------------------
+* This file defines constants and functions for HCI layer.
+* See Bluetooth Core v 4.0, Vol. 2, Part E.
+* 
+*******************************************************************************/
+
+#ifndef __HCI_INTERNAL_H_
+#define __HCI_INTERNAL_H_
+
+#include "ble_compiler.h"
+#include "ble_hal_types.h"
+#include "ble_clock.h"
+#include "ble_link_layer.h"
+#include "ble_hci.h"
+
+#define DEFAULT_TIMEOUT (CLOCK_SECOND/10)
+
+/**
+ * Maximum payload of HCI commands that can be sent. Change this value if needed.
+ * This value can be up to 255.
+ */
+#define HCI_MAX_PAYLOAD_SIZE 128
+
+/* HCI Packet types */
+#define HCI_COMMAND_PKT		0x01
+#define HCI_ACLDATA_PKT		0x02
+#define HCI_SCODATA_PKT		0x03
+#define HCI_EVENT_PKT		0x04
+#define HCI_VENDOR_PKT		0xff
+
+typedef __packed struct _hci_uart_pckt{
+  uint8_t type;
+  uint8_t data[VARIABLE_SIZE];
+} PACKED hci_uart_pckt;
+#define HCI_HDR_SIZE 1
+
+typedef __packed struct _hci_command_hdr{
+  uint16_t opcode;		/* OCF & OGF */
+  uint8_t  plen;
+} PACKED hci_command_hdr;
+#define HCI_COMMAND_HDR_SIZE 	3
+
+typedef __packed struct _hci_event_pckt{
+  uint8_t evt;
+  uint8_t plen;
+  uint8_t data[VARIABLE_SIZE];
+} PACKED hci_event_pckt;
+#define HCI_EVENT_HDR_SIZE 	2
+
+typedef __packed struct _hci_acl_hdr{
+  uint16_t handle;		/* Handle & Flags(PB, BC) */
+  uint16_t dlen;
+} PACKED hci_acl_hdr;
+#define HCI_ACL_HDR_SIZE 	4
+
+/* Link Control */
+#define OGF_LINK_CTL	        0x01
+
+#define OCF_DISCONNECT          0x0006
+typedef __packed struct _disconnect_cp{
+  uint16_t handle;
+  uint8_t  reason;
+} PACKED disconnect_cp;
+#define DISCONNECT_CP_SIZE      3
+
+/* Host Controller and Baseband */
+#define OGF_HOST_CTL            0x03
+
+#define OCF_SET_EVENT_MASK      0x0001
+#define OCF_RESET               0x0003
+
+#define OCF_READ_TRANSMIT_POWER_LEVEL	0x002D
+typedef __packed struct _read_transmit_power_level_cp{
+  uint16_t handle;
+  uint8_t  type;
+} PACKED read_transmit_power_level_cp;
+#define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3
+typedef __packed struct _read_transmit_power_level_rp{
+  uint8_t  status;
+  uint16_t handle;
+  int8_t   level;
+} PACKED read_transmit_power_level_rp;
+#define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4
+
+#define OCF_SET_CONTROLLER_TO_HOST_FC   0x0031
+#define OCF_HOST_BUFFER_SIZE            0x0033
+#define OCF_HOST_NUM_COMP_PKTS          0x0035
+
+/* Informational Parameters */
+#define OGF_INFO_PARAM                  0x04
+
+#define OCF_READ_LOCAL_VERSION          0x0001
+typedef __packed struct _read_local_version_rp{
+  uint8_t  status;
+  uint8_t  hci_version;
+  uint16_t hci_revision;
+  uint8_t  lmp_pal_version;
+  uint16_t manufacturer_name;
+  uint16_t lmp_pal_subversion;
+} PACKED read_local_version_rp;
+#define READ_LOCAL_VERSION_RP_SIZE      9
+
+#define OCF_READ_LOCAL_COMMANDS         0x0002
+#define OCF_READ_LOCAL_FEATURES         0x0003
+
+#define OCF_READ_BD_ADDR                0x0009
+typedef __packed struct _read_bd_addr_rp{
+  uint8_t status;
+  tBDAddr bdaddr;
+} PACKED read_bd_addr_rp;
+#define READ_BD_ADDR_RP_SIZE            7
+
+/* Status params */
+#define OGF_STATUS_PARAM                0x05
+
+#define OCF_READ_RSSI                   0x0005
+typedef __packed struct _read_rssi_cp{
+  uint16_t handle;
+} PACKED read_rssi_cp;
+#define READ_RSSI_CP_SIZE               2
+typedef __packed struct _read_rssi_rp{
+  uint8_t  status;
+  uint16_t handle;
+  int8_t   rssi;
+} PACKED read_rssi_rp;
+#define READ_RSSI_RP_SIZE               4
+
+
+/* LE commands */
+#define OGF_LE_CTL                      0x08
+
+#define OCF_LE_SET_EVENT_MASK           0x0001
+typedef __packed struct _le_set_event_mask_cp{
+  uint8_t mask[8];
+} PACKED le_set_event_mask_cp;
+#define LE_SET_EVENT_MASK_CP_SIZE       8
+
+#define OCF_LE_READ_BUFFER_SIZE         0x0002
+typedef __packed struct _le_read_buffer_size_rp{
+  uint8_t  status;
+  uint16_t pkt_len;
+  uint8_t  max_pkt;
+} PACKED le_read_buffer_size_rp;
+#define LE_READ_BUFFER_SIZE_RP_SIZE     4
+
+#define OCF_LE_READ_LOCAL_SUPPORTED_FEATURES	0x0003
+typedef __packed struct _le_read_local_supported_features_rp{
+  uint8_t status;
+  uint8_t features[8];
+} PACKED le_read_local_supported_features_rp;
+#define LE_READ_LOCAL_SUPPORTED_FEATURES_RP_SIZE 9
+
+#define OCF_LE_SET_RANDOM_ADDRESS		0x0005
+typedef __packed struct _le_set_random_address_cp{
+  tBDAddr bdaddr;
+} PACKED le_set_random_address_cp;
+#define LE_SET_RANDOM_ADDRESS_CP_SIZE 6
+
+#define OCF_LE_SET_ADV_PARAMETERS	0x0006
+typedef __packed struct _le_set_adv_parameters_cp{
+  uint16_t min_interval;
+  uint16_t max_interval;
+  uint8_t  advtype;
+  uint8_t  own_bdaddr_type;
+  uint8_t  direct_bdaddr_type;
+  tBDAddr  direct_bdaddr;
+  uint8_t  chan_map;
+  uint8_t  filter;
+} PACKED le_set_adv_parameters_cp;
+#define LE_SET_ADV_PARAMETERS_CP_SIZE 15
+
+#define OCF_LE_READ_ADV_CHANNEL_TX_POWER	0x0007
+typedef __packed struct _le_read_adv_channel_tx_power_rp{
+  uint8_t status;
+  int8_t  level;
+} PACKED le_read_adv_channel_tx_power_rp;
+#define LE_READ_ADV_CHANNEL_TX_POWER_RP_SIZE 2
+
+#define OCF_LE_SET_ADV_DATA		0x0008
+typedef __packed struct _le_set_adv_data_cp{
+  uint8_t length;
+  uint8_t data[31];
+} PACKED le_set_adv_data_cp;
+#define LE_SET_ADV_DATA_CP_SIZE 32
+
+#define OCF_LE_SET_SCAN_RESPONSE_DATA		0x0009
+typedef __packed struct _le_set_scan_response_data_cp{
+  uint8_t length;
+  uint8_t data[31];
+} PACKED le_set_scan_response_data_cp;
+#define LE_SET_SCAN_RESPONSE_DATA_CP_SIZE 32
+
+#define OCF_LE_SET_ADVERTISE_ENABLE		0x000A
+typedef __packed struct _le_set_advertise_enable_cp{
+  uint8_t enable;
+} PACKED le_set_advertise_enable_cp;
+#define LE_SET_ADVERTISE_ENABLE_CP_SIZE 1
+
+#define OCF_LE_SET_SCAN_PARAMETERS		0x000B
+typedef __packed struct _le_set_scan_parameters_cp{
+  uint8_t  type;
+  uint16_t interval;
+  uint16_t window;
+  uint8_t  own_bdaddr_type;
+  uint8_t  filter;
+} PACKED le_set_scan_parameters_cp;
+#define LE_SET_SCAN_PARAMETERS_CP_SIZE 7
+
+#define OCF_LE_SET_SCAN_ENABLE			0x000C
+typedef __packed struct _le_set_scan_enable_cp{
+  uint8_t enable;
+  uint8_t filter_dup;
+} PACKED le_set_scan_enable_cp;
+#define LE_SET_SCAN_ENABLE_CP_SIZE 2
+
+#define OCF_LE_CREATE_CONN			0x000D
+typedef __packed struct _le_create_connection_cp{
+  uint16_t interval;
+  uint16_t window;
+  uint8_t  initiator_filter;
+  uint8_t  peer_bdaddr_type;
+  tBDAddr  peer_bdaddr;
+  uint8_t  own_bdaddr_type;
+  uint16_t min_interval;
+  uint16_t max_interval;
+  uint16_t latency;
+  uint16_t supervision_timeout;
+  uint16_t min_ce_length;
+  uint16_t max_ce_length;
+} PACKED le_create_connection_cp;
+#define LE_CREATE_CONN_CP_SIZE 25
+
+#define OCF_LE_CREATE_CONN_CANCEL		0x000E
+
+#define OCF_LE_READ_WHITE_LIST_SIZE		0x000F
+typedef __packed struct _le_read_white_list_size_rp{
+  uint8_t status;
+  uint8_t size;
+} PACKED le_read_white_list_size_rp;
+#define LE_READ_WHITE_LIST_SIZE_RP_SIZE 2
+
+#define OCF_LE_CLEAR_WHITE_LIST			0x0010
+
+#define OCF_LE_ADD_DEVICE_TO_WHITE_LIST		0x0011
+typedef __packed struct _le_add_device_to_white_list_cp{
+  uint8_t bdaddr_type;
+  tBDAddr bdaddr;
+} PACKED le_add_device_to_white_list_cp;
+#define LE_ADD_DEVICE_TO_WHITE_LIST_CP_SIZE 7
+
+#define OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST	0x0012
+typedef __packed struct _le_remove_device_from_white_list_cp{
+  uint8_t bdaddr_type;
+  tBDAddr bdaddr;
+} PACKED le_remove_device_from_white_list_cp;
+#define LE_REMOVE_DEVICE_FROM_WHITE_LIST_CP_SIZE 7
+
+#define OCF_LE_CONN_UPDATE			0x0013
+typedef __packed struct _le_connection_update_cp{
+  uint16_t handle;
+  uint16_t min_interval;
+  uint16_t max_interval;
+  uint16_t latency;
+  uint16_t supervision_timeout;
+  uint16_t min_ce_length;
+  uint16_t max_ce_length;
+} PACKED le_connection_update_cp;
+#define LE_CONN_UPDATE_CP_SIZE 14
+
+#define OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION	0x0014
+typedef __packed struct _le_set_host_channel_classification_cp{
+  uint8_t map[5];
+} PACKED le_set_host_channel_classification_cp;
+#define LE_SET_HOST_CHANNEL_CLASSIFICATION_CP_SIZE 5
+
+#define OCF_LE_READ_CHANNEL_MAP			0x0015
+typedef __packed struct _le_read_channel_map_cp{
+  uint16_t handle;
+} PACKED le_read_channel_map_cp;
+#define LE_READ_CHANNEL_MAP_CP_SIZE 2
+
+typedef __packed struct _le_read_channel_map_rp{
+  uint8_t  status;
+  uint16_t handle;
+  uint8_t  map[5];
+} PACKED le_read_channel_map_rp;
+#define LE_READ_CHANNEL_MAP_RP_SIZE 8
+
+#define OCF_LE_READ_REMOTE_USED_FEATURES	0x0016
+typedef __packed struct _le_read_remote_used_features_cp{
+  uint16_t handle;
+} PACKED le_read_remote_used_features_cp;
+#define LE_READ_REMOTE_USED_FEATURES_CP_SIZE 2
+
+#define OCF_LE_ENCRYPT				0x0017
+typedef __packed struct _le_encrypt_cp{
+  uint8_t key[16];
+  uint8_t plaintext[16];
+} PACKED le_encrypt_cp;
+#define LE_ENCRYPT_CP_SIZE 32
+
+typedef __packed struct _le_encrypt_rp{
+  uint8_t status;
+  uint8_t encdata[16];
+} PACKED le_encrypt_rp;
+#define LE_ENCRYPT_RP_SIZE 17
+
+#define OCF_LE_RAND				0x0018
+typedef __packed struct _le_rand_rp{
+  uint8_t status;
+  uint8_t random[8];
+} PACKED le_rand_rp;
+#define LE_RAND_RP_SIZE 9
+
+#define OCF_LE_START_ENCRYPTION			0x0019
+typedef __packed struct _le_start_encryption_cp{
+  uint16_t handle;
+  uint8_t  random[8];
+  uint16_t diversifier;
+  uint8_t  key[16];
+} PACKED le_start_encryption_cp;
+#define LE_START_ENCRYPTION_CP_SIZE 28
+
+#define OCF_LE_LTK_REPLY			0x001A
+typedef __packed struct _le_ltk_reply_cp{
+  uint16_t handle;
+  uint8_t  key[16];
+} PACKED le_ltk_reply_cp;
+#define LE_LTK_REPLY_CP_SIZE 18
+
+typedef __packed struct _le_ltk_reply_rp{
+  uint8_t  status;
+  uint16_t handle;
+} PACKED le_ltk_reply_rp;
+#define LE_LTK_REPLY_RP_SIZE 3
+
+#define OCF_LE_LTK_NEG_REPLY			0x001B
+typedef __packed struct _le_ltk_neg_reply_cp{
+  uint16_t handle;
+} PACKED le_ltk_neg_reply_cp;
+#define LE_LTK_NEG_REPLY_CP_SIZE 2
+
+typedef __packed struct _le_ltk_neg_reply_rp{
+  uint8_t  status;
+  uint16_t handle;
+} PACKED le_ltk_neg_reply_rp;
+#define LE_LTK_NEG_REPLY_RP_SIZE 3
+
+#define OCF_LE_READ_SUPPORTED_STATES		0x001C
+typedef __packed struct _le_read_supported_states_rp{
+  uint8_t status;
+  uint8_t states[8];
+} PACKED le_read_supported_states_rp;
+#define LE_READ_SUPPORTED_STATES_RP_SIZE 9
+
+#define OCF_LE_RECEIVER_TEST			0x001D
+typedef __packed struct _le_receiver_test_cp{
+  uint8_t frequency;
+} PACKED le_receiver_test_cp;
+#define LE_RECEIVER_TEST_CP_SIZE 1
+
+#define OCF_LE_TRANSMITTER_TEST			0x001E
+typedef __packed struct _le_transmitter_test_cp{
+  uint8_t frequency;
+  uint8_t length;
+  uint8_t payload;
+} PACKED le_transmitter_test_cp;
+#define LE_TRANSMITTER_TEST_CP_SIZE 3
+
+#define OCF_LE_TEST_END				0x001F
+typedef __packed struct _le_test_end_rp{
+  uint8_t  status;
+  uint16_t num_pkts;
+} PACKED le_test_end_rp;
+#define LE_TEST_END_RP_SIZE 3
+
+/* Vendor specific commands */
+#define OGF_VENDOR_CMD		0x3f
+
+
+/*------------- Events -------------*/
+#define EVT_CONN_COMPLETE		0x03
+typedef __packed struct _evt_conn_complete{
+  uint8_t  status;
+  uint16_t handle;
+  tBDAddr  bdaddr;
+  uint8_t  link_type;
+  uint8_t  encr_mode;
+} PACKED evt_conn_complete;
+#define EVT_CONN_COMPLETE_SIZE 13
+
+#define EVT_DISCONN_COMPLETE		0x05
+typedef __packed struct _evt_disconn_complete{
+  uint8_t  status;
+  uint16_t handle;
+  uint8_t  reason;
+} PACKED evt_disconn_complete;
+#define EVT_DISCONN_COMPLETE_SIZE 4
+
+#define EVT_ENCRYPT_CHANGE		0x08
+typedef __packed struct _evt_encrypt_change{
+  uint8_t  status;
+  uint16_t handle;
+  uint8_t  encrypt;
+} PACKED evt_encrypt_change;
+#define EVT_ENCRYPT_CHANGE_SIZE 5
+
+#define EVT_READ_REMOTE_VERSION_COMPLETE	0x0C
+
+#define EVT_CMD_COMPLETE 		0x0E
+typedef __packed struct _evt_cmd_complete{
+  uint8_t  ncmd;
+  uint16_t opcode;
+} PACKED evt_cmd_complete;
+#define EVT_CMD_COMPLETE_SIZE 3
+
+#define EVT_CMD_STATUS 			0x0F
+typedef __packed struct _evt_cmd_status{
+  uint8_t  status;
+  uint8_t  ncmd;
+  uint16_t opcode;
+} PACKED evt_cmd_status;
+#define EVT_CMD_STATUS_SIZE 4
+
+#define EVT_HARDWARE_ERROR		0x10
+typedef __packed struct _evt_hardware_error{
+  uint8_t code;
+} PACKED evt_hardware_error;
+#define EVT_HARDWARE_ERROR_SIZE 1
+
+#define EVT_NUM_COMP_PKTS		0x13
+typedef __packed struct _evt_num_comp_pkts{
+  uint8_t num_hndl;
+  /* variable length part */
+} PACKED evt_num_comp_pkts;
+#define EVT_NUM_COMP_PKTS_SIZE 1
+
+/* variable length part of evt_num_comp_pkts. */
+typedef __packed struct _evt_num_comp_pkts_param{
+  uint16_t hndl;
+  uint16_t num_comp_pkts;
+} PACKED evt_num_comp_pkts_param;
+#define EVT_NUM_COMP_PKTS_PARAM_SIZE 1
+
+#define EVT_DATA_BUFFER_OVERFLOW		0x1A
+typedef __packed struct _evt_data_buffer_overflow{
+  uint8_t link_type;
+} PACKED evt_data_buffer_overflow;
+#define EVT_DATA_BUFFER_OVERFLOW_SIZE 1
+
+#define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE	0x30
+typedef __packed struct _evt_encryption_key_refresh_complete{
+  uint8_t  status;
+  uint16_t handle;
+} PACKED evt_encryption_key_refresh_complete;
+#define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_SIZE 3
+
+#define EVT_LE_META_EVENT	0x3E
+typedef __packed struct _evt_le_meta_event{
+  uint8_t subevent;
+  uint8_t data[VARIABLE_SIZE];
+} PACKED evt_le_meta_event;
+#define EVT_LE_META_EVENT_SIZE 1
+
+#define EVT_LE_CONN_COMPLETE	0x01
+typedef __packed struct _evt_le_connection_complete{
+  uint8_t  status;
+  uint16_t handle;
+  uint8_t  role;
+  uint8_t  peer_bdaddr_type;
+  tBDAddr  peer_bdaddr;
+  uint16_t interval;
+  uint16_t latency;
+  uint16_t supervision_timeout;
+  uint8_t  master_clock_accuracy;
+} PACKED evt_le_connection_complete;
+#define EVT_LE_CONN_COMPLETE_SIZE 18
+
+#define EVT_LE_ADVERTISING_REPORT	0x02
+typedef __packed struct _le_advertising_info{
+  uint8_t evt_type;
+  uint8_t bdaddr_type;
+  tBDAddr bdaddr;
+  uint8_t data_length;
+  uint8_t data_RSSI[VARIABLE_SIZE]; // RSSI is last octect (signed integer).
+} PACKED le_advertising_info;
+#define LE_ADVERTISING_INFO_SIZE 9
+
+#define EVT_LE_CONN_UPDATE_COMPLETE	0x03
+typedef __packed struct _evt_le_connection_update_complete{
+  uint8_t  status;
+  uint16_t handle;
+  uint16_t interval;
+  uint16_t latency;
+  uint16_t supervision_timeout;
+} PACKED evt_le_connection_update_complete;
+#define EVT_LE_CONN_UPDATE_COMPLETE_SIZE 9
+
+#define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE	0x04
+typedef __packed struct _evt_le_read_remote_used_features_complete{
+  uint8_t  status;
+  uint16_t handle;
+  uint8_t  features[8];
+} PACKED evt_le_read_remote_used_features_complete;
+#define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE_SIZE 11
+
+#define EVT_LE_LTK_REQUEST	0x05
+typedef __packed struct _evt_le_long_term_key_request{
+  uint16_t handle;
+  uint8_t  random[8];
+  uint16_t ediv;
+} PACKED evt_le_long_term_key_request;
+#define EVT_LE_LTK_REQUEST_SIZE 12
+
+/**
+* The event code in the @ref hci_event_pckt structure. If event code is EVT_VENDOR,
+* application can use @ref evt_blue_aci structure to parse the packet.
+*/
+#define EVT_VENDOR	0xFF
+
+
+/* Command opcode pack/unpack */
+#define cmd_opcode_pack(ogf, ocf)	(uint16_t)((ocf & 0x03ff)|(ogf << 10))
+#define cmd_opcode_ogf(op)		(op >> 10)
+#define cmd_opcode_ocf(op)		(op & 0x03ff)
+
+
+struct hci_request {
+  uint16_t ogf;
+  uint16_t ocf;
+  int      event;
+  void     *cparam;
+  int      clen;
+  void     *rparam;
+  int      rlen;
+};
+
+void hci_send_cmd(uint16_t ogf, uint16_t ocf, uint8_t plen, void *param);
+
+typedef enum {
+  WAITING_TYPE,
+  WAITING_OPCODE1,
+  WAITING_OPCODE2,
+  WAITING_EVENT_CODE,
+  WAITING_HANDLE,
+  WAITING_HANDLE_FLAG,
+  WAITING_PARAM_LEN,
+  WAITING_DATA_LEN1,
+  WAITING_DATA_LEN2,
+  WAITING_PAYLOAD
+}hci_state;
+
+typedef void (*hci_packet_complete_callback)(void *pckt, uint16_t len);
+
+/* HCI library functions. */
+void hci_init(void);
+
+int hci_send_req(struct hci_request *r, BOOL async);
+
+#endif /* __HCI_INTERNAL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_link_layer.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,161 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : link_layer.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : Header file for BlueNRG's link layer. It contains
+*                      definition of functions for link layer, most of which are
+*                      mapped to HCI commands.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef _LINK_LAYER_H
+#define _LINK_LAYER_H
+
+#include <ble_status.h>
+
+/**
+ *@addtogroup GAP GAP
+ *@brief API for GAP layer.
+ *@{
+ */
+
+/**
+ *@name Advertising filter 
+ *Advertising policy for filtering (white list related) 
+ *@{
+ */
+#define NO_WHITE_LIST_USE           (0x00)  /**< Process scan and connection requests from all devices (i.e., the White List is not in use) */
+#define WHITE_LIST_FOR_ONLY_SCAN    (0x01)  /**< Process connection requests from all devices and only scan requests from devices that are in the White List */
+#define WHITE_LIST_FOR_ONLY_CONN    (0x02)  /**< Process scan requests from all devices and only connection requests from devices that are in the White List */
+#define WHITE_LIST_FOR_ALL          (0x03)  /**< Process scan and connection requests only from devices in the White List. */
+/**
+ * @}
+ */
+
+
+/**
+ * Bluetooth 48 bit address (in little-endian order).
+ */
+typedef	uint8_t	tBDAddr[6];
+
+
+/**
+ *@name Bluetooth address types
+ * Bluetooth address types
+ *@{
+ */
+#define PUBLIC_ADDR                 (0)
+#define RANDOM_ADDR                 (1)
+#define STATIC_RANDOM_ADDR          (1)
+#define RESOLVABLE_PRIVATE_ADDR     (2)
+#define NON_RESOLVABLE_PRIVATE_ADDR (3)
+/**
+ * @}
+ */
+   
+/**
+ *@name Directed advertising types
+ * Type of advertising during directed advertising
+ *@{
+ */
+#define HIGH_DUTY_CYCLE_DIRECTED_ADV   (1)
+#define LOW_DUTY_CYCLE_DIRECTED_ADV    (4)
+/**
+ * @}
+ */
+
+/** 
+ * @name Advertising type
+ * @{
+ */
+
+/**
+ * undirected scannable and connectable 
+ */ 
+#define ADV_IND         (0x00)
+
+/** 
+ * directed non scannable
+ */
+#define ADV_DIRECT_IND  (0x01)
+
+/**
+ * scannable non connectable
+ */
+#define ADV_SCAN_IND    (0x02)
+
+/**
+ * non-connectable and no scan response (used for passive scan)
+ */
+#define ADV_NONCONN_IND (0x03)
+
+/**
+ * scan response 
+ */
+#define SCAN_RSP        (0x04)
+
+/**
+ * @}
+ */
+
+/* 0X05-0XFF RESERVED */
+
+/**
+ * @name Advertising ranges
+ * @{
+ */
+
+/** 
+ * lowest allowed interval value for connectable types(20ms)..multiple of 625us
+ */
+#define ADV_INTERVAL_LOWEST_CONN    (0X0020)
+
+/** 
+ * highest allowed interval value (10.24s)..multiple of 625us.
+ */
+#define ADV_INTERVAL_HIGHEST        (0X4000)
+
+/** 
+ * lowest allowed interval value for non connectable types
+ * (100ms)..multiple of 625us.
+ */
+#define ADV_INTERVAL_LOWEST_NONCONN (0X00a0)
+
+/**
+ * @}
+ */
+
+/**
+ * @name Advertising channels
+ * @{
+ */
+#define ADV_CH_37 0x01
+#define ADV_CH_38 0x02
+#define ADV_CH_39 0x04
+/**
+ * @}
+ */
+
+/**
+ * @name Scan_types Scan types
+ * @{
+ */
+#define PASSIVE_SCAN    0
+#define ACTIVE_SCAN     1
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+
+#endif /* _LINK_LAYER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_list.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,47 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : list.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : Header file for linked list library.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+#ifndef _LIST_H_
+#define _LIST_H_
+
+typedef struct _tListNode {
+	struct _tListNode * next;
+	struct _tListNode * prev;
+}tListNode, *pListNode;
+
+void list_init_head (tListNode * listHead);
+
+uint8_t list_is_empty (tListNode * listHead);
+
+void list_insert_head (tListNode * listHead, tListNode * node);
+
+void list_insert_tail (tListNode * listHead, tListNode * node);
+
+void list_remove_node (tListNode * node);
+
+void list_remove_head (tListNode * listHead, tListNode ** node );
+
+void list_remove_tail (tListNode * listHead, tListNode ** node );
+
+void list_insert_node_after (tListNode * node, tListNode * ref_node);
+
+void list_insert_node_before (tListNode * node, tListNode * ref_node);
+
+int list_get_size (tListNode * listHead);
+
+void list_get_next_node (tListNode * ref_node, tListNode ** node);
+
+void list_get_prev_node (tListNode * ref_node, tListNode ** node);
+
+#endif /* _LIST_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_osal.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,81 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : ble_osal.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : This header file defines the OS abstraction layer used by
+*                      the BLE stack. OSAL defines the set of functions
+*                      which needs to be ported to target operating system and
+*                      target platform.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __OSAL_H__
+#define __OSAL_H__
+
+/******************************************************************************
+ * Includes
+ *****************************************************************************/
+#include <ble_hal_types.h>
+#ifdef __ICCARM__
+#include <intrinsics.h>
+#endif
+
+/******************************************************************************
+ * Macros
+ *****************************************************************************/
+
+
+/******************************************************************************
+ * Function Prototypes
+ *****************************************************************************/
+
+/**
+ * This function copies size number of bytes from a 
+ * memory location pointed by src to a destination 
+ * memory location pointed by dest
+ * 
+ * @param[in] dest Destination address
+ * @param[in] src  Source address
+ * @param[in] size size in the bytes  
+ * 
+ * @return  Address of the destination
+ */
+ 
+extern void* Osal_MemCpy(void *dest,const void *src, unsigned int size);
+
+
+/**
+ * This function sets first number of bytes, specified
+ * by size, to the destination memory pointed by ptr 
+ * to the specified value
+ * 
+ * @param[in] ptr    Destination address
+ * @param[in] value  Value to be set
+ * @param[in] size   Size in the bytes  
+ * 
+ * @return  Address of the destination
+ */
+ 
+extern void* Osal_MemSet(void *ptr, int value, unsigned int size);
+
+/**
+ * Osal_Get_Cur_Time
+ * 
+ * returns the current time in milliseconds
+ */
+/**
+ * Returns the number of ticks (1 tick = 1 millisecond)
+ * 
+ * @return  Time in milliseconds
+ */
+uint32_t Osal_Get_Cur_Time(void);
+
+
+#endif /* __OSAL_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_sm.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,158 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : sm.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : Header file for BlueNRG's security manager.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __SM_H__
+#define __SM_H__
+
+/******************************************************************************
+* Macros
+*****************************************************************************/
+
+/**
+ *@addtogroup GAP GAP
+ *@brief API for GAP layer.
+ *@{
+ */
+
+/* IO capabilities */
+/**
+ * @anchor IO_capabilities
+ * @name IO capabilities
+ * @{
+ */
+#define IO_CAP_DISPLAY_ONLY				(0x00)
+#define IO_CAP_DISPLAY_YES_NO			(0x01)
+#define IO_CAP_KEYBOARD_ONLY			(0x02)
+#define IO_CAP_NO_INPUT_NO_OUTPUT		(0x03)
+#define IO_CAP_KEYBOARD_DISPLAY			(0x04)
+/**
+ * @}
+ */
+
+/**
+ * @anchor Auth_req
+ * @name Authentication requirements
+ * @{
+ */
+#define BONDING				            (0x01)
+#define NO_BONDING				        (0x00)
+/**
+ * @}
+ */
+
+/**
+ * @anchor MITM_req
+ * @name MITM protection requirements
+ * @{
+ */
+#define MITM_PROTECTION_NOT_REQUIRED	(0x00)
+#define MITM_PROTECTION_REQUIRED        (0x01)
+/**
+ * @}
+ */
+
+/**
+ * @anchor OOB_Data
+ * @name Out-Of-Band data
+ * @{
+ */
+#define OOB_AUTH_DATA_ABSENT		    (0x00)
+#define OOB_AUTH_DATA_PRESENT      		(0x01)
+/**
+ * @}
+ */
+
+/**
+ * @anchor Author_req
+ * @name Authorization requirements
+ * @{
+ */
+#define AUTHORIZATION_NOT_REQUIRED	     (0x00)
+#define AUTHORIZATION_REQUIRED			 (0x01)
+/**
+ * @}
+ */
+
+/**
+ * @anchor Conn_authorization
+ * @name Connection authorization
+ * @{
+ */
+#define CONNECTION_AUTHORIZED			(0x01)
+#define CONNECTION_REJECTED				(0x02)
+/**
+ * @}
+ */
+
+/**
+ * @anchor Use_fixed_pin
+ * @name Use fixed pin
+ * @{
+ */
+#define USE_FIXED_PIN_FOR_PAIRING		(0x0)
+#define DONOT_USE_FIXED_PIN_FOR_PAIRING	(0x01)
+/**
+ * @}
+ */
+
+/**
+ * @anchor link_security_status
+ * @name Link security status
+ * @{
+ */
+#define SM_LINK_AUTHENTICATED               (0x01)
+#define SM_LINK_AUTHORIZED                  (0x02)
+#define SM_LINK_ENCRYPTED                   (0x04)
+/**
+ * @}
+ */
+
+/**
+ * @anchor SMP_pairing_failed_codes
+ * @name SMP pairing failed reason codes
+ * @{
+ */
+#define PASSKEY_ENTRY_FAILED			(0x01)
+#define OOB_NOT_AVAILABLE				(0x02)
+#define AUTH_REQ_CANNOT_BE_MET			(0x03)
+#define CONFIRM_VALUE_FAILED			(0x04)
+#define PAIRING_NOT_SUPPORTED			(0x05)
+#define INSUFF_ENCRYPTION_KEY_SIZE		(0x06)
+#define CMD_NOT_SUPPORTED				(0x07)
+#define UNSPECIFIED_REASON				(0x08)
+#define VERY_EARLY_NEXT_ATTEMPT			(0x09)
+#define SM_INVALID_PARAMS				(0x0A)
+/**
+ * @}
+ */
+
+/**
+ * @anchor pairing_failed_codes
+ * @name Pairing failed error codes
+ * Error codes in @ref EVT_BLUE_GAP_PAIRING_CMPLT event
+ * @{
+ */
+#define SM_PAIRING_SUCCESS              (0x00)
+#define SM_PAIRING_TIMEOUT              (0x01)
+#define SM_PAIRING_FAILED               (0x02)
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#endif /* __SM_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/ble_status.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,115 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : ble_status.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : Header file with BLE Stack status codes.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+#ifndef __BLE_STATUS_H__
+#define __BLE_STATUS_H__
+
+#include <ble_hal_types.h>
+
+
+/** @defgroup ble_status Bluetooth Status/Error Codes
+ * @{
+ */
+ 
+typedef uint8_t tBleStatus; 
+
+/* Error Codes as specified by the specification 
+ * according to the spec the error codes range
+ * from 0x00 to 0x3F 
+ */
+#define ERR_CMD_SUCCESS         	                (0x00)
+#define BLE_STATUS_SUCCESS            		        (0x00)
+#define ERR_UNKNOWN_HCI_COMMAND	                    (0x01)
+#define ERR_UNKNOWN_CONN_IDENTIFIER	                (0x02)
+
+#define ERR_AUTH_FAILURE                            (0x05)
+#define ERR_PIN_OR_KEY_MISSING                      (0x06)
+#define ERR_MEM_CAPACITY_EXCEEDED                   (0x07)
+#define ERR_CONNECTION_TIMEOUT                      (0x08)
+
+#define ERR_COMMAND_DISALLOWED				        (0x0C)
+
+#define ERR_UNSUPPORTED_FEATURE				        (0x11)
+#define ERR_INVALID_HCI_CMD_PARAMS                  (0x12)
+#define ERR_RMT_USR_TERM_CONN                       (0x13)
+#define ERR_RMT_DEV_TERM_CONN_LOW_RESRCES           (0x14)
+#define ERR_RMT_DEV_TERM_CONN_POWER_OFF             (0x15)
+#define ERR_LOCAL_HOST_TERM_CONN                    (0x16)
+
+#define ERR_UNSUPP_RMT_FEATURE                      (0x1A)
+
+#define ERR_INVALID_LMP_PARAM                       (0x1E)
+#define ERR_UNSPECIFIED_ERROR                       (0x1F)
+
+#define ERR_LL_RESP_TIMEOUT                         (0x22)
+#define ERR_LMP_PDU_NOT_ALLOWED                     (0x24)
+
+#define ERR_INSTANT_PASSED                          (0x28)
+
+#define ERR_PAIR_UNIT_KEY_NOT_SUPP                  (0x29)
+#define ERR_CONTROLLER_BUSY                         (0x3A)
+
+#define ERR_DIRECTED_ADV_TIMEOUT                    (0x3C)
+
+#define ERR_CONN_END_WITH_MIC_FAILURE               (0x3D)
+
+#define ERR_CONN_FAILED_TO_ESTABLISH                (0x3E)
+
+
+#define BLE_STATUS_FAILED             		(0x41)
+#define BLE_STATUS_INVALID_PARAMS     		(0x42)
+#define BLE_STATUS_BUSY               		(0x43)
+#define BLE_STATUS_INVALID_LEN_PDU    		(0x44)
+#define BLE_STATUS_PENDING            		(0x45)
+#define BLE_STATUS_NOT_ALLOWED        		(0x46)
+#define BLE_STATUS_ERROR              		(0x47)
+#define BLE_STATUS_ADDR_NOT_RESOLVED        (0x48)
+
+#define FLASH_READ_FAILED 					(0x49)
+#define FLASH_WRITE_FAILED 					(0x4A)
+#define FLASH_ERASE_FAILED 					(0x4B)
+
+#define BLE_STATUS_INVALID_CID         		(0x50)
+
+#define TIMER_NOT_VALID_LAYER				(0x54)
+#define TIMER_INSUFFICIENT_RESOURCES		(0x55)
+ 
+#define BLE_STATUS_CSRK_NOT_FOUND			(0x5A)
+#define BLE_STATUS_IRK_NOT_FOUND			(0x5B)
+#define BLE_STATUS_DEV_NOT_FOUND_IN_DB		(0x5C)
+#define BLE_STATUS_SEC_DB_FULL				(0x5D)
+#define BLE_STATUS_DEV_NOT_BONDED           (0x5E)
+#define BLE_STATUS_DEV_IN_BLACKLIST         (0x5F)
+ 
+#define BLE_STATUS_INVALID_HANDLE           (0x60)
+#define BLE_STATUS_INVALID_PARAMETER        (0x61)
+#define BLE_STATUS_OUT_OF_HANDLE            (0x62)
+#define BLE_STATUS_INVALID_OPERATION        (0x63)
+#define BLE_STATUS_INSUFFICIENT_RESOURCES   (0x64)
+#define BLE_INSUFFICIENT_ENC_KEYSIZE		(0x65)
+#define BLE_STATUS_CHARAC_ALREADY_EXISTS    (0x66)
+
+ /*
+  * Library Error Codes
+  */
+#define BLE_STATUS_TIMEOUT                     (0xFF)
+#define BLE_STATUS_PROFILE_ALREADY_INITIALIZED (0xF0)
+#define BLE_STATUS_NULL_PARAM                  (0xF1) 
+
+/**
+ * @}
+ */
+ 
+
+#endif /* __BLE_STATUS_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_aci.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,27 @@
+/******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
+* File Name          : bluenrg_hci.h
+* Author             : AMS - AAS
+* Version            : V1.0.0
+* Date               : 26-Jun-2014
+* Description        : Header file that includes commands and events for BlueNRG
+*                      FW6.3.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __BLUENRG_ACI_H__
+#define __BLUENRG_ACI_H__
+
+#include "bluenrg_aci_const.h"
+#include "bluenrg_gap_aci.h"
+#include "bluenrg_gatt_aci.h"
+#include "bluenrg_l2cap_aci.h"
+#include "bluenrg_hal_aci.h"
+#include "bluenrg_updater_aci.h"
+
+#endif /* __BLUENRG_ACI_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_aci_const.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,780 @@
+/******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
+* File Name          : bluenrg_aci_const.h
+* Author             : AMS - AAS
+* Version            : V1.0.0
+* Date               : 26-Jun-2014
+* Description        : Header file with ACI definitions for BlueNRG FW6.3.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __BLUENRG_ACI_CONST_H_
+#define __BLUENRG_ACI_CONST_H_
+
+#include "ble_compiler.h"
+#include "ble_link_layer.h"
+#include "ble_hci_const.h"
+#include "bluenrg_gatt_server.h"
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
+#define OCF_HAL_WRITE_CONFIG_DATA   0x000C
+
+#define OCF_HAL_READ_CONFIG_DATA   0x000D
+typedef __packed struct _hal_read_config_data_cp{
+    uint8_t offset;
+} PACKED hal_read_config_data_cp;
+#define HAL_READ_CONFIG_DATA_RP_SIZE 1
+typedef __packed struct _hal_read_config_data_rp{
+    uint8_t status;
+    uint8_t data[HCI_MAX_PAYLOAD_SIZE-HAL_READ_CONFIG_DATA_RP_SIZE];
+} PACKED hal_read_config_data_rp;
+
+#define OCF_HAL_SET_TX_POWER_LEVEL          0x000F
+typedef __packed struct _hal_set_tx_power_level_cp{
+	uint8_t	en_high_power;
+    uint8_t pa_level;
+} PACKED hal_set_tx_power_level_cp;
+#define HAL_SET_TX_POWER_LEVEL_CP_SIZE 2
+
+#define OCF_HAL_DEVICE_STANDBY          0x0013
+
+#define OCF_HAL_LE_TX_TEST_PACKET_NUMBER    0x0014
+typedef __packed struct _hal_le_tx_test_packet_number_rp{
+  uint8_t status;
+  uint32_t number_of_packets;
+} PACKED hal_le_tx_test_packet_number_rp;
+
+#define OCF_HAL_TONE_START                  0x0015
+typedef __packed struct _hal_tone_start_cp{
+	uint8_t	rf_channel;
+} PACKED hal_tone_start_cp;
+#define HAL_TONE_START_CP_SIZE 1
+
+#define OCF_HAL_TONE_STOP                   0x0016
+
+#define OCF_UPDATER_START                   0x0020
+#define OCF_UPDATER_REBOOT                  0x0021
+
+#define OCF_GET_UPDATER_VERSION                 0x0022
+typedef __packed struct _get_updater_version_rp{
+    uint8_t		    status;
+	uint8_t		    version;
+} PACKED get_updater_version_rp;
+#define GET_UPDATER_VERSION_RP_SIZE 2
+
+#define OCF_GET_UPDATER_BUFSIZE             0x0023
+typedef __packed struct _get_updater_bufsize_rp{
+    uint8_t		    status;
+	uint8_t		    buffer_size;
+} PACKED get_updater_bufsize_rp;
+#define GET_UPDATER_BUFSIZE_RP_SIZE 2
+
+#define OCF_UPDATER_ERASE_BLUE_FLAG         0x0024
+
+#define OCF_UPDATER_RESET_BLUE_FLAG         0x0025
+
+#define OCF_UPDATER_ERASE_SECTOR            0x0026
+typedef __packed struct _updater_erase_sector_cp{
+	uint32_t	address;
+} PACKED updater_erase_sector_cp;
+#define UPDATER_ERASE_SECTOR_CP_SIZE 4
+
+#define OCF_UPDATER_PROG_DATA_BLOCK         0x0027
+#define UPDATER_PROG_DATA_BLOCK_CP_SIZE     6
+typedef __packed struct _updater_prog_data_block_cp{
+	uint32_t	address;
+    uint16_t    data_len;
+    uint8_t		data[HCI_MAX_PAYLOAD_SIZE-UPDATER_PROG_DATA_BLOCK_CP_SIZE];
+} PACKED updater_prog_data_block_cp;
+
+#define OCF_UPDATER_READ_DATA_BLOCK         0x0028
+typedef __packed struct _updater_read_data_block_cp{
+	uint32_t	address;
+    uint16_t    data_len;
+} PACKED updater_read_data_block_cp;
+#define UPDATER_READ_DATA_BLOCK_CP_SIZE 6
+typedef __packed struct _updater_read_data_block_rp{
+    uint8_t		    status;
+	uint8_t		    data[VARIABLE_SIZE];
+} PACKED updater_read_data_block_rp;
+#define GET_UPDATER_BUFSIZE_RP_SIZE 2
+
+#define OCF_UPDATER_CALC_CRC                0x0029
+typedef __packed struct _updater_calc_crc_cp{
+	uint32_t	address;
+    uint8_t    num_sectors;
+} PACKED updater_calc_crc_cp;
+#define UPDATER_CALC_CRC_CP_SIZE 5
+typedef __packed struct _updater_calc_crc_rp{
+    uint8_t		    status;
+	uint32_t		crc;
+} PACKED updater_calc_crc_rp;
+#define UPDATER_CALC_CRC_RP_SIZE 5
+
+#define OCF_UPDATER_HW_VERSION              0x002A
+typedef __packed struct _updater_hw_version_rp{
+    uint8_t		    status;
+	uint8_t		    version;
+} PACKED updater_hw_version_rp;
+#define UPDATER_HW_VERSION_RP_SIZE 2
+
+#define OCF_GAP_SET_NON_DISCOVERABLE	    0x0081
+
+#define OCF_GAP_SET_LIMITED_DISCOVERABLE	0x0082
+
+#define OCF_GAP_SET_DISCOVERABLE	        0x0083
+
+#define OCF_GAP_SET_DIRECT_CONNECTABLE      0x0084
+typedef __packed struct _gap_set_direct_conectable_cp_IDB05A1{
+    uint8_t		own_bdaddr_type;
+    uint8_t		directed_adv_type;
+	uint8_t		direct_bdaddr_type;
+    tBDAddr		direct_bdaddr;
+} PACKED gap_set_direct_conectable_cp_IDB05A1;
+
+typedef __packed struct _gap_set_direct_conectable_cp_IDB04A1{
+    uint8_t		own_bdaddr_type;
+    uint8_t		direct_bdaddr_type;
+    tBDAddr		direct_bdaddr;
+} PACKED gap_set_direct_conectable_cp_IDB04A1;
+#define GAP_SET_DIRECT_CONNECTABLE_CP_SIZE 8
+
+#define OCF_GAP_SET_IO_CAPABILITY      0x0085
+typedef __packed struct _gap_set_io_capability_cp{
+    uint8_t		io_capability;
+} PACKED gap_set_io_capability_cp;
+#define GAP_SET_IO_CAPABILITY_CP_SIZE 1
+
+#define OCF_GAP_SET_AUTH_REQUIREMENT      0x0086
+typedef __packed struct _gap_set_auth_requirement_cp{
+    uint8_t	mitm_mode;
+    uint8_t     oob_enable;
+    uint8_t     oob_data[16];
+    uint8_t     min_encryption_key_size;
+    uint8_t     max_encryption_key_size;
+    uint8_t     use_fixed_pin;
+    uint32_t    fixed_pin;
+    uint8_t     bonding_mode;
+} PACKED gap_set_auth_requirement_cp;
+#define GAP_SET_AUTH_REQUIREMENT_CP_SIZE 26
+
+#define OCF_GAP_SET_AUTHOR_REQUIREMENT      0x0087
+typedef __packed struct _gap_set_author_requirement_cp{
+  uint16_t      conn_handle;
+  uint8_t       authorization_enable;
+} PACKED gap_set_author_requirement_cp;
+#define GAP_SET_AUTHOR_REQUIREMENT_CP_SIZE 3
+
+#define OCF_GAP_PASSKEY_RESPONSE      0x0088
+typedef __packed struct _gap_passkey_response_cp{
+  uint16_t conn_handle;
+  uint32_t passkey;
+} PACKED gap_passkey_response_cp;
+#define GAP_PASSKEY_RESPONSE_CP_SIZE 6
+
+#define OCF_GAP_AUTHORIZATION_RESPONSE      0x0089
+typedef __packed struct _gap_authorization_response_cp{
+  uint16_t conn_handle;
+  uint8_t  authorize;
+} PACKED gap_authorization_response_cp;
+#define GAP_AUTHORIZATION_RESPONSE_CP_SIZE 3
+
+#define OCF_GAP_INIT		        0x008A
+typedef __packed struct _gap_init_cp_IDB05A1{
+    uint8_t	role;
+    uint8_t	privacy_enabled;
+    uint8_t device_name_char_len; 
+} PACKED gap_init_cp_IDB05A1;
+#define GAP_INIT_CP_SIZE_IDB05A1 3
+
+typedef __packed struct _gap_init_cp_IDB04A1{
+	uint8_t	role;
+} PACKED gap_init_cp_IDB04A1;
+#define GAP_INIT_CP_SIZE_IDB04A1 1
+typedef __packed struct _gap_init_rp{
+    uint8_t		    status;
+	uint16_t		service_handle;
+    uint16_t		dev_name_char_handle;
+    uint16_t		appearance_char_handle;
+} PACKED gap_init_rp;
+#define GAP_INIT_RP_SIZE 7
+
+#define OCF_GAP_SET_NON_CONNECTABLE      0x008B
+typedef __packed struct _gap_set_non_connectable_cp_IDB05A1{
+    uint8_t	advertising_event_type;
+    uint8_t	own_address_type;
+#endif
+} PACKED gap_set_non_connectable_cp_IDB05A1;
+
+typedef __packed struct _gap_set_non_connectable_cp_IDB04A1{
+    uint8_t	advertising_event_type;
+} PACKED gap_set_non_connectable_cp_IDB04A1;
+
+#define OCF_GAP_SET_UNDIRECTED_CONNECTABLE      0x008C
+typedef __packed struct _gap_set_undirected_connectable_cp{
+    uint8_t	adv_filter_policy;
+    uint8_t	own_addr_type;
+} PACKED gap_set_undirected_connectable_cp;
+#define GAP_SET_UNDIRECTED_CONNECTABLE_CP_SIZE 2
+
+#define OCF_GAP_SLAVE_SECURITY_REQUEST      0x008D
+typedef __packed struct _gap_slave_security_request_cp{
+  uint16_t conn_handle;
+  uint8_t  bonding;
+  uint8_t  mitm_protection;
+} PACKED gap_slave_security_request_cp;
+#define GAP_SLAVE_SECURITY_REQUEST_CP_SIZE 4
+
+#define OCF_GAP_UPDATE_ADV_DATA      0x008E
+
+#define OCF_GAP_DELETE_AD_TYPE      0x008F
+typedef __packed struct _gap_delete_ad_type_cp{
+    uint8_t	ad_type;
+} PACKED gap_delete_ad_type_cp;
+#define GAP_DELETE_AD_TYPE_CP_SIZE 1
+
+#define OCF_GAP_GET_SECURITY_LEVEL      0x0090
+typedef __packed struct _gap_get_security_level_rp{
+    uint8_t		    status;
+	uint8_t		    mitm_protection;
+    uint8_t		    bonding;
+    uint8_t		    oob_data;
+    uint8_t         passkey_required;
+} PACKED gap_get_security_level_rp;
+#define GAP_GET_SECURITY_LEVEL_RP_SIZE 5
+
+#define OCF_GAP_SET_EVT_MASK      0x0091
+typedef __packed struct _gap_set_evt_mask_cp{
+    uint16_t	evt_mask;
+} PACKED gap_set_evt_mask_cp;
+#define GAP_SET_EVT_MASK_CP_SIZE 2
+
+#define OCF_GAP_CONFIGURE_WHITELIST   0x0092
+
+#define OCF_GAP_TERMINATE      0x0093
+typedef __packed struct _gap_terminate_cp{
+  uint16_t handle;
+  uint8_t  reason;
+} PACKED gap_terminate_cp;
+#define GAP_TERMINATE_CP_SIZE 3
+
+#define OCF_GAP_CLEAR_SECURITY_DB   0x0094
+
+#define OCF_GAP_ALLOW_REBOND_DB     0x0095
+
+typedef __packed struct _gap_allow_rebond_cp_IDB05A1{
+  uint16_t conn_handle;
+} PACKED gap_allow_rebond_cp_IDB05A1;
+
+#define OCF_GAP_START_LIMITED_DISCOVERY_PROC   0x0096
+typedef __packed struct _gap_start_limited_discovery_proc_cp{
+  uint16_t scanInterval;
+  uint16_t scanWindow;
+  uint8_t  own_address_type;
+  uint8_t  filterDuplicates;
+} PACKED gap_start_limited_discovery_proc_cp;
+#define GAP_START_LIMITED_DISCOVERY_PROC_CP_SIZE 6
+
+#define OCF_GAP_START_GENERAL_DISCOVERY_PROC   0x0097
+typedef __packed struct _gap_start_general_discovery_proc_cp{
+  uint16_t scanInterval;
+  uint16_t scanWindow;
+  uint8_t  own_address_type;
+  uint8_t  filterDuplicates;
+} PACKED gap_start_general_discovery_proc_cp;
+#define GAP_START_GENERAL_DISCOVERY_PROC_CP_SIZE 6
+
+#define OCF_GAP_START_NAME_DISCOVERY_PROC   0x0098
+typedef __packed struct _gap_start_name_discovery_proc_cp{
+  uint16_t scanInterval;
+  uint16_t scanWindow;
+  uint8_t peer_bdaddr_type;
+  tBDAddr peer_bdaddr;
+  uint8_t own_bdaddr_type;
+  uint16_t conn_min_interval;
+  uint16_t conn_max_interval;
+  uint16_t conn_latency;
+  uint16_t supervision_timeout;
+  uint16_t min_conn_length;
+  uint16_t max_conn_length;
+} PACKED gap_start_name_discovery_proc_cp;
+#define GAP_START_NAME_DISCOVERY_PROC_CP_SIZE 24
+
+#define OCF_GAP_START_AUTO_CONN_ESTABLISH_PROC  0x0099
+
+#define OCF_GAP_START_GENERAL_CONN_ESTABLISH_PROC  0x009A
+typedef __packed struct _gap_start_general_conn_establish_proc_cp_IDB05A1{
+  uint8_t  scan_type;
+  uint16_t scan_interval;
+  uint16_t scan_window;
+  uint8_t  own_address_type;
+  uint8_t  filter_duplicates;
+} PACKED gap_start_general_conn_establish_proc_cp_IDB05A1;
+
+typedef __packed struct _gap_start_general_conn_establish_proc_cp_IDB04A1{
+  uint8_t  scan_type;
+  uint16_t scan_interval;
+  uint16_t scan_window;
+  uint8_t  own_address_type;
+  uint8_t  filter_duplicates;
+  uint8_t  use_reconn_addr;
+  tBDAddr  reconn_addr;
+} PACKED gap_start_general_conn_establish_proc_cp_IDB04A1;
+
+#define OCF_GAP_START_SELECTIVE_CONN_ESTABLISH_PROC  0x009B
+#define GAP_START_SELECTIVE_CONN_ESTABLISH_PROC_CP_SIZE 8
+typedef __packed struct _gap_start_selective_conn_establish_proc_cp{
+  uint8_t scan_type;
+  uint16_t scan_interval;
+  uint16_t scan_window;
+  uint8_t own_address_type;
+  uint8_t filter_duplicates;
+  uint8_t num_whitelist_entries;
+  uint8_t addr_array[HCI_MAX_PAYLOAD_SIZE-GAP_START_SELECTIVE_CONN_ESTABLISH_PROC_CP_SIZE];
+} PACKED gap_start_selective_conn_establish_proc_cp;
+
+#define OCF_GAP_CREATE_CONNECTION      0x009C
+typedef __packed struct _gap_create_connection_cp{
+  uint16_t scanInterval;
+  uint16_t scanWindow;
+  uint8_t peer_bdaddr_type;
+  tBDAddr peer_bdaddr;
+  uint8_t own_bdaddr_type;
+  uint16_t conn_min_interval;
+  uint16_t conn_max_interval;
+  uint16_t conn_latency;
+  uint16_t supervision_timeout;
+  uint16_t min_conn_length;
+  uint16_t max_conn_length;
+} PACKED gap_create_connection_cp;
+#define GAP_CREATE_CONNECTION_CP_SIZE 24
+
+#define OCF_GAP_TERMINATE_GAP_PROCEDURE      0x009D
+
+#define OCF_GAP_START_CONNECTION_UPDATE      0x009E
+typedef __packed struct _gap_start_connection_update_cp{
+  uint16_t conn_handle;
+  uint16_t conn_min_interval;
+  uint16_t conn_max_interval;
+  uint16_t conn_latency;
+  uint16_t supervision_timeout;
+  uint16_t min_conn_length;
+  uint16_t max_conn_length;
+} PACKED gap_start_connection_update_cp;
+#define GAP_START_CONNECTION_UPDATE_CP_SIZE 14
+
+#define OCF_GAP_SEND_PAIRING_REQUEST      0x009F
+typedef __packed struct _gap_send_pairing_request_cp{
+  uint16_t conn_handle;
+  uint8_t  force_rebond;
+} PACKED gap_send_pairing_request_cp;
+#define GAP_GAP_SEND_PAIRING_REQUEST_CP_SIZE 3
+
+#define OCF_GAP_RESOLVE_PRIVATE_ADDRESS   0x00A0
+typedef __packed struct _gap_resolve_private_address_cp{
+  tBDAddr address;
+} PACKED gap_resolve_private_address_cp;
+#define GAP_RESOLVE_PRIVATE_ADDRESS_CP_SIZE 6
+typedef __packed struct _gap_resolve_private_address_rp{
+  uint8_t status;
+  tBDAddr address;
+} PACKED gap_resolve_private_address_rp;
+  
+#define OCF_GAP_SET_BROADCAST_MODE   0x00A1
+#define GAP_SET_BROADCAST_MODE_CP_SIZE 6
+typedef __packed struct _gap_set_broadcast_mode_cp{
+  uint16_t adv_interv_min;
+  uint16_t adv_interv_max;
+  uint8_t adv_type;
+  uint8_t own_addr_type;
+  uint8_t var_len_data[HCI_MAX_PAYLOAD_SIZE-GAP_SET_BROADCAST_MODE_CP_SIZE];
+} PACKED gap_set_broadcast_mode_cp;
+
+#define OCF_GAP_START_OBSERVATION_PROC   0x00A2
+typedef __packed struct _gap_start_observation_proc_cp{
+  uint16_t scan_interval;
+  uint16_t scan_window;
+  uint8_t  scan_type;
+  uint8_t  own_address_type;
+  uint8_t  filter_duplicates;
+} PACKED gap_start_observation_proc_cp;
+
+#define OCF_GAP_GET_BONDED_DEVICES   0x00A3
+typedef __packed struct _gap_get_bonded_devices_rp{
+    uint8_t		status;
+    uint8_t		num_addr;
+	uint8_t		dev_list[HCI_MAX_PAYLOAD_SIZE-HCI_EVENT_HDR_SIZE-EVT_CMD_COMPLETE_SIZE-1];
+} PACKED gap_get_bonded_devices_rp;
+
+#define OCF_GAP_IS_DEVICE_BONDED   0x00A4
+typedef __packed struct _gap_is_device_bonded_cp{
+  uint8_t peer_address_type;
+  tBDAddr peer_address;
+} PACKED gap_is_device_bonded_cp;
+
+
+#define OCF_GATT_INIT		        0x0101
+
+#define OCF_GATT_ADD_SERV		    0x0102
+typedef __packed struct _gatt_add_serv_rp{
+    uint8_t		    status;
+	uint16_t		handle;
+} PACKED gatt_add_serv_rp;
+#define GATT_ADD_SERV_RP_SIZE 3
+
+#define OCF_GATT_INCLUDE_SERV		0x0103
+typedef __packed struct _gatt_include_serv_rp{
+	uint8_t		    status;
+    uint16_t		handle;    
+} PACKED gatt_include_serv_rp;
+#define GATT_INCLUDE_SERV_RP_SIZE 3
+
+#define OCF_GATT_ADD_CHAR		    0x0104
+typedef __packed struct _gatt_add_char_rp{
+    uint8_t		    status;
+	uint16_t		handle;
+} PACKED gatt_add_char_rp;
+#define GATT_ADD_CHAR_RP_SIZE 3
+
+#define OCF_GATT_ADD_CHAR_DESC	    0x0105
+typedef __packed struct _gatt_add_char_desc_rp{
+    uint8_t		    status;
+	uint16_t		handle;
+} PACKED gatt_add_char_desc_rp;
+#define GATT_ADD_CHAR_DESC_RP_SIZE 3
+
+#define OCF_GATT_UPD_CHAR_VAL		0x0106
+
+#define OCF_GATT_DEL_CHAR   		0x0107
+typedef __packed struct _gatt_del_char_cp{
+	uint16_t	service_handle;
+	uint16_t	char_handle;
+} PACKED gatt_del_char_cp;
+#define GATT_DEL_CHAR_CP_SIZE 4
+
+#define OCF_GATT_DEL_SERV   		0x0108
+typedef __packed struct _gatt_del_serv_cp{
+	uint16_t	service_handle;
+} PACKED gatt_del_serv_cp;
+#define GATT_DEL_SERV_CP_SIZE 2
+
+#define OCF_GATT_DEL_INC_SERV   	0x0109
+typedef __packed struct _gatt_del_inc_serv_cp{
+	uint16_t	service_handle;
+    uint16_t	inc_serv_handle;
+} PACKED gatt_del_inc_serv_cp;
+#define GATT_DEL_INC_SERV_CP_SIZE 4
+
+#define OCF_GATT_SET_EVT_MASK      0x010A
+typedef __packed struct _gatt_set_evt_mask_cp{
+    uint32_t	evt_mask;
+} PACKED gatt_set_evt_mask_cp;
+#define GATT_SET_EVT_MASK_CP_SIZE 4
+
+#define OCF_GATT_EXCHANGE_CONFIG      0x010B
+typedef __packed struct _gatt_exchange_config_cp{
+    uint16_t	conn_handle;
+} PACKED gatt_exchange_config_cp;
+#define GATT_EXCHANGE_CONFIG_CP_SIZE 2
+
+#define OCF_ATT_FIND_INFO_REQ      0x010C
+typedef __packed struct _att_find_info_req_cp{
+    uint16_t	conn_handle;
+    uint16_t	start_handle;
+    uint16_t	end_handle;
+} PACKED att_find_info_req_cp;
+#define ATT_FIND_INFO_REQ_CP_SIZE 6
+
+#define OCF_ATT_FIND_BY_TYPE_VALUE_REQ  0x010D
+#define ATT_FIND_BY_TYPE_VALUE_REQ_CP_SIZE 9
+typedef __packed struct _att_find_by_type_value_req_cp{
+    uint16_t	conn_handle;
+    uint16_t	start_handle;
+    uint16_t	end_handle;
+    uint8_t     uuid[2];
+    uint8_t     attr_val_len;
+    uint8_t     attr_val[ATT_MTU - 7];
+} PACKED att_find_by_type_value_req_cp;
+
+#define OCF_ATT_READ_BY_TYPE_REQ  0x010E
+#define ATT_READ_BY_TYPE_REQ_CP_SIZE 7  // without UUID
+typedef __packed struct _att_read_by_type_req_cp{
+    uint16_t	conn_handle;
+    uint16_t	start_handle;
+    uint16_t	end_handle;
+    uint8_t     uuid_type;
+    uint8_t     uuid[16];
+} PACKED att_read_by_type_req_cp;
+
+#define OCF_ATT_READ_BY_GROUP_TYPE_REQ  0x010F
+#define ATT_READ_BY_GROUP_TYPE_REQ_CP_SIZE 7  // without UUID
+typedef __packed struct _att_read_by_group_type_req_cp{
+    uint16_t	conn_handle;
+    uint16_t	start_handle;
+    uint16_t	end_handle;
+    uint8_t     uuid_type;
+    uint8_t     uuid[16];
+} PACKED att_read_by_group_type_req_cp;
+
+#define OCF_ATT_PREPARE_WRITE_REQ  0x0110
+#define ATT_PREPARE_WRITE_REQ_CP_SIZE 7  // without attr_val
+typedef __packed struct _att_prepare_write_req_cp{
+    uint16_t	conn_handle;
+    uint16_t	attr_handle;
+    uint16_t	value_offset;
+    uint8_t     attr_val_len;
+    uint8_t     attr_val[ATT_MTU-5];
+} PACKED att_prepare_write_req_cp;
+
+#define OCF_ATT_EXECUTE_WRITE_REQ  0x0111
+typedef __packed struct _att_execute_write_req_cp{
+    uint16_t	conn_handle;
+    uint8_t     execute;
+} PACKED att_execute_write_req_cp;
+#define ATT_EXECUTE_WRITE_REQ_CP_SIZE 3
+
+#define OCF_GATT_DISC_ALL_PRIM_SERVICES 0X0112
+typedef __packed struct _gatt_disc_all_prim_serivces_cp{
+  uint16_t conn_handle;
+} PACKED gatt_disc_all_prim_services_cp;
+#define GATT_DISC_ALL_PRIM_SERVICES_CP_SIZE 2
+
+#define OCF_GATT_DISC_PRIM_SERVICE_BY_UUID 0x0113
+typedef __packed struct _gatt_disc_prim_service_by_uuid_cp{
+  uint16_t    conn_handle;
+  uint8_t     uuid_type;
+  uint8_t     uuid[16];
+} PACKED gatt_disc_prim_service_by_uuid_cp;
+#define GATT_DISC_PRIM_SERVICE_BY_UUID_CP_SIZE 3 // Without uuid
+
+#define OCF_GATT_FIND_INCLUDED_SERVICES 0X0114
+typedef __packed struct _gatt_disc_find_included_services_cp{
+  uint16_t conn_handle;
+  uint16_t start_handle;
+  uint16_t end_handle;
+} PACKED gatt_find_included_services_cp;
+#define GATT_FIND_INCLUDED_SERVICES_CP_SIZE 6
+
+#define OCF_GATT_DISC_ALL_CHARAC_OF_SERV 0X0115
+typedef __packed struct _gatt_disc_all_charac_of_serv_cp{
+  uint16_t conn_handle;
+  uint16_t start_attr_handle;
+  uint16_t end_attr_handle;
+} PACKED gatt_disc_all_charac_of_serv_cp;
+#define GATT_DISC_ALL_CHARAC_OF_SERV_CP_SIZE 6
+
+#define OCF_GATT_DISC_CHARAC_BY_UUID 0X0116
+
+#define OCF_GATT_DISC_ALL_CHARAC_DESCRIPTORS 0X0117
+typedef __packed struct _gatt_disc_all_charac_descriptors_cp{
+  uint16_t conn_handle;
+  uint16_t char_val_handle;
+  uint16_t char_end_handle;
+} PACKED gatt_disc_all_charac_descriptors_cp;
+#define GATT_DISC_ALL_CHARAC_DESCRIPTORS_CP_SIZE 6
+
+#define OCF_GATT_READ_CHARAC_VAL   0x0118
+typedef __packed struct _gatt_read_charac_val_cp{
+  uint16_t conn_handle;
+  uint16_t attr_handle;
+} PACKED gatt_read_charac_val_cp;
+#define GATT_READ_CHARAC_VAL_CP_SIZE 4
+
+#define OCF_GATT_READ_USING_CHARAC_UUID  0x0109
+typedef __packed struct _gatt_read_using_charac_uuid_cp{
+    uint16_t	conn_handle;
+    uint16_t	start_handle;
+    uint16_t	end_handle;
+    uint8_t     uuid_type;
+    uint8_t     uuid[16];
+} PACKED gatt_read_using_charac_uuid_cp;
+#define GATT_READ_USING_CHARAC_UUID_CP_SIZE 7  // without UUID
+
+#define OCF_GATT_READ_LONG_CHARAC_VAL   0x011A
+typedef __packed struct _gatt_read_long_charac_val_cp{
+  uint16_t conn_handle;
+  uint16_t attr_handle;
+  uint16_t val_offset;
+} PACKED gatt_read_long_charac_val_cp;
+#define GATT_READ_LONG_CHARAC_VAL_CP_SIZE 6
+
+#define OCF_GATT_READ_MULTIPLE_CHARAC_VAL   0x011B
+#define GATT_READ_MULTIPLE_CHARAC_VAL_CP_SIZE 3  // without set_of_handles
+typedef __packed struct _gatt_read_multiple_charac_val_cp{
+  uint16_t conn_handle;
+  uint8_t num_handles;
+  uint8_t  set_of_handles[HCI_MAX_PAYLOAD_SIZE-GATT_READ_MULTIPLE_CHARAC_VAL_CP_SIZE];
+} PACKED gatt_read_multiple_charac_val_cp;
+
+#define OCF_GATT_WRITE_CHAR_VALUE   0x011C
+
+#define OCF_GATT_WRITE_LONG_CHARAC_VAL   0x011D
+#define GATT_WRITE_LONG_CHARAC_VAL_CP_SIZE 7  // without set_of_handles
+typedef __packed struct _gatt_write_long_charac_val_cp{
+  uint16_t conn_handle;
+  uint16_t attr_handle;
+  uint16_t val_offset;
+  uint8_t  val_len;
+  uint8_t  attr_val[HCI_MAX_PAYLOAD_SIZE-GATT_WRITE_LONG_CHARAC_VAL_CP_SIZE];
+} PACKED gatt_write_long_charac_val_cp;
+
+#define OCF_GATT_WRITE_CHARAC_RELIABLE   0x011E
+#define GATT_WRITE_CHARAC_RELIABLE_CP_SIZE 7  // without set_of_handles
+typedef __packed struct _gatt_write_charac_reliable_cp{
+  uint16_t conn_handle;
+  uint16_t attr_handle;
+  uint16_t val_offset;
+  uint8_t  val_len;
+  uint8_t  attr_val[HCI_MAX_PAYLOAD_SIZE-GATT_WRITE_CHARAC_RELIABLE_CP_SIZE];
+} PACKED gatt_write_charac_reliable_cp;
+
+#define OCF_GATT_WRITE_LONG_CHARAC_DESC   0x011F
+#define GATT_WRITE_LONG_CHARAC_DESC_CP_SIZE 7  // without set_of_handles
+typedef __packed struct _gatt_write_long_charac_desc_cp{
+  uint16_t conn_handle;
+  uint16_t attr_handle;
+  uint16_t val_offset;
+  uint8_t  val_len;
+  uint8_t  attr_val[HCI_MAX_PAYLOAD_SIZE-GATT_WRITE_LONG_CHARAC_DESC_CP_SIZE];
+} PACKED gatt_write_long_charac_desc_cp;
+
+#define OCF_GATT_READ_LONG_CHARAC_DESC   0x0120
+typedef __packed struct _gatt_read_long_charac_desc_cp{
+  uint16_t conn_handle;
+  uint16_t attr_handle;
+  uint16_t val_offset;
+} PACKED gatt_read_long_charac_desc_cp;
+#define GATT_READ_LONG_CHARAC_DESC_CP_SIZE 6
+
+#define OCF_GATT_WRITE_CHAR_DESCRIPTOR      0x0121
+
+#define OCF_GATT_READ_CHAR_DESCRIPTOR       0x0122
+typedef __packed struct _gatt_read_charac_desc_cp{
+  uint16_t conn_handle;
+  uint16_t attr_handle;
+} PACKED gatt_read_charac_desc_cp;
+#define GATT_READ_CHAR_DESCRIPTOR_CP_SIZE 4
+
+#define OCF_GATT_WRITE_WITHOUT_RESPONSE     0x0123
+#define GATT_WRITE_WITHOUT_RESPONSE_CP_SIZE 5  // without attr_val
+typedef __packed struct _gatt_write_without_resp_cp{
+  uint16_t conn_handle;
+  uint16_t attr_handle;
+  uint8_t  val_len;
+  uint8_t  attr_val[ATT_MTU - 3];
+} PACKED gatt_write_without_resp_cp;
+
+#define OCF_GATT_SIGNED_WRITE_WITHOUT_RESPONSE     0x0124
+#define GATT_SIGNED_WRITE_WITHOUT_RESPONSE_CP_SIZE 5  // without attr_val
+typedef __packed struct _gatt_signed_write_without_resp_cp{
+  uint16_t conn_handle;
+  uint16_t attr_handle;
+  uint8_t  val_len;
+  uint8_t  attr_val[ATT_MTU - 13];
+} PACKED gatt_signed_write_without_resp_cp;
+
+#define OCF_GATT_CONFIRM_INDICATION                0x0125
+typedef __packed struct _gatt_confirm_indication_cp{
+	uint16_t	conn_handle;
+} PACKED gatt_confirm_indication_cp;
+#define GATT_CONFIRM_INDICATION_CP_SIZE 2
+
+#define OCF_GATT_WRITE_RESPONSE                    0x0126
+
+#define OCF_GATT_ALLOW_READ		    0x0127
+typedef __packed struct _gatt_allow_read_cp{
+	uint16_t	conn_handle;
+} PACKED gatt_allow_read_cp;
+#define GATT_ALLOW_READ_CP_SIZE 2
+
+#define OCF_GATT_SET_SECURITY_PERMISSION		    0x0128
+typedef __packed struct _gatt_set_security_permission_cp{
+	uint16_t	service_handle;
+    uint16_t	attr_handle;
+    uint8_t	    security_permission;
+} PACKED gatt_set_security_permission_cp;
+#define GATT_GATT_SET_SECURITY_PERMISSION_CP_SIZE 5
+
+#define OCF_GATT_SET_DESC_VAL		0x0129
+
+#define OCF_GATT_READ_HANDLE_VALUE      0x012A
+typedef __packed struct _gatt_read_handle_val_cp{
+	uint16_t	attr_handle;
+} PACKED gatt_read_handle_val_cp;
+#define GATT_READ_HANDLE_VALUE_RP_SIZE 3
+typedef __packed struct _gatt_read_handle_val_rp{
+    uint8_t		status;
+    uint16_t	value_len;
+	uint8_t		value[HCI_MAX_PAYLOAD_SIZE-GATT_READ_HANDLE_VALUE_RP_SIZE];
+} PACKED gatt_read_handle_val_rp;
+
+#define OCF_GATT_READ_HANDLE_VALUE_OFFSET      0x012B
+typedef __packed struct _gatt_read_handle_val_offset_cp{
+	uint16_t	attr_handle;
+    uint8_t     offset;
+} PACKED gatt_read_handle_val_offset_cp;
+#define GATT_READ_HANDLE_VALUE_OFFSET_RP_SIZE 2
+typedef __packed struct _gatt_read_handle_val_offset_rp{
+    uint8_t		status;
+    uint8_t		value_len;
+	uint8_t		value[HCI_MAX_PAYLOAD_SIZE-GATT_READ_HANDLE_VALUE_OFFSET_RP_SIZE];
+} PACKED gatt_read_handle_val_offset_rp;
+
+#define OCF_L2CAP_CONN_PARAM_UPDATE_REQ  0x0181
+typedef __packed struct _l2cap_conn_param_update_req_cp{
+  uint16_t conn_handle;
+  uint16_t interval_min;
+  uint16_t interval_max;
+  uint16_t slave_latency;
+  uint16_t timeout_multiplier;
+} PACKED l2cap_conn_param_update_req_cp;
+#define L2CAP_CONN_PARAM_UPDATE_REQ_CP_SIZE 10
+
+#define OCF_L2CAP_CONN_PARAM_UPDATE_RESP  0x0182
+typedef __packed struct _l2cap_conn_param_update_resp_cp_IDB05A1{
+  uint16_t conn_handle;
+  uint16_t interval_min;
+  uint16_t interval_max;
+  uint16_t slave_latency;
+  uint16_t timeout_multiplier;
+  uint16_t min_ce_length;
+  uint16_t max_ce_length;
+  uint8_t id;
+  uint8_t accept;
+} PACKED l2cap_conn_param_update_resp_cp_IDB05A1;
+
+typedef __packed struct _l2cap_conn_param_update_resp_cp_IDB04A1{
+  uint16_t conn_handle;
+  uint16_t interval_min;
+  uint16_t interval_max;
+  uint16_t slave_latency;
+  uint16_t timeout_multiplier;
+  uint8_t id;
+  uint8_t accept;
+} PACKED l2cap_conn_param_update_resp_cp_IDB04A1;
+
+/**
+ * @defgroup BlueNRG_Events BlueNRG events (vendor specific)
+ * @{
+ */
+
+/**
+ * Vendor specific event for BlueNRG.
+ */
+typedef __packed struct _evt_blue_aci{
+  uint16_t ecode; /**< One of the BlueNRG event codes. */
+  uint8_t  data[VARIABLE_SIZE];
+} PACKED evt_blue_aci;
+
+
+/**
+ * @}
+ */
+
+#endif /* __BLUENRG_ACI_CONST_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_gap.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,230 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : bluenrg_gap.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : Header file for BlueNRG's GAP layer. 
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+#ifndef __BNRG_GAP_H__
+#define __BNRG_GAP_H__
+
+#include <ble_link_layer.h>
+
+/**
+ *@addtogroup GAP GAP
+ *@brief API for GAP layer.
+ *@{
+ */
+
+/**
+ * @name GAP UUIDs
+ * @{
+ */
+#define GAP_SERVICE_UUID                        (0x1800)
+#define DEVICE_NAME_UUID						(0x2A00)
+#define APPEARANCE_UUID							(0x2A01)
+#define PERIPHERAL_PRIVACY_FLAG_UUID			(0x2A02)
+#define RECONNECTION_ADDR_UUID					(0x2A03)
+#define PERIPHERAL_PREFERRED_CONN_PARAMS_UUID	(0x2A04)
+/**
+ * @}
+ */
+
+/**
+ * @name Characteristic value lengths
+ * @{
+ */
+#define DEVICE_NAME_CHARACTERISTIC_LEN			        (8)
+#define APPEARANCE_CHARACTERISTIC_LEN			        (2)
+#define PERIPHERAL_PRIVACY_CHARACTERISTIC_LEN	        (1)
+#define RECONNECTION_ADDR_CHARACTERISTIC_LEN			(6)
+#define PERIPHERAL_PREF_CONN_PARAMS_CHARACTERISTIC_LEN	(8)
+/**
+ * @}
+ */
+
+/*------------- AD types for adv data and scan response data ----------------*/
+
+/**
+ * @defgroup AD_Types AD Types
+ * @brief AD Types
+ * @{
+ */
+
+/* FLAGS AD type */
+#define AD_TYPE_FLAGS							(0x01)
+/* flag bits */
+/**
+ * @anchor Flags_AD_Type_bits
+ * @name Flags AD Type bits
+ * @brief Bits in Flags AD Type
+ * @{
+ */
+#define FLAG_BIT_LE_LIMITED_DISCOVERABLE_MODE	(0x01)
+#define FLAG_BIT_LE_GENERAL_DISCOVERABLE_MODE	(0x02)
+#define FLAG_BIT_BR_EDR_NOT_SUPPORTED			(0x04)
+#define FLAG_BIT_LE_BR_EDR_CONTROLLER			(0x08)
+#define FLAG_BIT_LE_BR_EDR_HOST					(0x10)
+/**
+ * @}
+ */
+
+/**
+ * @name Service UUID AD types
+ * @{
+ */
+#define AD_TYPE_16_BIT_SERV_UUID				(0x02)
+#define AD_TYPE_16_BIT_SERV_UUID_CMPLT_LIST		(0x03)
+#define AD_TYPE_32_BIT_SERV_UUID				(0x04)
+#define AD_TYPE_32_BIT_SERV_UUID_CMPLT_LIST		(0x05)
+#define AD_TYPE_128_BIT_SERV_UUID				(0x06)
+#define AD_TYPE_128_BIT_SERV_UUID_CMPLT_LIST	(0x07)
+/**
+ * @}
+ */
+
+/* LOCAL NAME AD types */
+/**
+ * @name Local name AD types
+ * @{
+ */
+#define AD_TYPE_SHORTENED_LOCAL_NAME			(0x08)
+#define AD_TYPE_COMPLETE_LOCAL_NAME			    (0x09)
+/**
+ * @}
+ */
+
+/* TX power level AD type*/
+#define AD_TYPE_TX_POWER_LEVEL					(0x0A)
+
+/* Class of device */
+#define AD_TYPE_CLASS_OF_DEVICE					(0x0D)
+
+/* security manager TK value AD type */
+#define AD_TYPE_SEC_MGR_TK_VALUE				(0x10)
+
+/* security manager OOB flags */
+#define AD_TYPE_SEC_MGR_OOB_FLAGS				(0x11)
+
+/* slave connection interval AD type */
+#define AD_TYPE_SLAVE_CONN_INTERVAL				(0x12)
+
+/* service solicitation UUID list Ad types*/
+/**
+ * @name Service solicitation UUID list AD types
+ * @{
+ */
+#define AD_TYPE_SERV_SOLICIT_16_BIT_UUID_LIST	(0x14)
+#define AD_TYPE_SERV_SOLICIT_32_BIT_UUID_LIST	(0x1F)
+#define AD_TYPE_SERV_SOLICIT_128_BIT_UUID_LIST	(0x15)
+/**
+ * @}
+ */
+
+/* service data AD type */
+#define AD_TYPE_SERVICE_DATA			(0x16)
+
+/* manufaturer specific data AD type */
+#define AD_TYPE_MANUFACTURER_SPECIFIC_DATA	(0xFF)
+
+/* appearance AD type */
+#define AD_TYPE_APPEARANCE			(0x19)
+
+/* advertising interval AD type */
+#define AD_TYPE_ADVERTISING_INTERVAL		(0x1A)
+
+/**
+ * @}
+ */
+
+#define MAX_ADV_DATA_LEN						(31)
+
+#define DEVICE_NAME_LEN			  				(7)
+#define BD_ADDR_SIZE							(6)
+
+/**
+ * @name Privacy flag values
+ * @{
+ */
+#define PRIVACY_ENABLED							(0x01)
+#define PRIVACY_DISABLED						(0x00)
+/**
+ * @}
+ */
+
+/**
+ * @name Intervals
+ * Intervals in terms of 625 micro sec
+ * @{
+ */
+#define DIR_CONN_ADV_INT_MIN					(0x190)/*250ms*/
+#define DIR_CONN_ADV_INT_MAX					(0x320)/*500ms*/
+#define UNDIR_CONN_ADV_INT_MIN					(0x800)/*1.28s*/
+#define UNDIR_CONN_ADV_INT_MAX					(0x1000)/*2.56s*/
+#define LIM_DISC_ADV_INT_MIN					(0x190)/*250ms*/
+#define LIM_DISC_ADV_INT_MAX					(0x320)/*500ms*/
+#define GEN_DISC_ADV_INT_MIN					(0x800)/*1.28s*/
+#define GEN_DISC_ADV_INT_MAX					(0x1000)/*2.56s*/
+/**
+ * @}
+ */
+
+/**
+ * @name Timeout values
+ * @{
+ */
+#define LIM_DISC_MODE_TIMEOUT					(180000)/* 180 seconds. according to the errata published */
+#define PRIVATE_ADDR_INT_TIMEOUT				(900000)/* 15 minutes */
+/**
+ * @}
+ */
+
+/**
+ * @anchor gap_roles
+ * @name GAP Roles
+ * @{
+*/
+#define GAP_PERIPHERAL_ROLE_IDB05A1			(0x01)
+#define GAP_BROADCASTER_ROLE_IDB05A1		        (0x02)
+#define GAP_CENTRAL_ROLE_IDB05A1			(0x04)
+#define GAP_OBSERVER_ROLE_IDB05A1			(0x08)
+
+#define GAP_PERIPHERAL_ROLE_IDB04A1			(0x01)
+#define GAP_BROADCASTER_ROLE_IDB04A1		        (0x02)
+#define GAP_CENTRAL_ROLE_IDB04A1			(0x03)
+#define GAP_OBSERVER_ROLE_IDB04A1			(0x04)
+/**
+ * @}
+ */
+
+/**
+ * @anchor gap_procedure_codes
+ * @name GAP procedure codes
+ * Procedure codes for EVT_BLUE_GAP_PROCEDURE_COMPLETE event
+ * and aci_gap_terminate_gap_procedure() command.
+ * @{
+ */
+#define GAP_LIMITED_DISCOVERY_PROC                  (0x01)
+#define GAP_GENERAL_DISCOVERY_PROC                  (0x02)
+#define GAP_NAME_DISCOVERY_PROC                     (0x04)
+#define GAP_AUTO_CONNECTION_ESTABLISHMENT_PROC      (0x08)
+#define GAP_GENERAL_CONNECTION_ESTABLISHMENT_PROC   (0x10)
+#define GAP_SELECTIVE_CONNECTION_ESTABLISHMENT_PROC (0x20)
+#define GAP_DIRECT_CONNECTION_ESTABLISHMENT_PROC    (0x40)
+#define GAP_OBSERVATION_PROC_IDB05A1                (0x80)
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#endif /* __BNRG_GAP_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_gap_aci.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1218 @@
+/******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
+* File Name          : bluenrg_gap_aci.h
+* Author             : AMS - AAS
+* Version            : V1.0.0
+* Date               : 26-Jun-2014
+* Description        : Header file with GAP commands for BlueNRG FW6.3.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __BLUENRG_GAP_ACI_H__
+#define __BLUENRG_GAP_ACI_H__
+
+/**
+ *@addtogroup GAP GAP
+ *@brief GAP layer.
+ *@{
+ */
+
+/**
+ *@defgroup GAP_Functions GAP functions
+ *@brief API for GAP layer.
+ *@{
+ */
+
+/**
+  * @brief  Initialize the GAP layer.
+  * @note   Register the GAP service with the GATT. 
+  *         All the standard GAP characteristics will also be added:
+  *         @li Device Name
+  *         @li Appearance
+  *         @li Peripheral Preferred Connection Parameters (peripheral role only)
+  *         @code
+
+              tBleStatus ret;
+              uint16_t service_handle, dev_name_char_handle, appearance_char_handle;
+
+              ret = aci_gap_init_IDB05A1(1, 0, 0x07, &service_handle, &dev_name_char_handle, &appearance_char_handle);
+              if(ret){
+                PRINTF("GAP_Init failed.\n");
+                reboot();    
+              }  
+              const char *name = "BlueNRG";  
+              ret = aci_gatt_update_char_value(service_handle, dev_name_char_handle, 0, strlen(name), (uint8_t *)name);        
+              if(ret){
+                PRINTF("aci_gatt_update_char_value failed.\n");
+              }  
+  *         @endcode
+  * @param       role     Bitmap of allowed roles: see @ref gap_roles "GAP roles".
+  * @param       privacy_enabled     Enable (1) or disable (0) privacy.
+  * @param       device_name_char_len Length of the device name characteristic
+  * @param[out]  service_handle  Handle of the GAP service.
+  * @param[out]  dev_name_char_handle  Device Name Characteristic handle
+  * @param[out]  appearance_char_handle Appearance Characteristic handle
+  * @retval tBleStatus Value indicating success or error code.
+  */
+tBleStatus aci_gap_init_IDB05A1(uint8_t role, uint8_t privacy_enabled,
+                        uint8_t device_name_char_len,
+                        uint16_t* service_handle,
+                        uint16_t* dev_name_char_handle,
+                        uint16_t* appearance_char_handle);
+/**
+  * @brief  Initialize the GAP layer.
+  * @note   Register the GAP service with the GATT.
+  *         All the standard GAP characteristics will also be added:
+  *         @li Device Name
+  *         @li Appearance
+  *         @li Peripheral Privacy Flag (peripheral role only)
+  *         @li Reconnection Address (peripheral role only)
+  *         @li Peripheral Preferred Connection Parameters (peripheral role only)
+  *         @code
+
+              tBleStatus ret;
+              uint16_t service_handle, dev_name_char_handle, appearance_char_handle;
+
+              ret = aci_gap_init_IDB04A1(1, &service_handle, &dev_name_char_handle, &appearance_char_handle);
+              if(ret){
+                PRINTF("GAP_Init failed.\n");
+                reboot();    
+              }  
+              const char *name = "BlueNRG";  
+              ret = aci_gatt_update_char_value(service_handle, dev_name_char_handle, 0, strlen(name), (uint8_t *)name);        
+              if(ret){
+                PRINTF("aci_gatt_update_char_value failed.\n");
+              }  
+  *         @endcode
+  * @param       role     One of the allowed roles: @ref GAP_PERIPHERAL_ROLE or @ref GAP_CENTRAL_ROLE. See @ref gap_roles "GAP roles".
+  * @param[out]  service_handle  Handle of the GAP service.
+  * @param[out]  dev_name_char_handle  Device Name Characteristic handle
+  * @param[out]  appearance_char_handle Appearance Characteristic handle
+  * @retval tBleStatus Value indicating success or error code.
+  */
+tBleStatus aci_gap_init_IDB04A1(uint8_t role,
+                 uint16_t* service_handle,
+                 uint16_t* dev_name_char_handle,
+                 uint16_t* appearance_char_handle);
+
+/**
+  * @brief   Set the Device in non-discoverable mode.
+  * @note    This command will disable the LL advertising.
+  * @retval  tBleStatus Value indicating success or error code.
+  */
+tBleStatus aci_gap_set_non_discoverable(void);
+
+/**
+ * @brief  Put the device in limited discoverable mode
+ *         (as defined in GAP specification volume 3, section 9.2.3).
+ * @note    The device will be discoverable for TGAP (lim_adv_timeout) = 180 seconds.
+ *          The advertising can be disabled at any time by issuing
+ *          aci_gap_set_non_discoverable() command.
+ *          The AdvIntervMin and AdvIntervMax parameters are optional. If both
+ *          are set to 0, the GAP will use default values (250 ms and 500 ms respectively).
+ *          Host can set the Local Name, a Service UUID list and the Slave Connection
+ *          Minimum and Maximum. If provided, these data will be inserted into the
+ *          advertising packet payload as AD data. These parameters are optional
+ *          in this command. These values can be also set using aci_gap_update_adv_data()
+ *          separately.
+ *          The total size of data in advertising packet cannot exceed 31 bytes.
+ *          With this command, the BLE Stack will also add automatically the following
+ *          standard AD types:
+ *          @li AD Flags
+ *          @li TX Power Level
+ *
+ *          When advertising timeout happens (i.e. limited discovery period has elapsed), controller generates
+ *          @ref EVT_BLUE_GAP_LIMITED_DISCOVERABLE event.
+ *
+ *          Example:
+ * @code
+ *
+ *              #define  ADV_INTERVAL_MIN_MS  100
+ *              #define  ADV_INTERVAL_MAX_MS  200
+ *
+ *              tBleStatus ret;
+ *
+ *              const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME,'B','l','u','e','N','R','G'};
+ *              const uint8_t serviceUUIDList[] = {AD_TYPE_16_BIT_SERV_UUID,0x34,0x12};
+ *
+ *              ret = aci_gap_set_limited_discoverable(ADV_IND, (ADV_INTERVAL_MIN_MS*1000)/0.625,
+ *                                                     (ADV_INTERVAL_MAX_MS*1000)/0.625,
+ *                                                     STATIC_RANDOM_ADDR, NO_WHITE_LIST_USE,
+ *                                                    sizeof(local_name), local_name,
+ *                                                     sizeof(serviceUUIDList), serviceUUIDList,
+ *                                                     0, 0);
+ * @endcode
+ *
+ * @param       AdvType     One of the advertising types:
+ *               @arg @ref ADV_IND Connectable undirected advertising
+ *               @arg @ref ADV_SCAN_IND Scannable undirected advertising
+ *               @arg @ref ADV_NONCONN_IND Non connectable undirected advertising
+ * @param       AdvIntervMin    Minimum advertising interval.
+ * 								 Range: 0x0020 to 0x4000
+ * 								 Default: 250 ms
+ * 								 Time = N * 0.625 msec
+ * 								 Time Range: 20 ms to 10.24 sec (minimum 100 ms for ADV_SCAN_IND or ADV_NONCONN_IND).
+ * @param       AdvIntervMax    Maximum advertising interval.
+ * 								Range: 0x0020 to 0x4000
+ * 								Default: 500 ms
+ * 								Time = N * 0.625 msec
+ * 								Time Range: 20 ms to 10.24 sec  (minimum 100 ms for ADV_SCAN_IND or ADV_NONCONN_IND).
+ * @param       OwnAddrType     Type of our address used during advertising
+ *                              (@ref PUBLIC_ADDR,@ref STATIC_RANDOM_ADDR).
+ * @param       AdvFilterPolicy  Filter policy:
+ *                               @arg NO_WHITE_LIST_USE
+ *                               @arg WHITE_LIST_FOR_ONLY_SCAN
+ *                               @arg WHITE_LIST_FOR_ONLY_CONN
+ *                               @arg WHITE_LIST_FOR_ALL
+ * @param  LocalNameLen  Length of LocalName array.
+ * @param  LocalName  Array containing the Local Name AD data. First byte is the AD type:
+ *                       @ref AD_TYPE_SHORTENED_LOCAL_NAME or @ref AD_TYPE_COMPLETE_LOCAL_NAME.
+ * @param  ServiceUUIDLen Length of ServiceUUIDList array.
+ * @param  ServiceUUIDList  This is the list of the UUIDs AD Types as defined in Volume 3,
+ *  							Section 11.1.1 of GAP Specification. First byte is the AD Type.
+ *  							@arg @ref AD_TYPE_16_BIT_SERV_UUID
+ *  							@arg @ref AD_TYPE_16_BIT_SERV_UUID_CMPLT_LIST
+ *  							@arg @ref AD_TYPE_128_BIT_SERV_UUID
+ *  							@arg @ref AD_TYPE_128_BIT_SERV_UUID_CMPLT_LIST
+ * @param  SlaveConnIntervMin Slave connection interval minimum value suggested by Peripheral.
+ * 							 If SlaveConnIntervMin and SlaveConnIntervMax are not 0x0000,
+ * 							 Slave Connection Interval Range AD structure will be added in advertising
+ * 							 data.
+ * 							 Connection interval is defined in the following manner:
+ * 							 connIntervalmin = Slave_Conn_Interval_Min x 1.25ms
+ * 							 Slave_Conn_Interval_Min range: 0x0006 to 0x0C80
+ * 							 Value of 0xFFFF indicates no specific minimum.
+ * @param  SlaveConnIntervMax Slave connection interval maximum value suggested by Peripheral.
+ * 							 If SlaveConnIntervMin and SlaveConnIntervMax are not 0x0000,
+ * 							 Slave Connection Interval Range AD structure will be added in advertising
+ * 							 data.
+ * 							 ConnIntervalmax = Slave_Conn_Interval_Max x 1.25ms
+ * 							 Slave_Conn_Interval_Max range: 0x0006 to 0x0C80
+ * 							 Slave_ Conn_Interval_Max shall be equal to or greater than the Slave_Conn_Interval_Min.
+ * 							 Value of 0xFFFF indicates no specific maximum.
+ *
+ * @retval tBleStatus Value indicating success or error code.
+ */
+tBleStatus aci_gap_set_limited_discoverable(uint8_t AdvType, uint16_t AdvIntervMin, uint16_t AdvIntervMax,
+					    uint8_t OwnAddrType, uint8_t AdvFilterPolicy, uint8_t LocalNameLen,
+					    const char *LocalName, uint8_t ServiceUUIDLen, uint8_t* ServiceUUIDList,
+					    uint16_t SlaveConnIntervMin, uint16_t SlaveConnIntervMax);
+/**
+ * @brief Put the Device in general discoverable mode (as defined in GAP specification volume 3, section 9.2.4).
+ * @note  The device will be discoverable until the Host issue Bluehci_Gap_Set_Non_Discoverable command.
+ * 		  The Adv_Interval_Min and Adv_Interval_Max parameters are optional. If both are set to 0, the GAP uses
+ * 		  the default values for advertising intervals for IDB04A1 (1.28 s and 2.56 s respectively).
+ *        For IDB05A1:
+ *        When using connectable undirected advertising events:\n
+ *        @li Adv_Interval_Min = 30 ms
+ *        @li Adv_Interval_Max = 60 ms
+ *        \nWhen using non-connectable advertising events or scannable undirected advertising events:\n
+ *        @li Adv_Interval_Min = 100 ms
+ *        @li Adv_Interval_Max = 150 ms
+ * 		  Host can set the Local Name, a Service UUID list and the Slave Connection Interval Range. If provided,
+ * 		  these data will be inserted into the advertising packet payload as AD data. These parameters are optional
+ * 		  in this command. These values can be also set using aci_gap_update_adv_data() separately.
+ * 		  The total size of data in advertising packet cannot exceed 31 bytes.
+ * 		  With this command, the BLE Stack will also add automatically the following standard AD types:
+ * 		  @li AD Flags
+ * 		  @li TX Power Level
+ *
+ * 		  Usage example:
+ *
+ * 		  @code
+ *
+ *              #define  ADV_INTERVAL_MIN_MS  800
+ *              #define  ADV_INTERVAL_MAX_MS  900
+ *              #define  CONN_INTERVAL_MIN_MS 100
+ *              #define  CONN_INTERVAL_MAX_MS 300
+ *
+ *              tBleStatus ret;
+ *
+ *              const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME,'B','l','u','e','N','R','G'};
+ *              const uint8_t serviceUUIDList[] = {AD_TYPE_16_BIT_SERV_UUID,0x34,0x12};
+ *
+ *              ret = aci_gap_set_discoverable(ADV_IND, (ADV_INTERVAL_MIN_MS*1000)/625,
+ *                                                     (ADV_INTERVAL_MAX_MS*1000)/625,
+ *                                                     STATIC_RANDOM_ADDR, NO_WHITE_LIST_USE,
+ *                                                     sizeof(local_name), local_name,
+ *                                                     0, NULL,
+ *                                                     (CONN_INTERVAL_MIN_MS*1000)/1250,
+ *                                                     (CONN_INTERVAL_MAX_MS*1000)/1250);
+ * 			@endcode
+ *
+ * @param AdvType One of the advertising types:
+ *                @arg @ref ADV_IND Connectable undirected advertising
+ *                @arg @ref ADV_SCAN_IND Scannable undirected advertising
+ *                @arg @ref ADV_NONCONN_IND Non connectable undirected advertising
+ * @param       AdvIntervMin    Minimum advertising interval.
+ * 								 Range: 0x0020 to 0x4000
+ * 								 Default: 1.28 s
+ * 								 Time = N * 0.625 msec
+ * 								 Time Range: 20 ms to 10.24 sec (minimum 100 ms for ADV_SCAN_IND or ADV_NONCONN_IND).
+ * @param       AdvIntervMax    Maximum advertising interval.
+ * 								Range: 0x0020 to 0x4000
+ * 								Default: 2.56 s
+ * 								Time = N * 0.625 msec
+ * 								Time Range: 20 ms to 10.24 sec  (minimum 100 ms for ADV_SCAN_IND or ADV_NONCONN_IND).
+ * @param       OwnAddrType     Type of our address used during advertising
+ *                              (@ref PUBLIC_ADDR,@ref STATIC_RANDOM_ADDR).
+ * @param       AdvFilterPolicy  Filter policy:
+ *                               @arg @ref NO_WHITE_LIST_USE
+ *                               @arg @ref WHITE_LIST_FOR_ONLY_SCAN
+ *                               @arg @ref WHITE_LIST_FOR_ONLY_CONN
+ *                               @arg @ref WHITE_LIST_FOR_ALL
+ * @param  LocalNameLen  Length of LocalName array.
+ * @param  LocalName  Array containing the Local Name AD data. First byte is the AD type:
+ *                       @ref AD_TYPE_SHORTENED_LOCAL_NAME or @ref AD_TYPE_COMPLETE_LOCAL_NAME.
+ * @param  ServiceUUIDLen Length of ServiceUUIDList array.
+ * @param  ServiceUUIDList  This is the list of the UUIDs AD Types as defined in Volume 3,
+ *  							Section 11.1.1 of GAP Specification. First byte is the AD Type.
+ *  							@arg @ref AD_TYPE_16_BIT_SERV_UUID
+ *  							@arg @ref AD_TYPE_16_BIT_SERV_UUID_CMPLT_LIST
+ *  							@arg @ref AD_TYPE_128_BIT_SERV_UUID
+ *  							@arg @ref AD_TYPE_128_BIT_SERV_UUID_CMPLT_LIST
+ * @param  SlaveConnIntervMin Slave connection interval minimum value suggested by Peripheral.
+ * 							 If SlaveConnIntervMin and SlaveConnIntervMax are not 0x0000,
+ * 							 Slave Connection Interval Range AD structure will be added in advertising
+ * 							 data.
+ * 							 Connection interval is defined in the following manner:
+ * 							 connIntervalmin = Slave_Conn_Interval_Min x 1.25ms
+ * 							 Slave_Conn_Interval_Min range: 0x0006 to 0x0C80
+ * 							 Value of 0xFFFF indicates no specific minimum.
+ * @param  SlaveConnIntervMax Slave connection interval maximum value suggested by Peripheral.
+ * 							 If SlaveConnIntervMin and SlaveConnIntervMax are not 0x0000,
+ * 							 Slave Connection Interval Range AD structure will be added in advertising
+ * 							 data.
+ * 							 ConnIntervalmax = Slave_Conn_Interval_Max x 1.25ms
+ * 							 Slave_Conn_Interval_Max range: 0x0006 to 0x0C80
+ * 							 Slave_ Conn_Interval_Max shall be equal to or greater than the Slave_Conn_Interval_Min.
+ * 							 Value of 0xFFFF indicates no specific maximum.
+ *
+ * @retval tBleStatus Value indicating success or error code.
+ */
+tBleStatus aci_gap_set_discoverable(uint8_t AdvType, uint16_t AdvIntervMin, uint16_t AdvIntervMax,
+                             uint8_t OwnAddrType, uint8_t AdvFilterPolicy, uint8_t LocalNameLen,
+                             const char *LocalName, uint8_t ServiceUUIDLen, uint8_t* ServiceUUIDList,
+                             uint16_t SlaveConnIntervMin, uint16_t SlaveConnIntervMax);
+
+/**
+ * @brief Set the Device in direct connectable mode (as defined in GAP specification Volume 3, Section 9.3.3).
+ * @note  If the privacy is enabled, the reconnection address is used for advertising, otherwise the address
+ * 		  of the type specified in OwnAddrType is used. The device will be in directed connectable mode only
+ * 		  for 1.28 seconds. If no connection is established within this duration, the device enters non
+ * 		  discoverable mode and advertising will have to be again enabled explicitly.
+ * 		  The controller generates a @ref EVT_LE_CONN_COMPLETE event with the status set to @ref HCI_DIRECTED_ADV_TIMEOUT
+ * 		  if the connection was not established and 0x00 if the connection was successfully established.
+ *
+ * 		  Usage example:
+ * 		  @code
+ *
+ * 		  tBleStatus ret;
+ *
+ * 		  const uint8_t central_address[] = {0x43,0x27,0x84,0xE1,0x80,0x02};
+ * 		  ret = aci_gap_set_direct_connectable_IDB05A1(PUBLIC_ADDR, HIGH_DUTY_CYCLE_DIRECTED_ADV, PUBLIC_ADDR, central_address);
+ * 		  @endcode
+ *
+ *
+ *
+ * @param OwnAddrType  Type of our address used during advertising (@ref PUBLIC_ADDR,@ref STATIC_RANDOM_ADDR).
+ * @param directed_adv_type  Type of directed advertising (@ref HIGH_DUTY_CYCLE_DIRECTED_ADV, @ref LOW_DUTY_CYCLE_DIRECTED_ADV).
+ * @param InitiatorAddrType Type of peer address (@ref PUBLIC_ADDR,@ref STATIC_RANDOM_ADDR).
+ * @param InitiatorAddr     Initiator's address (Little Endian).
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_set_direct_connectable_IDB05A1(uint8_t own_addr_type, uint8_t directed_adv_type, uint8_t initiator_addr_type, const uint8_t *initiator_addr);
+/**
+ * @brief Set the Device in direct connectable mode (as defined in GAP specification Volume 3, Section 9.3.3).
+ * @note  If the privacy is enabled, the reconnection address is used for advertising, otherwise the address
+ * 		  of the type specified in OwnAddrType is used. The device will be in directed connectable mode only
+ * 		  for 1.28 seconds. If no connection is established within this duration, the device enters non
+ * 		  discoverable mode and advertising will have to be again enabled explicitly.
+ * 		  The controller generates a @ref EVT_LE_CONN_COMPLETE event with the status set to @ref HCI_DIRECTED_ADV_TIMEOUT
+ * 		  if the connection was not established and 0x00 if the connection was successfully established.
+ *
+ * 		  Usage example:
+ * 		  @code
+ *
+ * 		  tBleStatus ret;
+ *
+ * 		  const uint8_t central_address = {0x43,0x27,0x84,0xE1,0x80,0x02};
+ * 		  ret = aci_gap_set_direct_connectable_IDB04A1(PUBLIC_ADDR, PUBLIC_ADDR, central_address);
+ * 		  @endcode
+ *
+ *
+ *
+ * @param OwnAddrType  Type of our address used during advertising (@ref PUBLIC_ADDR,@ref STATIC_RANDOM_ADDR).
+ * @param InitiatorAddrType Type of peer address (@ref PUBLIC_ADDR,@ref STATIC_RANDOM_ADDR).
+ * @param InitiatorAddr     Initiator's address (Little Endian).
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_set_direct_connectable_IDB04A1(uint8_t own_addr_type, uint8_t initiator_addr_type, const uint8_t *initiator_addr);
+
+/**
+ * @brief Set the IO capabilities of the device.
+ * @note This command has to be given only when the device is not in a connected state.
+ * @param io_capability One of the allowed codes for IO Capability:
+ * 		  @arg @ref IO_CAP_DISPLAY_ONLY
+ * 		  @arg @ref IO_CAP_DISPLAY_YES_NO
+ * 		  @arg @ref IO_CAP_KEYBOARD_ONLY
+ * 		  @arg @ref IO_CAP_NO_INPUT_NO_OUTPUT
+ * 		  @arg @ref IO_CAP_KEYBOARD_DISPLAY
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_set_io_capability(uint8_t io_capability);
+
+/**
+ * @brief Set the authentication requirements for the device.
+ * @note  If the oob_enable is set to 0, oob_data will be ignored.
+ *        This command has to be given only when the device is not in a connected state.
+ * @param mitm_mode MITM mode:
+ * 					@arg @ref MITM_PROTECTION_NOT_REQUIRED
+ * 					@arg @ref MITM_PROTECTION_REQUIRED
+ * @param oob_enable If OOB data are present or not:
+ * 					 @arg @ref OOB_AUTH_DATA_ABSENT
+ * 					 @arg @ref OOB_AUTH_DATA_PRESENT
+ * @param oob_data   Out-Of-Band data
+ * @param min_encryption_key_size Minimum size of the encryption key to be used during the pairing process
+ * @param max_encryption_key_size Maximum size of the encryption key to be used during the pairing process
+ * @param use_fixed_pin If application wants to use a fixed pin or not:
+ * 						@arg @ref USE_FIXED_PIN_FOR_PAIRING
+ * 						@arg @ref DONOT_USE_FIXED_PIN_FOR_PAIRING
+ * 						If a fixed pin is not used, it has to be provided by the application with
+ * 						aci_gap_pass_key_response() after @ref EVT_BLUE_GAP_PASS_KEY_REQUEST event.
+ * @param fixed_pin If use_fixed_pin is USE_FIXED_PIN_FOR_PAIRING, this is the value of the pin that will
+ * 					be used during pairing if MIMT protection is enabled. Any value between 0 to 999999 is
+ * 					accepted.
+ * @param bonding_mode One of the bonding modes:
+ * 					   @arg @ref BONDING
+ * 					   @arg @ref NO_BONDING
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_set_auth_requirement(uint8_t mitm_mode,
+                                        uint8_t oob_enable,
+                                        uint8_t oob_data[16],
+                                        uint8_t min_encryption_key_size,
+                                        uint8_t max_encryption_key_size,
+                                        uint8_t use_fixed_pin,
+                                        uint32_t fixed_pin,
+                                        uint8_t bonding_mode);
+ /**
+  * @brief Set the authorization requirements of the device.
+  * @note This command has to be given only when the device is not in a connected state.
+  * @param conn_handle Handle of the connection in case BlueNRG is configured as a master (otherwise it can be also 0).
+  * @param authorization_enable @arg @ref AUTHORIZATION_NOT_REQUIRED : Authorization not required
+  * 							@arg @ref AUTHORIZATION_REQUIRED : Authorization required. This enables
+  * 							the authorization requirement in the device and when a remote device
+  * 							tries to connect to GATT server, @ref EVT_BLUE_GAP_AUTHORIZATION_REQUEST event
+  * 							will be sent to the Host.
+  *
+  * @return Value indicating success or error code.
+  */
+tBleStatus aci_gap_set_author_requirement(uint16_t conn_handle, uint8_t authorization_enable);
+
+/**
+ * @brief Provide the pass key that will be used during pairing.
+ * @note This command should be sent by the Host in response to @ref EVT_BLUE_GAP_PASS_KEY_REQUEST event.
+ * @param conn_handle Connection handle
+ * @param passkey	  Pass key that will be used during the pairing process. Must be a number between
+ * 					  0 and 999999.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_pass_key_response(uint16_t conn_handle, uint32_t passkey);
+
+/**
+ * @brief Authorize a device to access attributes.
+ * @note Application should send this command after it has received a @ref EVT_BLUE_GAP_AUTHORIZATION_REQUEST.
+ *
+ * @param conn_handle Connection handle
+ * @param authorize   @arg @ref CONNECTION_AUTHORIZED : Authorize (accept connection)
+ * 					  @arg @ref CONNECTION_REJECTED : Reject (reject connection)
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_authorization_response(uint16_t conn_handle, uint8_t authorize);
+
+/**
+ * @brief Put the device into non-connectable mode.
+ * @param adv_type One of the allowed advertising types:
+ *                 @arg @ref ADV_SCAN_IND : Scannable undirected advertising
+ *                 @arg @ref ADV_NONCONN_IND : Non-connectable undirected advertising
+ * @param own_address_type If Privacy is disabled, then the peripheral address can be
+ * 			               @arg @ref PUBLIC_ADDR.
+ * 			               @arg @ref STATIC_RANDOM_ADDR.
+ *                         If Privacy is enabled, then the peripheral address can be 
+ *                         @arg @ref RESOLVABLE_PRIVATE_ADDR
+ *                         @arg @ref NON_RESOLVABLE_PRIVATE_ADDR
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_set_non_connectable_IDB05A1(uint8_t adv_type, uint8_t own_address_type);
+/**
+ * @brief Put the device into non-connectable mode.
+ * @param adv_type One of the allowed advertising types:
+ *                 @arg @ref ADV_SCAN_IND : Scannable undirected advertising
+ *                 @arg @ref ADV_NONCONN_IND : Non-connectable undirected advertising
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_set_non_connectable_IDB04A1(uint8_t adv_type);
+
+/**
+ * @brief Put the device into undirected connectable mode.
+ * @note  If privacy is enabled in the device, a resolvable private address is generated and used
+ *        as the advertiser's address. If not, the address of the type specified in own_addr_type
+ *        is used for advertising.
+ * @param own_addr_type Type of our address used during advertising:
+ *                      if BLUENRG (IDB04A1)
+ * 			            @arg @ref PUBLIC_ADDR.
+ * 			            @arg @ref STATIC_RANDOM_ADDR.
+ *                      else if BLUENRG_MS (IDB05A1)
+ *                      If Privacy is disabled:
+ * 			            @arg @ref PUBLIC_ADDR.
+ * 			            @arg @ref STATIC_RANDOM_ADDR.
+ *                      If Privacy is enabled:
+ *                      @arg @ref RESOLVABLE_PRIVATE_ADDR
+ *                      @arg @ref NON_RESOLVABLE_PRIVATE_ADDR
+ * @param adv_filter_policy  Filter policy:
+ *                         @arg @ref NO_WHITE_LIST_USE
+ *                         @arg @ref WHITE_LIST_FOR_ALL
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_set_undirected_connectable(uint8_t own_addr_type, uint8_t adv_filter_policy);
+
+/**
+ * @brief Send a slave security request to the master.
+ * @note This command has to be issued to notify the master of the security requirements of the slave.
+ * 		 The master may encrypt the link, initiate the pairing procedure, or reject the request.
+ * @param conn_handle Connection handle
+ * @param bonding	   One of the bonding modes:
+ * 					   @arg @ref BONDING
+ * 					   @arg @ref NO_BONDING
+ * @param mitm_protection  If MITM protection is required or not:
+ * 						   @arg @ref MITM_PROTECTION_NOT_REQUIRED
+ * 					       @arg @ref MITM_PROTECTION_REQUIRED
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_slave_security_request(uint16_t conn_handle, uint8_t bonding, uint8_t mitm_protection);
+
+/**
+ * @brief Update advertising data.
+ * @note This command can be used to update the advertising data for a particular AD type.
+ *       If the AD type specified does not exist, then it is added to the advertising data.
+ *       If the overall advertising data length is more than 31 octets after the update, then
+ *       the command is rejected and the old data is retained.
+ * @param AdvLen Length of AdvData array
+ * @param AdvData Advertisement Data,  formatted as specified in Bluetooth specification
+ *        (Volume 3, Part C, 11), including data length. It can contain more than one AD type.
+ *        Example
+ * @code
+ *  tBleStatus ret;
+ *  const char local_name[] = {AD_TYPE_COMPLETE_LOCAL_NAME,'B','l','u','e','N','R','G'};
+ *  const uint8_t serviceUUIDList[] = {AD_TYPE_16_BIT_SERV_UUID,0x34,0x12};
+ *  const uint8_t manuf_data[] = {4, AD_TYPE_MANUFACTURER_SPECIFIC_DATA, 0x05, 0x02, 0x01};
+ *
+ *  ret = aci_gap_set_discoverable(ADV_IND, 0, 0, STATIC_RANDOM_ADDR, NO_WHITE_LIST_USE,
+ *                                 8, local_name, 3, serviceUUIDList, 0, 0);
+ *  ret = aci_gap_update_adv_data(5, manuf_data);
+ * @endcode
+ *
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_update_adv_data(uint8_t AdvLen, const uint8_t *AdvData);
+
+/**
+ * @brief Delete an AD Type
+ * @note This command can be used to delete the specified AD type from the advertisement data if
+ * 		 present.
+ * @param ad_type One of the allowed AD types (see @ref AD_Types)
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_delete_ad_type(uint8_t ad_type);
+
+/**
+ * @brief Get the current security settings
+ * @note This command can be used to get the current security settings of the device.
+ * @param mitm_protection 	@arg 0: Not required
+ * 							@arg 1: Required
+ * @param bonding			@arg 0: No bonding mode
+ * 							@arg 1: Bonding mode
+ * @param oob_data			@arg 0: Data absent
+ * 							@arg 1: Data present
+ * @param passkey_required  @arg 0: Not required
+ * 							@arg 1: Fixed pin is present which is being used
+ * 							@arg 2: Passkey required for pairing. An event will be generated
+ * 							when required.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_get_security_level(uint8_t* mitm_protection, uint8_t* bonding,
+                                      uint8_t* oob_data, uint8_t* passkey_required);
+
+/**
+ * @brief Add addresses of bonded devices into the controller's whitelist.
+ * @note  The command will return an error if there are no devices in the database or if it was unable
+ * 		  to add the device into the whitelist.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_configure_whitelist(void);
+
+/**
+ * @brief Terminate a connection.
+ * @note  A @ref EVT_DISCONN_COMPLETE event will be generated when the link is disconnected.
+ * @param conn_handle Connection handle
+ * @param reason  Reason for requesting disconnection. The error code can be any of ones as specified
+ * 				  for the disconnected command in the HCI specification (See @ref HCI_Error_codes).
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_terminate(uint16_t conn_handle, uint8_t reason);
+
+/**
+ * @brief Clear the security database.
+ * @note  All the devices in the security database will be removed.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_clear_security_database(void);
+
+/**
+ * @brief Allows the security manager to complete the pairing procedure and re-bond with the master.
+ * @note This command can be issued by the application if a @ref EVT_BLUE_GAP_BOND_LOST event is generated.
+ * @param conn_handle 
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_allow_rebond_IDB05A1(uint16_t conn_handle);
+/**
+ * @brief Allows the security manager to complete the pairing procedure and re-bond with the master.
+ * @note This command can be issued by the application if a @ref EVT_BLUE_GAP_BOND_LOST event is generated.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_allow_rebond_IDB04A1(void);
+
+/**
+ * @brief Start the limited discovery procedure.
+ * @note  The controller is commanded to start active scanning. When this procedure is started,
+ *        only the devices in limited discoverable mode are returned to the upper layers.
+ *        The procedure is terminated when either the upper layers issue a command to terminate the
+ *        procedure by issuing the command aci_gap_terminate_gap_procedure() with the procedure code
+ *        set to @ref GAP_LIMITED_DISCOVERY_PROC or a timeout happens. When the procedure is terminated
+ *        due to any of the above  reasons, @ref EVT_BLUE_GAP_PROCEDURE_COMPLETE event is returned with
+ *        the procedure code set to @ref GAP_LIMITED_DISCOVERY_PROC.
+ *        The device found when the procedure is ongoing is returned to the upper layers through the
+ *        event @ref EVT_BLUE_GAP_DEVICE_FOUND (for IDB04A1) and @ref EVT_LE_ADVERTISING_REPORT (for IDB05A1).
+ * @param scanInterval Time interval from when the Controller started its last LE scan until it begins
+ * 					   the subsequent LE scan. The scan interval should be a number in the range
+ * 					   0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					   For a number N, Time = N x 0.625 msec.
+ * @param scanWindow Amount of time for the duration of the LE scan. Scan_Window shall be less than
+ * 					 or equal to Scan_Interval. The scan window should be a number in the range
+ * 					 0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					 For a number N, Time = N x 0.625 msec.
+ * @param own_address_type Type of our address used during advertising (@ref PUBLIC_ADDR, @ref STATIC_RANDOM_ADDR).
+ * @param filterDuplicates Duplicate filtering enabled or not.
+ * 						   @arg 0x00: Do not filter the duplicates
+ * 						   @arg 0x01: Filter duplicates
+ *
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_start_limited_discovery_proc(uint16_t scanInterval, uint16_t scanWindow,
+						uint8_t own_address_type, uint8_t filterDuplicates);
+
+/**
+ * @brief Start the general discovery procedure.
+ * @note  The controller is commanded to start active scanning. The procedure is terminated when
+ * 		  either the upper layers issue a command to terminate the procedure by issuing the command
+ * 		  aci_gap_terminate_gap_procedure() with the procedure code set to GAP_GENERAL_DISCOVERY_PROC
+ * 		  or a timeout happens. When the procedure is terminated due to any of the above reasons,
+ * 		  @ref EVT_BLUE_GAP_PROCEDURE_COMPLETE event is returned with the procedure code set to
+ * 		  @ref GAP_GENERAL_DISCOVERY_PROC. The device found when the procedure is ongoing is returned to
+ * 		  the upper layers through the event @ref EVT_BLUE_GAP_DEVICE_FOUND (for IDB04A1) and @ref EVT_LE_ADVERTISING_REPORT (for IDB05A1).
+ * @param scanInterval Time interval from when the Controller started its last LE scan until it begins
+ * 					   the subsequent LE scan. The scan interval should be a number in the range
+ * 					   0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					   For a number N, Time = N x 0.625 msec.
+ * @param scanWindow Amount of time for the duration of the LE scan. Scan_Window shall be less than
+ * 					 or equal to Scan_Interval. The scan window should be a number in the range
+ * 					 0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					 For a number N, Time = N x 0.625 msec.
+ * @param own_address_type Type of our address used during advertising (@ref PUBLIC_ADDR, @ref STATIC_RANDOM_ADDR).
+ * @param filterDuplicates Duplicate filtering enabled or not.
+ * 						   @arg 0x00: Do not filter the duplicates
+ * 						   @arg 0x01: Filter duplicates
+ *
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_start_general_discovery_proc(uint16_t scanInterval, uint16_t scanWindow,
+						uint8_t own_address_type, uint8_t filterDuplicates);
+
+/**
+ * @brief Start the name discovery procedure.
+ * @note  A LE_Create_Connection call will be made to the controller by GAP with the initiator filter
+ * 		  policy set to “ignore whitelist and process connectable advertising packets only for the
+ * 		  specified device”. Once a connection is established, GATT procedure is started to read the
+ * 		  device name characteristic. When the read is completed (successfully or unsuccessfully),
+ * 		  a @ref EVT_BLUE_GAP_PROCEDURE_COMPLETE event is given to the upper layer. The event also
+ * 		  contains the name of the device if the device name was read successfully.
+ * @param scanInterval Time interval from when the Controller started its last LE scan until it begins
+ * 					   the subsequent LE scan. The scan interval should be a number in the range
+ * 					   0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					   For a number N, Time = N x 0.625 msec.
+ * @param scanWindow Amount of time for the duration of the LE scan. Scan_Window shall be less than
+ * 					 or equal to Scan_Interval. The scan window should be a number in the range
+ * 					 0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					 For a number N, Time = N x 0.625 msec.
+ * @param peer_bdaddr_type Type of the peer address (@ref PUBLIC_ADDR, @ref STATIC_RANDOM_ADDR).
+ * @param peer_bdaddr Address of the peer device with which a connection has to be established.
+ * @param own_bdaddr_type Type of our address used during advertising (PUBLIC_ADDR,STATIC_RANDOM_ADDR).
+ * @param conn_min_interval Minimum value for the connection event interval. This shall be less than or
+ * 							equal to Conn_Interval_Max.\n
+ * 							Range: 0x0006 to 0x0C80\n
+ * 							Time = N x 1.25 msec\n
+ * 							Time Range: 7.5 msec to 4 seconds
+ * @param conn_max_interval Maximum value for the connection event interval. This shall be greater than or
+ * 							equal to Conn_Interval_Min.\n
+ * 							Range: 0x0006 to 0x0C80\n
+ * 							Time = N x 1.25 msec\n
+ * 							Time Range: 7.5 msec to 4 seconds
+ * @param conn_latency Slave latency for the connection in number of connection events.\n
+ * 						 Range: 0x0000 to 0x01F4
+ * @param supervision_timeout Supervision timeout for the LE Link.\n
+ * 							  Range: 0x000A to 0x0C80\n
+ * 							  Time = N x 10 msec\n
+ * 							  Time Range: 100 msec to 32 seconds
+ * @param min_conn_length Minimum length of connection needed for the LE connection.\n
+ * 						  Range: 0x0000 - 0xFFFF\n
+ * 						  Time = N x 0.625 msec.
+ * @param max_conn_length Maximum length of connection needed for the LE connection.\n
+ * 						  Range: 0x0000 - 0xFFFF\n
+ * 						  Time = N x 0.625 msec.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_start_name_discovery_proc(uint16_t scanInterval, uint16_t scanWindow,
+				     uint8_t peer_bdaddr_type, tBDAddr peer_bdaddr,	
+				     uint8_t own_bdaddr_type, uint16_t conn_min_interval,	
+				     uint16_t conn_max_interval, uint16_t conn_latency,	
+				     uint16_t supervision_timeout, uint16_t min_conn_length, 
+				     uint16_t max_conn_length);
+
+/**
+ * @brief Start the auto connection establishment procedure.
+ * @note The devices specified are added to the white list of the controller and a LE_Create_Connection
+ * 		 call will be made to the controller by GAP with the initiator filter policy set to
+ * 		 “use whitelist to determine which advertiser to connect to”. When a command is issued to
+ * 		 terminate the procedure by upper layer, a LE_Create_Connection_Cancel call will be made to the
+ * 		 controller by GAP.
+ * 		 The procedure is terminated when either a connection is successfully established with one of
+ * 		 the specified devices in the white list or the procedure is explicitly terminated by issuing
+ * 		 the command aci_gap_terminate_gap_procedure() with the procedure code set to
+ * 		 @ref GAP_AUTO_CONNECTION_ESTABLISHMENT_PROC. A @ref EVT_BLUE_GAP_PROCEDURE_COMPLETE event is returned with
+ * 		 the procedure code set to @ref GAP_AUTO_CONNECTION_ESTABLISHMENT_PROC.
+ * @param scanInterval Time interval from when the Controller started its last LE scan until it begins
+ * 					   the subsequent LE scan. The scan interval should be a number in the range
+ * 					   0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					   For a number N, Time = N x 0.625 msec.
+ * @param scanWindow Amount of time for the duration of the LE scan. Scan_Window shall be less than
+ * 					 or equal to Scan_Interval. The scan window should be a number in the range
+ * 					 0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					 For a number N, Time = N x 0.625 msec.
+ * @param own_bdaddr_type Type of our address used during advertising (PUBLIC_ADDR,STATIC_RANDOM_ADDR).
+ * @param conn_min_interval Minimum value for the connection event interval. This shall be less than or
+ * 							equal to Conn_Interval_Max.\n
+ * 							Range: 0x0006 to 0x0C80\n
+ * 							Time = N x 1.25 msec\n
+ * 							Time Range: 7.5 msec to 4 seconds
+ * @param conn_max_interval Maximum value for the connection event interval. This shall be greater than or
+ * 							equal to Conn_Interval_Min.\n
+ * 							Range: 0x0006 to 0x0C80\n
+ * 							Time = N x 1.25 msec\n
+ * 							Time Range: 7.5 msec to 4 seconds
+ * @param conn_latency Slave latency for the connection in number of connection events.\n
+ * 						 Range: 0x0000 to 0x01F4
+ * @param supervision_timeout Supervision timeout for the LE Link.\n
+ * 							  Range: 0x000A to 0x0C80\n
+ * 							  Time = N x 10 msec\n
+ * 							  Time Range: 100 msec to 32 seconds
+ * @param min_conn_length Minimum length of connection needed for the LE connection.\n
+ * 						  Range: 0x0000 - 0xFFFF\n
+ * 						  Time = N x 0.625 msec.
+ * @param max_conn_length Maximum length of connection needed for the LE connection.\n
+ * 						  Range: 0x0000 - 0xFFFF\n
+ * 						  Time = N x 0.625 msec.
+ * @cond BLUENRG
+ * @param use_reconn_addr If 1, the provided reconnection address is used as our address during the procedure (the address
+ * 						  has been previously notified to the application through @ref EVT_BLUE_GAP_RECONNECTION_ADDRESS event).\n
+ * @param reconn_addr	Reconnection address used if use_reconn_addr is 1.
+ * @endcond
+ * @param num_whitelist_entries Number of devices that have to be added to the whitelist.
+ * @param addr_array addr_array will contain the addresses that have to be added into the whitelist. The
+ * 					 format of the addr_array should be: address type followed by address.
+ * 					 Example:
+ * 					 @code
+ * 					 uint8_t addr_array[] = {PUBLIC_ADDR,0x01,0x00,0x00,0xe1,0x80,0x02,
+ * 					 	PUBLIC_ADDR,0x02,0x00,0x00,0xe1,0x80,0x02};
+ * 					 @endcode
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_start_auto_conn_establish_proc_IDB05A1(uint16_t scanInterval, uint16_t scanWindow,
+						 uint8_t own_bdaddr_type, uint16_t conn_min_interval,	
+						 uint16_t conn_max_interval, uint16_t conn_latency,	
+						 uint16_t supervision_timeout, uint16_t min_conn_length, 
+						 uint16_t max_conn_length,
+                         uint8_t num_whitelist_entries,
+                         const uint8_t *addr_array);
+tBleStatus aci_gap_start_auto_conn_establish_proc_IDB04A1(uint16_t scanInterval, uint16_t scanWindow,
+						 uint8_t own_bdaddr_type, uint16_t conn_min_interval,	
+						 uint16_t conn_max_interval, uint16_t conn_latency,	
+						 uint16_t supervision_timeout, uint16_t min_conn_length, 
+						 uint16_t max_conn_length,
+                                                 uint8_t use_reconn_addr,
+                                                 const tBDAddr reconn_addr,
+                                                 uint8_t num_whitelist_entries,
+                                                 const uint8_t *addr_array);
+
+/**
+ * @brief Start a general connection establishment procedure.
+ * @note  The host enables scanning in the controller with the scanner filter policy set
+ *        to “accept all advertising packets” and from the scanning results all the devices
+ *        are sent to the upper layer using the event @ref EVT_BLUE_GAP_DEVICE_FOUND (for IDB04A1) and @ref EVT_LE_ADVERTISING_REPORT (for IDB05A1).
+ *        The upper layer then has to select one of the devices to which it wants to connect
+ *        by issuing the command aci_gap_create_connection(). The procedure is terminated
+ *        when a connection is established or the upper layer terminates the procedure by
+ *        issuing the command aci_gap_terminate_gap_procedure() with the procedure code set to
+ *        @ref GAP_GENERAL_CONNECTION_ESTABLISHMENT_PROC. On completion of the procedure a
+ *        @ref EVT_BLUE_GAP_PROCEDURE_COMPLETE event is generated with the procedure code set to
+ *        @ref GAP_GENERAL_CONNECTION_ESTABLISHMENT_PROC.
+ * @param scan_type Passive or active scanning (@ref PASSIVE_SCAN, @ref ACTIVE_SCAN)
+ * @param scan_interval Time interval from when the Controller started its last LE scan until it begins
+ * 					   the subsequent LE scan. The scan interval should be a number in the range
+ * 					   0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					   For a number N, Time = N x 0.625 msec.
+ * @param scan_window Amount of time for the duration of the LE scan. Scan_Window shall be less than
+ * 					 or equal to Scan_Interval. The scan window should be a number in the range
+ * 					 0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					 For a number N, Time = N x 0.625 msec.
+ * @param own_address_type Type of our address used during active scanning (@ref PUBLIC_ADDR, @ref STATIC_RANDOM_ADDR).
+ * @param filter_duplicates Duplicate filtering enabled or not.
+ * 						   @arg 0x00: Do not filter the duplicates
+ * 						   @arg 0x01: Filter duplicates
+ * @cond BLUENRG
+ * @param use_reconn_addr If 1, the provided reconnection address is used as our address during the procedure (the address
+ * 						  has been previously notified to the application through @ref EVT_BLUE_GAP_RECONNECTION_ADDRESS event).\n
+ * @param reconn_addr	Reconnection address used if use_reconn_addr is 1.
+ * @endcond
+ *
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_start_general_conn_establish_proc_IDB05A1(uint8_t scan_type, uint16_t scan_interval, uint16_t scan_window,
+						 uint8_t own_address_type, uint8_t filter_duplicates);
+tBleStatus aci_gap_start_general_conn_establish_proc_IDB04A1(uint8_t scan_type, uint16_t scan_interval, uint16_t scan_window,
+						 uint8_t own_address_type, uint8_t filter_duplicates, uint8_t use_reconn_addr, const tBDAddr reconn_addr);
+
+/**
+ * @brief Start a selective connection establishment procedure.
+ * @note  The GAP adds the specified device addresses into white list and enables scanning in
+ * 		  the controller with the scanner filter policy set to “accept packets only from
+ * 		  devices in whitelist”. All the devices found are sent to the upper layer by the
+ * 		  event @ref EVT_BLUE_GAP_DEVICE_FOUND (for IDB04A1) and @ref EVT_LE_ADVERTISING_REPORT (for IDB05A1). The upper layer then has to select one of the
+ * 		  devices to which it wants to connect by issuing the command aci_gap_create_connection().
+ * 		  On completion of the procedure a  @ref EVT_BLUE_GAP_PROCEDURE_COMPLETE event is generated
+ * 		  with the procedure code set to @ref GAP_SELECTIVE_CONNECTION_ESTABLISHMENT_PROC.
+ * 		  The procedure is terminated when a connection is established or the upper layer terminates
+ * 		  the procedure by issuing the command aci_gap_terminate_gap_procedure with the procedure
+ * 		  code set to @ref GAP_SELECTIVE_CONNECTION_ESTABLISHMENT_PROC.
+ * @param scan_type Passive or active scanning (@ref PASSIVE_SCAN, @ref ACTIVE_SCAN)
+ * @param scan_interval Time interval from when the Controller started its last LE scan until it begins
+ * 					   the subsequent LE scan. The scan interval should be a number in the range
+ * 					   0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					   For a number N, Time = N x 0.625 msec.
+ * @param scan_window Amount of time for the duration of the LE scan. Scan_Window shall be less than
+ * 					 or equal to Scan_Interval. The scan window should be a number in the range
+ * 					 0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					 For a number N, Time = N x 0.625 msec.
+ * @param own_address_type Type of our address used during active scanning (@ref PUBLIC_ADDR, @ref STATIC_RANDOM_ADDR).
+ * @param filter_duplicates Duplicate filtering enabled or not.
+ * 						   @arg 0x00: Do not filter the duplicates
+ * 						   @arg 0x01: Filter duplicates
+ * @param num_whitelist_entries Number of devices that have to be added to the whitelist.
+ * @param addr_array addr_array will contain the addresses that have to be added into the whitelist. The
+ * 					 format of the addr_array should be: address type followed by address.
+ * 					 Example:
+ * 					 @code
+ * 					 uint8_t addr_array[] = {PUBLIC_ADDR,0x01,0x00,0x00,0xe1,0x80,0x02,
+ * 					 	PUBLIC_ADDR,0x02,0x00,0x00,0xe1,0x80,0x02};
+ * 					 @endcode
+ *
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_start_selective_conn_establish_proc(uint8_t scan_type, uint16_t scan_interval, uint16_t scan_window,
+						 uint8_t own_address_type, uint8_t filter_duplicates, uint8_t num_whitelist_entries,
+                         const uint8_t *addr_array);
+
+/**
+ * @brief Start the direct connection establishment procedure.
+ * @note  A LE_Create_Connection call will be made to the controller by GAP with the initiator filter
+ * 		  policy set to “ignore whitelist and process connectable advertising packets only for the
+ * 		  specified device”. The procedure can be terminated explicitly by the upper layer by issuing
+ * 		  the command aci_gap_terminate_gap_procedure(). When a command is issued to terminate the
+ * 		  procedure by upper layer, a LE_Create_Connection_Cancel call will be made to the controller
+ * 		  by GAP.
+ * 		  On termination of the procedure, a @ref EVT_LE_CONN_COMPLETE event is returned. The procedure can
+ * 		  be explicitly terminated by the upper layer by issuing the command
+ * 		  aci_gap_terminate_gap_procedure() with the procedure_code set to @ref GAP_DIRECT_CONNECTION_ESTABLISHMENT_PROC.
+ * @param scanInterval Time interval from when the Controller started its last LE scan until it begins
+ * 					   the subsequent LE scan. The scan interval should be a number in the range
+ * 					   0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					   For a number N, Time = N x 0.625 msec.
+ * @param scanWindow Amount of time for the duration of the LE scan. Scan_Window shall be less than
+ * 					 or equal to Scan_Interval. The scan window should be a number in the range
+ * 					 0x0004 to 0x4000. This corresponds to a time range 2.5 msec to 10240 msec.
+ * 					 For a number N, Time = N x 0.625 msec.
+ * @param peer_bdaddr_type Type of the peer address (@ref PUBLIC_ADDR, @ref STATIC_RANDOM_ADDR).
+ * @param peer_bdaddr Address of the peer device with which a connection has to be established.
+ * @param own_bdaddr_type Type of our address used during advertising (PUBLIC_ADDR,STATIC_RANDOM_ADDR).
+ * @param conn_min_interval Minimum value for the connection event interval. This shall be less than or
+ * 							equal to Conn_Interval_Max.\n
+ * 							Range: 0x0006 to 0x0C80\n
+ * 							Time = N x 1.25 msec\n
+ * 							Time Range: 7.5 msec to 4 seconds
+ * @param conn_max_interval Maximum value for the connection event interval. This shall be greater than or
+ * 							equal to Conn_Interval_Min.\n
+ * 							Range: 0x0006 to 0x0C80\n
+ * 							Time = N x 1.25 msec\n
+ * 							Time Range: 7.5 msec to 4 seconds
+ * @param conn_latency Slave latency for the connection in number of connection events.\n
+ * 						 Range: 0x0000 to 0x01F4
+ * @param supervision_timeout Supervision timeout for the LE Link.\n
+ * 							  Range: 0x000A to 0x0C80\n
+ * 							  Time = N x 10 msec\n
+ * 							  Time Range: 100 msec to 32 seconds
+ * @param min_conn_length Minimum length of connection needed for the LE connection.\n
+ * 						  Range: 0x0000 - 0xFFFF\n
+ * 						  Time = N x 0.625 msec.
+ * @param max_conn_length Maximum length of connection needed for the LE connection.\n
+ * 						  Range: 0x0000 - 0xFFFF\n
+ * 						  Time = N x 0.625 msec.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_create_connection(uint16_t scanInterval, uint16_t scanWindow,
+				     uint8_t peer_bdaddr_type, tBDAddr peer_bdaddr,	
+				     uint8_t own_bdaddr_type, uint16_t conn_min_interval,	
+				     uint16_t conn_max_interval, uint16_t conn_latency,	
+				     uint16_t supervision_timeout, uint16_t min_conn_length, 
+				     uint16_t max_conn_length);
+
+/**
+ * @brief Terminate the specified GAP procedure. @ref EVT_BLUE_GAP_PROCEDURE_COMPLETE event is
+ *  	  returned with the procedure code set to the corresponding procedure.
+ * @param procedure_code One of the procedure codes (@ref gap_procedure_codes "GAP procedure codes").
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_terminate_gap_procedure(uint8_t procedure_code);
+
+/**
+ * @brief Start the connection parameter update procedure.
+ * @note  Allowed by the Central to update the connection parameter of the specified connection.
+ * 		  A Link Layer Connection Update procedure is started on the controller.
+ * 		  On completion of the procedure, a @ref EVT_LE_CONN_UPDATE_COMPLETE event is returned to
+ * 		  the upper layer.
+ * @param conn_handle Handle of the connection for which the update procedure has to be started.
+ * @param conn_min_interval Minimum value for the connection event interval. This shall be less than or
+ * 							equal to Conn_Interval_Max.\n
+ * 							Range: 0x0006 to 0x0C80\n
+ * 							Time = N x 1.25 msec\n
+ * 							Time Range: 7.5 msec to 4 seconds
+ * @param conn_max_interval Maximum value for the connection event interval. This shall be greater than or
+ * 							equal to Conn_Interval_Min.\n
+ * 							Range: 0x0006 to 0x0C80\n
+ * 							Time = N x 1.25 msec\n
+ * 							Time Range: 7.5 msec to 4 seconds
+ * @param conn_latency Slave latency for the connection in number of connection events.\n
+ * 						 Range: 0x0000 to 0x01F4
+ * @param supervision_timeout Supervision timeout for the LE Link.\n
+ * 							  Range: 0x000A to 0x0C80\n
+ * 							  Time = N x 10 msec\n
+ * 							  Time Range: 100 msec to 32 seconds
+ * @param min_conn_length Minimum length of connection needed for the LE connection.\n
+ * 						  Range: 0x0000 - 0xFFFF\n
+ * 						  Time = N x 0.625 msec.
+ * @param max_conn_length Maximum length of connection needed for the LE connection.\n
+ * 						  Range: 0x0000 - 0xFFFF\n
+ * 						  Time = N x 0.625 msec.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_start_connection_update(uint16_t conn_handle, uint16_t conn_min_interval,	
+                                           uint16_t conn_max_interval, uint16_t conn_latency,	
+                                           uint16_t supervision_timeout, uint16_t min_conn_length, 
+                                           uint16_t max_conn_length);
+
+/**
+ * @brief Send a pairing request.
+ * @note  Send the SM pairing request to start a pairing process from a Central. The authentication
+ * 		  requirements and  IO capabilities should be set before issuing this command using
+ * 		  aci_gap_set_io_capability() and aci_gap_set_auth_requirement().
+ * 		  A @ref EVT_BLUE_GAP_PAIRING_CMPLT event is returned after the pairing process is completed.
+ * @param conn_handle Handle of the connection for which the pairing request has to be sent.
+ * @param force_rebond  @arg 0x00: Pairing request is sent only if the device has not previously bonded
+ * 						@arg 0x01: Pairing request will be sent even if the device was previously bonded
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_send_pairing_request(uint16_t conn_handle, uint8_t force_rebond);
+
+/**
+ * @brief Resolve a private address.
+ * @note  This command tries to resolve the address provided with the IRKs present in its database. If
+ * 		  the address is resolved successfully with any one of the IRKs present in the database, it
+ * 		  returns success.
+ * @param address Address to be resolved.
+ * @param[in] actual_address The public or static random address of the peer device, distributed during pairing phase.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_resolve_private_address_IDB05A1(const tBDAddr private_address, tBDAddr actual_address);
+
+/**
+ * @brief Resolve a private address.
+ * @note  This command tries to resolve the address provided with the IRKs present in its database. If
+ * 		  the address is resolved successfully with any one of the IRKs present in the database, it
+ * 		  returns success.
+ * @param address Address to be resolved.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_resolve_private_address_IDB04A1(const tBDAddr private_address);
+
+/**
+ * @brief This command gets the list of bonded devices.
+ * @note  It returns the number of addresses and the corresponding address types and values.
+ *        Example:
+ *        @code
+ *        tBleStatus ret;
+ *        uint8_t num_devices = 0;
+ *        uint8_t device_list[12*7];
+ *        ret = aci_gap_get_bonded_devices(&num_devices, device_list, sizeof(device_list));
+ *        for(int i = 0; i < num_devices; i+=7){
+ *        	uint8_t addr_type = device_list[i];
+ *        	uint8_t addr = device_list[i+1];
+ *        	printf("Type: %d, Addr: %02X%02X%02X%02X%02X%02X\n",addr_type,addr[5],addr[4],addr[3],addr[2],addr[1],addr[0]);
+ *        }
+ *        @endcode
+ *
+ * @param[in] num_devices The number of bonded devices.
+ * @param[in] device_list List of addresses. It contains a sequence of [address type, address] pairs, where address
+ *        				  type can be @ref PUBLIC_ADDR or @arg @ref STATIC_RANDOM_ADDR.
+ * @param device_list_size Maximum size of the device_list buffer used to return the device list.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_get_bonded_devices(uint8_t *num_devices, uint8_t *device_list, uint8_t device_list_size);
+
+/**
+ * @brief Puts the device into broadcast mode
+ * @note  A privacy enabled device uses either a resolvable private address or a non-resolvable private address
+ * 		  as specified in the own_addr_type parameter of the command.
+ * @param adv_interv_min    Minimum advertising interval.
+ * 							Range: 0x00A0 to 0x4000
+ * 							Time = N * 0.625 msec
+ * 							Time Range: 100 ms to 10.24 sec
+ * @param adv_interv_max    Maximum advertising interval.
+ * 						    Range: 0x00A0 to 0x4000
+ * 							Time = N * 0.625 msec
+ * 							Time Range: 100 ms to 10.24 sec
+ * @param adv_type One of the allowed advertising types:
+ *                @arg @ref ADV_SCAN_IND Scannable undirected advertising
+ *                @arg @ref ADV_NONCONN_IND Non connectable undirected advertising
+ * @param own_address_type If Privacy is disabled, the broadcaster address can be
+ * 			               @arg @ref PUBLIC_ADDR.
+ * 			               @arg @ref STATIC_RANDOM_ADDR.
+ *                         If Privacy is enabled, then the broadcaster address can be
+ *                         @arg @ref RESOLVABLE_PRIVATE_ADDR
+ *                         @arg @ref NON_RESOLVABLE_PRIVATE_ADDR
+ * @param adv_data_length Length of the advertising data in the advertising packet
+ * @param adv_data		  Advertising data used by the device while advertising
+ * @param num_whitelist_entries Number of devices to be added to whitelist
+ * @param addr_array It will contain the addresses that have to be added into the whitelist. The
+ * 					 format of the addr_array should be: address type followed by address.
+ * 					 Example:
+ * 					 @code
+ * 					 uint8_t addr_array[] = {PUBLIC_ADDR,0x01,0x00,0x00,0xe1,0x80,0x02,
+ * 					 	PUBLIC_ADDR,0x02,0x00,0x00,0xe1,0x80,0x02};
+ * 					 @endcode
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_set_broadcast_mode_IDB05A1(uint16_t adv_interv_min, uint16_t adv_interv_max, uint8_t adv_type,
+                                      uint8_t own_addr_type, uint8_t adv_data_length, const uint8_t *adv_data,  uint8_t num_whitelist_entries,
+                                      const uint8_t *addr_array);
+
+/**
+ * @brief Starts an observation procedure, when the device is in Observer role.
+ * @note  The host enables scanning in the controller. The advertising reports are sent to the upper layer
+ *        using standard @ref EVT_LE_ADVERTISING_REPORT subevent in @ref EVT_LE_META_EVENT. See Bluetooth
+ *        Core v4.0, Vol. 2, part E, Ch. 7.7.65.2, LE Advertising Report Event.
+ * @param scan_interval Time interval from when the Controller started its last LE scan until it begins the subsequent LE scan.
+ * 		  The scan interval should be a number in the range 0x0004 to 0x4000. This corresponds to a time range from 2.5 msec
+ * 		  to 10240 msec. For a number N, Time = N * 0.625 msec.
+ * @param scan_window Amount of time for the duration of the LE scan. scan_window shall be less than or equal to scan_interval.
+ * 		  The scan window should be a number in the range 0x0004 to 0x4000. This corresponds to a time range from 2.5 msec
+ * 		  to 10240 msec. For a number N, Time = N * 0.625 msec.
+ * @param scan_type Passive or active scanning (@ref PASSIVE_SCAN, @ref ACTIVE_SCAN)
+ * @param own_address_type If Privacy is disabled, then the scanner address can be
+ * 			               @arg @ref PUBLIC_ADDR.
+ * 			               @arg @ref STATIC_RANDOM_ADDR.
+ *                         If Privacy is enabled, then the scanner address can be
+ *                         @arg @ref RESOLVABLE_PRIVATE_ADDR
+ *                         @arg @ref NON_RESOLVABLE_PRIVATE_ADDR
+ * @param filter_duplicates Duplicate filtering enabled or not.
+ * 						   @arg 0x00: Do not filter the duplicates
+ * 						   @arg 0x01: Filter duplicates
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_start_observation_procedure(uint16_t scan_interval, uint16_t scan_window, uint8_t scan_type,
+						 uint8_t own_address_type, uint8_t filter_duplicates);
+
+/**
+ * @brief The command finds whether a device is bonded.
+ * @note If the device is using a resolvable private address and it has been bonded, then the command will return
+ *       BLE_STATUS_SUCCESS.
+ * @param peer_address_type The address type of the peer device
+ *                         @arg @ref PUBLIC_ADDR.
+ * 			               @arg @ref RANDOM_ADDR.
+ * @param peer_address Address used by the peer device while advertising.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gap_is_device_bonded_IDB05A1(uint8_t peer_address_type, const tBDAddr peer_address);
+
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup GAP_Events GAP events
+ * @{
+ */
+
+/**
+ * This event is generated by the controller when the limited discoverable
+ *  mode ends due to timeout (180 seconds). No parameters in the event.
+ */
+#define EVT_BLUE_GAP_LIMITED_DISCOVERABLE     (0x0400)
+
+
+/**
+ * This event is generated when the pairing process has completed successfully
+ * or a pairing procedure timeout has occurred or the pairing has failed.
+ * This is to notify the application that we have paired with a remote device
+ * so that it can take further actions or to notify that a timeout has occurred
+ *  so that the upper layer can decide to disconnect the link. See @ref _evt_gap_pairing_cmplt.
+ */
+#define EVT_BLUE_GAP_PAIRING_CMPLT                (0x0401)
+typedef __packed struct _evt_gap_pairing_cmplt{
+  uint16_t conn_handle; /**< Connection handle on which the pairing procedure completed */
+  /**
+   * 0x00: Pairing Success. Pairing with a remote device was successful\n
+   * 0x01: Pairing Timeout. The SMP timeout has elapsed and no further SMP commands will be processed until reconnection\n
+   * 0x02: Pairing Failed. The pairing failed with the remote device.
+   */
+  uint8_t  status;
+} PACKED evt_gap_pairing_cmplt;
+
+
+/**
+ * This event is generated by the Security manager to the application when a pass key is required for pairing.
+ * When this event is received, the application has to respond with the aci_gap_pass_key_response() command.
+ * See @ref _evt_gap_pass_key_req.
+ */
+#define EVT_BLUE_GAP_PASS_KEY_REQUEST             (0x0402)
+typedef __packed struct _evt_gap_pass_key_req{
+  uint16_t conn_handle; /**< Connection handle for which the passkey has been requested. */
+} PACKED evt_gap_pass_key_req;
+
+
+/**
+ * This event is generated by the Security manager to the application when the application
+ * has set that authorization is required for reading/writing of attributes. This event will
+ * be generated as soon as the pairing is complete. When this event is received,
+ * aci_gap_authorization_response() command should be used by the application.
+ * See @ref _evt_gap_author_req.
+ */
+#define EVT_BLUE_GAP_AUTHORIZATION_REQUEST        (0x0403)
+typedef __packed struct _evt_gap_author_req{
+  uint16_t conn_handle; /**< Connection handle for which authorization has been requested. */
+} PACKED evt_gap_author_req;
+
+/**
+ * This event is generated when the slave security request is successfully sent to the master.
+ * No parameters for this event.
+ */
+#define EVT_BLUE_GAP_SLAVE_SECURITY_INITIATED     (0X0404)
+
+/**
+ * This event is generated when a pairing request is issued in response to a slave security
+ * request from a master which has previously bonded with the slave. When this event is received,
+ * the upper layer has to issue the command aci_gap_allow_rebond() in order to allow the slave
+ * to continue the pairing process with the master. No parameters for this event
+ */
+#define EVT_BLUE_GAP_BOND_LOST                    (0X0405)
+
+/**
+ * The event is given by the GAP layer to the upper layers when a device is discovered during scanning
+ * as a consequence of one of the GAP procedures started by the upper layers. See @ref _evt_gap_device_found.
+ */
+#define EVT_BLUE_GAP_DEVICE_FOUND                 (0x0406)
+typedef __packed struct _evt_gap_device_found{
+  	uint8_t		evt_type;     /**< Type of event (@ref ADV_IND, @ref ADV_DIRECT_IND, @ref ADV_SCAN_IND, @ref ADV_NONCONN_IND, @ref SCAN_RSP) */
+	uint8_t		bdaddr_type;  /**< Type of the peer address (@ref PUBLIC_ADDR, @ref RANDOM_ADDR). */
+	tBDAddr	    bdaddr;       /**< Address of the peer device found during scanning. */
+	uint8_t		data_length;  /**< Length of advertising or scan response data. */
+	uint8_t		data_RSSI[VARIABLE_SIZE]; /**< Advertising or scan response data + RSSI. RSSI is last octect (signed integer). */
+} PACKED evt_gap_device_found;
+
+/**
+ * This event is sent by the GAP to the upper layers when a procedure previously started has been terminated
+ * by the upper layer or has completed for any other reason. See @ref _evt_gap_procedure_complete.
+ */
+#define EVT_BLUE_GAP_PROCEDURE_COMPLETE           (0x0407)
+typedef __packed struct _evt_gap_procedure_complete{
+  uint8_t procedure_code; /**< Terminated procedure. See @ref gap_procedure_codes "GAP procedure codes". */
+  /**
+   * @ref BLE_STATUS_SUCCESS, @ref BLE_STATUS_FAILED or @ref ERR_AUTH_FAILURE (procedure failed
+   * due to authentication requirements).
+   */
+  uint8_t status;
+  /**
+   * Procedure specific data.\n
+   * @li For Name Discovery Procedure:\n
+   * the name of the peer device if the procedure completed successfully.
+   * @li For General Connection Establishment Procedure:\n
+   * The reconnection address written to the peripheral device if the peripheral is privacy enabled
+   */
+  uint8_t data[VARIABLE_SIZE];
+} PACKED evt_gap_procedure_complete;
+
+/**
+ * This event is sent only by a privacy enabled Peripheral. The event is sent to the upper layers when the peripheral
+ * is not able to resolve the private address of the peer device after connecting to it.
+ */
+#define EVT_BLUE_GAP_ADDR_NOT_RESOLVED_IDB05A1          (0x0408)
+typedef __packed struct _evt_gap_addr_not_resolved_IDB05A1{
+  uint16_t conn_handle; /**< Connection handle for which the private address could not be resolved with any of the stored IRK's.  */
+} PACKED evt_gap_addr_not_resolved_IDB05A1;
+/**
+ * This event is raised when the reconnection address is generated during the general connection
+ * establishment procedure. The same address is set into the peer device also as a part of the general
+ * connection establishment procedure. In order to make use of the reconnection address the next time
+ * while connecting to the bonded peripheral, the application needs to use this reconnection address
+ * as its own address as well as the peer address to which it wants to connect. See aci_gap_start_general_conn_establish_proc()
+ * and aci_gap_start_auto_conn_establish_proc().
+ */
+#define EVT_BLUE_GAP_RECONNECTION_ADDRESS_IDB04A1       (0x0408)
+typedef __packed struct _evt_gap_reconnection_addr_IDB04A1{
+  uint8_t reconnection_address[6]; /**< 6 bytes of reconnection address that has been generated */
+} PACKED evt_gap_reconnection_addr_IDB04A1;
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+
+#endif /* __BLUENRG_GAP_ACI_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_gatt_aci.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,1070 @@
+/******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
+* File Name          : bluenrg_gatt_aci.h
+* Author             : AMS - AAS
+* Version            : V1.0.0
+* Date               : 26-Jun-2014
+* Description        : Header file with GATT commands for BlueNRG FW6.3.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __BLUENRG_GATT_ACI_H__
+#define __BLUENRG_GATT_ACI_H__
+
+#include "bluenrg_gatt_server.h"
+
+/**
+ *@addtogroup GATT GATT
+ *@brief GATT layer.
+ *@{
+ */
+
+/**
+ *@defgroup GATT_Functions GATT functions
+ *@brief API for GATT layer.
+ *@{
+ */
+
+/**
+  * @brief  Initialize the GATT layer for server and client roles.
+  * @note   It adds also the GATT service with Service Changed Characteristic.
+ *           Until this command is issued the GATT channel will not process any commands
+  *          even if the connection is opened. This command has to be given
+  *          before using any of the GAP features.
+  * @return Value indicating success or error code.
+  */
+tBleStatus aci_gatt_init(void);
+
+/**
+ * @brief Add a service to the GATT Server. When a service is created in the server, the Host needs
+ *        to reserve the handle ranges for this service using max_attr_records parameter. This
+ *        parameter specifies the maximum number of attribute records that can be added to this
+ *        service (including the service attribute, include attribute, characteristic attribute,
+ *        characteristic value attribute and characteristic descriptor attribute). Handle of the
+ *        created service is returned.
+ * @note  Service declaration is taken from the service pool. The attributes for characteristics and descriptors
+ *            are allocated from the attribute pool.
+ * @param service_uuid_type Type of service UUID (16-bit or 128-bit). See @ref UUID_Types "UUID Types".
+ * @param[in] service_uuid 16-bit or 128-bit UUID based on the UUID Type field
+ * @param service_type Primary or secondary service. See @ref Service_type "Service Type".
+ * @param max_attr_records Maximum number of attribute records that can be added to this service
+ *                         (including the service declaration itself)
+ * @param[out] serviceHandle Handle of the Service. When this service is added to the service,
+ * 							 a handle is allocated by the server to this service. Server also
+ * 							 allocates a range of handles for this service from serviceHandle to
+ * 							 <serviceHandle + max_attr_records>.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_add_serv(uint8_t service_uuid_type,
+			     const uint8_t* service_uuid,
+			     uint8_t service_type,
+			     uint8_t max_attr_records,
+			     uint16_t *serviceHandle);
+
+/**
+ * @brief Include a service given by included_start_handle and included_end_handle to another service
+ * 		  given by service_handle. Attribute server creates an INCLUDE definition attribute and return
+ * 		  the handle of this attribute in included_handle.
+ * @param service_handle Handle of the service to which another service has to be included
+ * @param included_start_handle Start Handle of the service which has to be included in service
+ * @param included_end_handle End Handle of the service which has to be included in service
+ * @param included_uuid_type Type of UUID for included service (16-bit or 128-bit). See @ref Well-Known_UUIDs "Well-Known UUIDs".
+ * @param[in] included_uuid 16-bit or 128-bit UUID.
+ * @param[out] included_handle Handle of the include declaration.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_include_service(uint16_t service_handle, uint16_t included_start_handle,
+				    uint16_t included_end_handle, uint8_t included_uuid_type,
+				    const uint8_t* included_uuid, uint16_t *included_handle);
+
+/**
+ * @brief Add a characteristic to a service.
+ * @param serviceHandle Handle of the service to which the characteristic has to be added.
+ * @param charUuidType Type of characteristic UUID (16-bit or 128-bit). See @ref UUID_Types "UUID Types".
+ *         @arg @ref UUID_TYPE_16
+ *         @arg @ref UUID_TYPE_128
+ * @param charUuid 16-bit or 128-bit UUID.
+ * @param charValueLen Maximum length of the characteristic value.
+ * @param charProperties Bitwise OR values of Characteristic Properties (defined in Volume 3,
+ *        Section 3.3.3.1 of Bluetooth Specification 4.0). See @ref Char_properties "Characteristic properties".
+ * @param secPermissions Security permissions for the added characteristic. See @ref Security_permissions "Security permissions".
+ * 			@arg ATTR_PERMISSION_NONE
+ * 			@arg ATTR_PERMISSION_AUTHEN_READ
+ * 			@arg ATTR_PERMISSION_AUTHOR_READ
+ * 			@arg ATTR_PERMISSION_ENCRY_READ
+ * 			@arg ATTR_PERMISSION_AUTHEN_WRITE
+ * 			@arg ATTR_PERMISSION_AUTHOR_WRITE
+ * 			@arg ATTR_PERMISSION_ENCRY_WRITE
+ * @param gattEvtMask Bit mask that enables events that will be sent to the application by the GATT server
+ * 					  on certain ATT requests. See @ref Gatt_Event_Mask "Gatt Event Mask".
+ * 		   @arg GATT_DONT_NOTIFY_EVENTS
+ * 		   @arg GATT_NOTIFY_ATTRIBUTE_WRITE
+ * 		   @arg GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP
+ * 		   @arg GATT_NOTIFY_READ_REQ_AND_WAIT_FOR_APPL_RESP
+ * @param encryKeySize The minimum encryption key size requirement for this attribute. Valid Range: 7 to 16.
+ * @param isVariable If the attribute has a variable length value field (1) or not (0).
+ * @param charHandle Handle of the Characteristic that has been added. It is the handle of the characteristic declaration.
+ * 		  The attribute that holds the characteristic value is allocated at the next handle, followed by the Client
+ * 		  Characteristic Configuration descriptor if the characteristic has @ref CHAR_PROP_NOTIFY or @ref CHAR_PROP_INDICATE
+ * 		  properties.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_add_char(uint16_t serviceHandle,
+			     uint8_t charUuidType,
+			     const uint8_t* charUuid, 
+			     uint8_t charValueLen, 
+			     uint8_t charProperties,
+			     uint8_t secPermissions,
+			     uint8_t gattEvtMask,
+			     uint8_t encryKeySize,
+			     uint8_t isVariable,
+			     uint16_t* charHandle);
+
+/**
+ * Add a characteristic descriptor to a service.
+ * @param serviceHandle Handle of the service to which the characteristic belongs
+ * @param charHandle Handle of the characteristic to which description has to be added.
+ * @param descUuidType 16-bit or 128-bit UUID. See @ref UUID_Types "UUID Types".
+ *         @arg @ref UUID_TYPE_16
+ *         @arg @ref UUID_TYPE_128
+ * @param[in] uuid UUID of the Characteristic descriptor. It can be one of the UUID assigned by Bluetooth SIG
+ * 		(Well_known_UUIDs) or a user-defined one.
+ * @param descValueMaxLen The maximum length of the descriptor value
+ * @param descValueLen Current Length of the characteristic descriptor value
+ * @param[in] descValue Value of the characteristic description
+ * @param secPermissions Security permissions for the added descriptor. See @ref Security_permissions "Security permissions".
+ * 			@arg ATTR_PERMISSION_NONE
+ * 			@arg ATTR_PERMISSION_AUTHEN_READ
+ * 			@arg ATTR_PERMISSION_AUTHOR_READ
+ * 			@arg ATTR_PERMISSION_ENCRY_READ
+ * 			@arg ATTR_PERMISSION_AUTHEN_WRITE
+ * 			@arg ATTR_PERMISSION_AUTHOR_WRITE
+ * 			@arg ATTR_PERMISSION_ENCRY_WRITE
+ * @param accPermissions Access permissions for the added descriptor. See @ref Access_permissions "Access permissions".
+ * 			@arg ATTR_NO_ACCESS
+ * 			@arg ATTR_ACCESS_READ_ONLY
+ * 			@arg ATTR_ACCESS_WRITE_REQ_ONLY
+ * 			@arg ATTR_ACCESS_READ_WRITE
+ * 			@arg ATTR_ACCESS_WRITE_WITHOUT_RESPONSE
+ * 			@arg ATTR_ACCESS_SIGNED_WRITE_ALLOWED
+ * @param gattEvtMask Bit mask that enables events that will be sent to the application by the GATT server
+ * 					  on certain ATT requests. See @ref Gatt_Event_Mask "Gatt Event Mask".
+ * @param encryKeySize The minimum encryption key size requirement for this attribute. Valid Range: 7 to 16.
+ * @param isVariable If the attribute has a variable length value field (1) or not (0).
+ * @param[out] descHandle Handle of the Characteristic Descriptor.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_add_char_desc(uint16_t serviceHandle,
+                                  uint16_t charHandle,
+                                  uint8_t descUuidType,
+                                  const uint8_t* uuid, 
+                                  uint8_t descValueMaxLen,
+                                  uint8_t descValueLen,
+                                  const void* descValue, 
+                                  uint8_t secPermissions,
+                                  uint8_t accPermissions,
+                                  uint8_t gattEvtMask,
+                                  uint8_t encryKeySize,
+                                  uint8_t isVariable,
+                                  uint16_t* descHandle);
+
+/**
+ * @brief Update a characteristic value in a service.
+ * @note If notifications (or indications) are enabled on that characteristic, a notification (or indication)
+ *   	 will be sent to the client after sending this command to the BlueNRG. The command is queued into the
+ *   	 BlueNRG command queue. If the buffer is full, because previous commands could not be still processed,
+ *   	 the function will return @ref BLE_STATUS_INSUFFICIENT_RESOURCES. This will happen if notifications (or
+ *   	 indications) are enabled and the application calls aci_gatt_update_char_value() at an higher rate
+ *   	 than what is allowed by the link. Throughput on BLE link depends on connection interval and
+ *   	 connection length parameters (decided by the master, see aci_l2cap_connection_parameter_update_request()
+ *   	 for more info on how to suggest new connection parameters from a slave). If the application does not
+ *   	 want to lose notifications because BlueNRG buffer becomes full, it has to retry again till the function
+ *   	 returns @ref BLE_STATUS_SUCCESS or any other error code.\n
+ *   	 Example:\n
+ *   	 Here if BlueNRG buffer become full because BlueNRG was not able to send packets for a while, some
+ *   	 notifications will be lost.
+ *   	 @code
+ *   	 tBleStatus Free_Fall_Notify(void)
+ *		 {
+ *		 	uint8_t val;
+ * 			tBleStatus ret;
+ *
+ *			val = 0x01;
+ *			ret = aci_gatt_update_char_value(accServHandle, freeFallCharHandle, 0, 1, &val);
+ *
+ *			if (ret != BLE_STATUS_SUCCESS){
+ *			  PRINTF("Error while updating ACC characteristic.\n") ;
+ *			  return BLE_STATUS_ERROR ;
+ *			}
+ *		    return BLE_STATUS_SUCCESS;
+ *		 }
+ *		 @endcode
+ *		 Here if BlueNRG buffer become full, the application try again to send the notification.
+ *		 @code
+ *       struct timer t;
+ *       Timer_Set(&t, CLOCK_SECOND*10);
+ *       while(aci_gatt_update_char_value(chatServHandle,TXCharHandle,0,len,array_val)==BLE_STATUS_INSUFFICIENT_RESOURCES){
+ *         // Radio is busy (buffer full).
+ *         if(Timer_Expired(&t))
+ *           break;
+ *       }
+ *       @endcode
+ *
+ * @param servHandle Handle of the service to which characteristic belongs
+ * @param charHandle Handle of the characteristic
+ * @param charValOffset The offset from which the attribute value has to be updated. If this is set to 0,
+ * 						and the attribute value is of variable length, then the length of the attribute will
+ * 						be set to the charValueLen. If the charValOffset is set to a value greater than 0,
+ * 						then the length of the attribute will be set to the maximum length as specified for
+ * 						the attribute while adding the characteristic.
+ * @param charValueLen Length of the characteristic value in octets
+ * @param[in] charValue Characteristic value
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_update_char_value(uint16_t servHandle, 
+				      uint16_t charHandle,
+				      uint8_t charValOffset,
+				      uint8_t charValueLen,   
+				      const void *charValue);
+/**
+ * @brief Delete the specified characteristic from the service.
+ * @param servHandle Handle of the service to which characteristic belongs
+ * @param charHandle Handle of the characteristic to be deleted
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_del_char(uint16_t servHandle, uint16_t charHandle);
+
+/**
+ * @brief Delete the specified service from the GATT server database.
+ * @param servHandle Handle of the service to be deleted
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_del_service(uint16_t servHandle);
+
+/**
+ * @brief Delete the Include definition from the service.
+ * @param servHandle Handle of the service to which Include definition belongs
+ * @param includeServHandle Handle of the Included definition to be deleted
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_del_include_service(uint16_t servHandle, uint16_t includeServHandle);
+
+/**
+ * @brief Perform an ATT MTU exchange procedure.
+ * @note  When the ATT MTU exchange procedure is completed, a @ref EVT_BLUE_ATT_EXCHANGE_MTU_RESP
+ * 		  event is generated. A @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is also generated
+ * 		  to indicate the end of the procedure.
+ * @param conn_handle Connection handle for which the command is given.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_exchange_configuration(uint16_t conn_handle);
+
+/**
+ * @brief Send a @a Find @a Information @a Request.
+ * @note This command is used to obtain the mapping of attribute handles with their associated
+ * 		 types. The responses of the procedure are given through the
+ * 		 @ref EVT_BLUE_ATT_FIND_INFORMATION_RESP event. The end of the procedure is indicated by
+ * 		 a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event.
+ * @param conn_handle Connection handle for which the command is given
+ * @param start_handle Starting handle of the range of attributes to be discovered on the server
+ * @param end_handle Ending handle of the range of attributes to be discovered on the server
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_att_find_information_req(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle);
+
+/**
+ * @brief Send a @a Find @a By @a Type @a Value @a Request
+ * @note The Find By Type Value Request is used to obtain the handles of attributes that
+ * 		 have a given 16-bit UUID attribute type and a given attribute value.
+ * 		 The responses of the procedure are given through the @ref EVT_BLUE_ATT_FIND_BY_TYPE_VAL_RESP event.
+ * 		 The end of the procedure is indicated by a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event.
+ * @param conn_handle Connection handle for which the command is given.
+ * @param start_handle 	First requested handle number
+ * @param end_handle 	Last requested handle number
+ * @param uuid			2 octet UUID to find (little-endian)
+ * @param attr_val_len  Length of attribute value (maximum value is ATT_MTU - 7).
+ * @param attr_val		Attribute value to find
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_att_find_by_type_value_req(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle,
+                                          uint8_t* uuid, uint8_t attr_val_len, uint8_t* attr_val);
+
+/**
+ * @brief Send a @a Read @a By @a Type @a Request
+ * @note  The Read By Type Request is used to obtain the values of attributes where the attribute type
+ * 		  is known but the handle is not known.
+ * 		  The responses of the procedure are given through the @ref EVT_BLUE_ATT_READ_BY_TYPE_RESP event.
+ * 		  The end of the procedure is indicated by a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event.
+ * @param conn_handle Connection handle for which the command is given.
+ * @param start_handle First requested handle number
+ * @param end_handle Last requested handle number
+ * @param uuid_type @arg @ref UUID_TYPE_16
+ *         			@arg @ref UUID_TYPE_128
+ * @param uuid 2 or 16 octet UUID
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_att_read_by_type_req(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle,
+                                    uint8_t  uuid_type, uint8_t* uuid);
+
+/**
+ * @brief Send a @a Read @a By @a Group @a Type @a Request
+ * @note The Read By Group Type Request is used to obtain the values of grouping attributes where the attribute
+ * 		 type is known but the handle is not known. Grouping attributes are defined at GATT layer. The grouping
+ * 		 attribute types are: «Primary Service», «Secondary Service» and «Characteristic».
+ * 		 The responses of the procedure are given through the @ref EVT_BLUE_ATT_READ_BY_GROUP_TYPE_RESP event.
+ * 		 The end of the procedure is indicated by a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE.
+ * @param conn_handle Connection handle for which the command is given.
+ * @param start_handle First requested handle number
+ * @param end_handle Last requested handle number
+ * @param uuid_type @arg @ref UUID_TYPE_16
+ *         			@arg @ref UUID_TYPE_128
+ * @param uuid 2 or 16 octet UUID
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_att_read_by_group_type_req(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle,
+                                    uint8_t  uuid_type, uint8_t* uuid);
+
+/**
+ * @brief Send a @a Prepare @a Write @a Request
+ * @note  The Prepare Write Request is used to request the server to prepare to write the value of an attribute.
+ * 		 The responses of the procedure are given through the @ref EVT_BLUE_ATT_PREPARE_WRITE_RESP event.
+ * 		 The end of the procedure is indicated by a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE.
+ * @param conn_handle Connection handle for which the command is given.
+ * @param attr_handle The handle of the attribute to be written
+ * @param value_offset The offset of the first octet to be written
+ * @param attr_val_len Length of attribute value (maximum value is ATT_MTU - 5).
+ * @param attr_val 	   The value of the attribute to be written
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_att_prepare_write_req(uint16_t conn_handle, uint16_t attr_handle, uint16_t value_offset,
+                                    uint8_t  attr_val_len, uint8_t* attr_val);
+
+/**
+ * @brief Send an @a Execute @a Write @a Request
+ * @note The Execute Write Request is used to request the server to write or cancel the write of all the
+ *  	 prepared values currently held in the prepare queue from this client.
+ *  	 The result of the procedure is given through the @ref EVT_BLUE_ATT_EXEC_WRITE_RESP event.
+ *  	 The end of the procedure is indicated by a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event.
+ * @param conn_handle Connection handle for which the command is given.
+ * @param execute @arg 0x00 – Cancel all prepared writes
+ * 				  @arg 0x01 – Immediately write all pending prepared values.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_att_execute_write_req(uint16_t conn_handle, uint8_t execute);
+
+/**
+ * @brief This command will start the GATT client procedure to discover all primary services on the server.
+ * @note  The responses of the procedure are given through the @ref EVT_BLUE_ATT_READ_BY_GROUP_TYPE_RESP event.
+ * 		  The end of the procedure is indicated by a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event.
+ * @param conn_handle Connection handle for which the command is given.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_disc_all_prim_services(uint16_t conn_handle);
+
+/**
+ * @brief Start the procedure to discover the primary services of the specified UUID on the server.
+ * @note The responses of the procedure are given through the @ref EVT_BLUE_ATT_FIND_BY_TYPE_VAL_RESP event.
+ *  	 The end of the procedure is indicated by a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event.
+ * @param conn_handle Connection handle for which the command is given.
+ * @param uuid_type @arg @ref UUID_TYPE_16
+ *         			@arg @ref UUID_TYPE_128
+ * @param uuid 2 or 16 octet UUID
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_disc_prim_service_by_uuid(uint16_t conn_handle, uint8_t uuid_type, uint8_t* uuid);
+
+/**
+ * @brief Start the procedure to find all included services.
+ * @note The responses of the procedure are given through the @ref EVT_BLUE_ATT_READ_BY_TYPE_RESP event.
+ * 		 The end of the procedure is indicated by a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event.
+ * @param conn_handle Connection handle for which the command is given.
+ * @param start_handle Start handle of the service
+ * @param end_handle End handle of the service
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_find_included_services(uint16_t conn_handle, uint16_t start_handle,
+					   uint16_t end_handle);
+
+/**
+ * @brief Start the procedure to discover all the characteristics of a given service.
+ * @note When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ * 		 Before procedure completion the response packets are given through @ref EVT_BLUE_ATT_READ_BY_TYPE_RESP event.
+ * @param conn_handle Connection handle for which the command is given
+ * @param start_attr_handle Start attribute handle of the service
+ * @param end_attr_handle End attribute handle of the service
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_disc_all_charac_of_serv(uint16_t conn_handle, uint16_t start_attr_handle,
+					    uint16_t end_attr_handle);
+
+/**
+ * @brief Start the procedure to discover all the characteristics specified by a UUID.
+ * @note  When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ *  	  Before procedure completion the response packets are given through
+ *        @ref EVT_BLUE_GATT_DISC_READ_CHAR_BY_UUID_RESP event.
+ * @param conn_handle Connection handle for which the command is given
+ * @param start_handle 	Start attribute handle of the service
+ * @param end_handle 	End attribute handle of the service
+ * @param uuid_type @arg @ref UUID_TYPE_16
+ *         			@arg @ref UUID_TYPE_128
+ * @param uuid 2 or 16 octet UUID
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_disc_charac_by_uuid(uint16_t conn_handle, uint16_t start_handle,
+				                     uint16_t end_handle, uint8_t uuid_type, const uint8_t* uuid);
+
+/**
+ * @brief Start the procedure to discover all characteristic descriptors on the server.
+ * @note When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ * 		 Before procedure completion the response packets are given through @ref EVT_BLUE_ATT_FIND_INFORMATION_RESP event.
+ * @param conn_handle Connection handle for which the command is given.
+ * @param char_val_handle Starting handle of the characteristic
+ * @param char_end_handle End handle of the characteristic
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_disc_all_charac_descriptors(uint16_t conn_handle, uint16_t char_val_handle,
+						uint16_t char_end_handle);
+
+/**
+ * @brief Start the procedure to read the attribute value.
+ * @note  When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ * 		  Before procedure completion the response packet is given through @ref EVT_BLUE_ATT_READ_RESP event.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the characteristic to be read
+ * @return Value indicating success or error code.\n
+ * 		 It can be @ref BLE_STATUS_NOT_ALLOWED in the following cases:\n
+ *		- If the exchange has already taken place\n
+ *		- If GATT is expecting response for previous request\n
+ *		- Already a request is in the queue to be sent\n
+ *		- Channel not open\n
+ *		- Already one GATT procedure is started
+ */
+tBleStatus aci_gatt_read_charac_val(uint16_t conn_handle, uint16_t attr_handle);
+
+/**
+ * @brief Start the procedure to read all the characteristics specified by the UUID.
+ * @note When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ * 		 Before procedure completion the response packets are given through
+ * 		 @ref EVT_BLUE_GATT_DISC_READ_CHAR_BY_UUID_RESP event.
+ * @param conn_handle Connection handle for which the command is given
+ * @param start_handle Starting handle of the range to be searched
+ * @param end_handle End handle of the range to be searched
+ * @param uuid_type @arg @ref UUID_TYPE_16
+ *         			@arg @ref UUID_TYPE_128
+ * @param uuid 2 or 16 octet UUID
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_read_using_charac_uuid(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle,
+                                    uint8_t  uuid_type, uint8_t* uuid);
+
+/**
+ * @brief Start the procedure to read a long characteristic value.
+ * @note When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ * 		 Before procedure completion the response packets are given through @ref EVT_BLUE_ATT_READ_BLOB_RESP event.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the characteristic to be read
+ * @param val_offset Offset from which the value needs to be read
+ * @return Value indicating success or error code.\n
+ * 		 It can be @ref BLE_STATUS_NOT_ALLOWED in the following cases:\n
+ *		- If the exchange has already taken place\n
+ *		- If GATT is expecting response for previous request\n
+ *		- Already a request is in the queue to be sent\n
+ *		- Channel not open\n
+ *		- Already one GATT procedure is started
+ */
+tBleStatus aci_gatt_read_long_charac_val(uint16_t conn_handle, uint16_t attr_handle,
+					 uint16_t val_offset);
+
+/**
+ * @brief Start a procedure to read multiple characteristic values from a server.
+ * @note This sub-procedure is used to read multiple Characteristic Values from a server when the
+ *  	 client knows the Characteristic Value Handles.
+ *  	 When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ *  	 Before procedure completion the response packets are given through
+ *  	 @ref EVT_BLUE_ATT_READ_MULTIPLE_RESP event.
+ * @param conn_handle Connection handle for which the command is given
+ * @param num_handles The number of handles for which the value has to be read
+ * @param set_of_handles The handles for which the attribute value has to be read
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_read_multiple_charac_val(uint16_t conn_handle, uint8_t num_handles, 
+                                             uint8_t* set_of_handles);
+
+/**
+ * @brief Start the procedure to write a characteristic value.
+ * @note When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the characteristic to be written
+ * @param value_len Length of the value to be written
+ * @param[in] attr_value Value to be written
+ * @return Value indicating success or error code.\n
+ * 		 It can be @ref BLE_STATUS_NOT_ALLOWED in the following cases:\n
+ *		- If the exchange has already taken place\n
+ *		- If GATT is expecting response for previous request\n
+ *		- Already a request is in the queue to be sent\n
+ *		- Channel not open\n
+ *		- Already one GATT procedure is started
+ */
+tBleStatus aci_gatt_write_charac_value(uint16_t conn_handle, uint16_t attr_handle,
+				       uint8_t value_len, uint8_t *attr_value);
+
+/**
+ * @brief Start the procedure to write a long characteristic value.
+ * @note When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ * 		 During the procedure, @ref EVT_BLUE_ATT_PREPARE_WRITE_RESP and @ref EVT_BLUE_ATT_EXEC_WRITE_RESP
+ * 		 events are raised.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the attribute to be written
+ * @param val_offset Offset at which the attribute has to be written
+ * @param val_len Length of the value to be written
+ * @param attr_val Value to be written
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_write_long_charac_val(uint16_t conn_handle, uint16_t attr_handle,
+                                          uint16_t val_offset, uint8_t val_len, const uint8_t* attr_val);
+
+/**
+ * @brief Start the procedure to write a characteristic reliably.
+ * @note When the procedure is completed, a  @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ *  	 During the procedure, @ref EVT_BLUE_ATT_PREPARE_WRITE_RESP and @ref EVT_BLUE_ATT_EXEC_WRITE_RESP
+ * 		 events are raised.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the attribute to be written
+ * @param val_offset Offset at which the attribute has to be written
+ * @param val_len Length of the value to be written
+ * @param attr_val Value to be written
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_write_charac_reliable(uint16_t conn_handle, uint16_t attr_handle,
+                                          uint16_t val_offset, uint8_t val_len, uint8_t* attr_val);
+
+/**
+ * @brief Start the procedure to write a long characteristic descriptor.
+ * @note When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ * 		 During the procedure, @ref EVT_BLUE_ATT_PREPARE_WRITE_RESP and @ref EVT_BLUE_ATT_EXEC_WRITE_RESP
+ * 		 events are raised.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the attribute to be written
+ * @param val_offset Offset at which the attribute has to be written
+ * @param val_len Length of the value to be written
+ * @param attr_val Value to be written
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_write_long_charac_desc(uint16_t conn_handle, uint16_t attr_handle,
+                                          uint16_t val_offset, uint8_t val_len, uint8_t* attr_val);
+
+/**
+ * @brief Start the procedure to read a long characteristic value.
+ * @note  When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ * 		  Before procedure completion the response packets are given through @ref EVT_BLUE_ATT_READ_BLOB_RESP
+ * 		  event.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the characteristic descriptor
+ * @param val_offset Offset from which the value needs to be read
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_read_long_charac_desc(uint16_t conn_handle, uint16_t attr_handle,
+                                          uint16_t val_offset);
+
+/**
+ * @brief Start the procedure to write a characteristic descriptor.
+ * @note When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the attribute to be written
+ * @param value_len Length of the value to be written
+ * @param[in] attr_value Value to be written
+ * @return Value indicating success or error code.\n
+ * 		 It can be @ref BLE_STATUS_NOT_ALLOWED in the following cases:\n
+ *		- If the exchange has already taken place\n
+ *		- If GATT is expecting response for previous request\n
+ *		- Already a request is in the queue to be sent\n
+ *		- Channel not open\n
+ *		- Already one GATT procedure is started
+ */
+tBleStatus aci_gatt_write_charac_descriptor(uint16_t conn_handle, uint16_t attr_handle,
+					   uint8_t value_len, uint8_t *attr_value);
+
+/**
+ * @brief Start the procedure to read the descriptor specified.
+ * @note When the procedure is completed, a @ref EVT_BLUE_GATT_PROCEDURE_COMPLETE event is generated.
+ * 		 Before procedure completion the response packet is given through @ref EVT_BLUE_ATT_READ_RESP event.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the descriptor to be read
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_read_charac_desc(uint16_t conn_handle, uint16_t attr_handle);
+
+/**
+ * @brief Start the procedure to write a characteristic value without waiting for any response from the server.
+ * @note No events are generated after this command is executed.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the attribute to be written
+ * @param val_len Length of the value to be written (up to ATT_MTU - 3)
+ * @param[in] attr_val Value to be written
+ * @return Value indicating success or error code.\n
+ * 		 It can be @ref BLE_STATUS_NOT_ALLOWED in the following cases:\n
+ *		- If the exchange has already taken place\n
+ *		- If GATT is expecting response for previous request\n
+ *		- Already a request is in the queue to be sent\n
+ *		- Channel not open\n
+ *		- Already one GATT procedure is started
+ */
+tBleStatus aci_gatt_write_without_response(uint16_t conn_handle, uint16_t attr_handle,
+                                              uint8_t val_len, const uint8_t* attr_val);
+
+/**
+ * @brief Start a signed write without response from the server.
+ * @note  The procedure i used to write a characteristic value with an authentication signature without waiting
+ * 		  for any response from the server. It cannot be used when the link is encrypted.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the attribute to be written
+ * @param val_len Length of the value to be written (up to ATT_MTU - 13).
+ * @param attr_val Value to be written
+ * @return Value indicating success or error code
+ */
+tBleStatus aci_gatt_signed_write_without_resp(uint16_t conn_handle, uint16_t attr_handle,
+                                              uint8_t val_len, uint8_t* attr_val);
+
+/**
+ * @brief Confirm an indication
+ * @note  This command has to be sent when the application receives the event @ref EVT_BLUE_GATT_INDICATION.
+ * @param conn_handle Connection handle for which the command is given.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_confirm_indication(uint16_t conn_handle);
+
+/**
+ * @brief Allow or reject a write request from a client.
+ * @note This command has to be sent by the application when it receives the @ref EVT_BLUE_GATT_WRITE_PERMIT_REQ.
+ *  	 If the write is allowed, then the status and error code has to be set to 0. If the write is not allowed,
+ *  	 then the status has to be set to 1 and the error code has to be set to the error code that has to be
+ *  	 passed to the client.
+ * @param conn_handle Connection handle for which the command is given
+ * @param attr_handle Handle of the attribute that was passed in the event @ref EVT_BLUE_GATT_WRITE_PERMIT_REQ.
+ * @param write_status 0x00: The value can be written to the attribute specified by attr_handle\n
+ * 					   0x01: The value cannot be written to the attribute specified by the attr_handle.
+ * @param err_code  The error code that has to be passed to the client in case the write has to be rejected.
+ * @param att_val_len Length of the value to be written as passed in the event @ref EVT_BLUE_GATT_WRITE_PERMIT_REQ.
+ * @param att_val Value as passed in the event @ref EVT_BLUE_GATT_WRITE_PERMIT_REQ.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_write_response(uint16_t conn_handle,
+                                   uint16_t attr_handle,
+                                   uint8_t write_status,
+                                   uint8_t err_code,
+                                   uint8_t att_val_len,
+                                   uint8_t *att_val);
+
+/**
+ * @brief Allow the GATT server to send a response to a read request from a client.
+ * @note The application has to send this command when it receives the @ref EVT_BLUE_GATT_READ_PERMIT_REQ
+ * 		 or @ref EVT_BLUE_GATT_READ_MULTI_PERMIT_REQ. This command indicates to the stack that the response
+ * 		 can be sent to the client. So if the application wishes to update any of the attributes before
+ * 		 they are read by the client, it has to update the characteristic values using the aci_gatt_update_char_value
+ * 		 and then give this command. The application should perform the required operations within 30 seconds,
+ * 		 otherwise the GATT procedure will go to timeout.
+ * @param conn_handle Connection handle for which the command is given.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_allow_read(uint16_t conn_handle);
+
+/**
+ * @brief Set the security permission for the attribute handle specified.
+ * @note  Currently the setting of security permission is allowed only for client configuration descriptor.
+ * @param service_handle Handle of the service which contains the attribute whose security
+ * 						 permission has to be modified.
+ * @param attr_handle	Handle of the attribute whose security permission has to be modified.
+ * @param security_permission Security permissions for the descriptor. See @ref Security_permissions "Security permissions".
+ * 			@arg ATTR_PERMISSION_NONE
+ * 			@arg ATTR_PERMISSION_AUTHEN_READ
+ * 			@arg ATTR_PERMISSION_AUTHOR_READ
+ * 			@arg ATTR_PERMISSION_ENCRY_READ
+ * 			@arg ATTR_PERMISSION_AUTHEN_WRITE
+ * 			@arg ATTR_PERMISSION_AUTHOR_WRITE
+ * 			@arg ATTR_PERMISSION_ENCRY_WRITE
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_set_security_permission(uint16_t service_handle, uint16_t attr_handle,
+                                            uint8_t security_permission);
+
+/**
+ * @brief This command sets the value of the descriptor specified by charDescHandle.
+ * @param servHandle Handle of the service which contains the descriptor.
+ * @param charHandle Handle of the characteristic which contains the descriptor.
+ * @param charDescHandle Handle of the descriptor whose value has to be set.
+ * @param charDescValOffset Offset from which the descriptor value has to be updated.
+ * @param charDescValueLen Length of the descriptor value
+ * @param[in] charDescValue descriptor value
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_set_desc_value(uint16_t servHandle,
+				   uint16_t charHandle,
+				   uint16_t charDescHandle,
+				   uint16_t charDescValOffset,
+				   uint8_t charDescValueLen,
+				   const void *charDescValue);
+
+/**
+ * @brief Reads the value of the attribute handle specified from the local GATT database.
+ * @param attr_handle Handle of the attribute to read
+ * @param data_len Length of the data buffer.
+ * @param[in] data_len_out_p Length of the read attribute.
+ * @param[in] data Pointer to the buffer that will contain the read value.
+ * 				The buffer will be filled with the attribute value.
+ * 				The length will be the minimum between the provided data_len and the actual length of the
+ * 				attribute (in data_len_out_p).
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_read_handle_value(uint16_t attr_handle, uint16_t data_len, uint16_t *data_len_out_p, uint8_t *data);
+
+   /**
+ * @brief Reads the value of the attribute handle specified from the local GATT database, starting from a given offset.
+ * @param attr_handle Handle of the attribute to read
+ * @param offset      Offset from which the value needs to be read
+ * @param data_len    Length of the data buffer.
+ * @param[in] data_len_out_p Length of the read attribute.
+ * @param[in] data Pointer to the buffer that will contain the read value.
+ * 				The buffer will be filled with the attribute value.
+ * 				The length will be the minimum between the provided data_len and the actual length of the
+ * 				attribute (in data_len_out_p).
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_gatt_read_handle_value_offset_IDB05A1(uint16_t attr_handle, uint8_t offset, uint16_t data_len, uint16_t *data_len_out_p, uint8_t *data);
+
+/**
+ * @}
+ */
+
+
+/**
+ * @defgroup GATT_Events GATT events
+ * The structures are the data field of @ref evt_blue_aci.
+ * @{
+ */
+
+/**
+ * This event is raised to the application by the GATT server when a client modifies any attribute on the server,
+ * if event is enabled (see @ref Gatt_Event_Mask "Gatt Event Mask").
+ * See @ref _evt_gatt_attr_modified_IDB04A1 or @ref _evt_gatt_attr_modified__IDB05A1.
+ */
+#define EVT_BLUE_GATT_ATTRIBUTE_MODIFIED          (0x0C01)
+typedef __packed struct _evt_gatt_attr_modified_IDB05A1{
+  uint16_t conn_handle; /**< The connection handle which modified the attribute. */
+  uint16_t attr_handle; /**< Handle of the attribute that was modified. */
+  uint8_t  data_length; /**< The length of the data */
+  uint16_t  offset; /**< Offset from which the write has been performed by the peer device */
+  uint8_t  att_data[VARIABLE_SIZE]; /**< The new value (length is data_length) */
+} PACKED evt_gatt_attr_modified_IDB05A1;
+
+typedef __packed struct _evt_gatt_attr_modified_IDB04A1{
+  uint16_t conn_handle; /**< The connection handle which modified the attribute. */
+  uint16_t attr_handle; /**< Handle of the attribute that was modified. */
+  uint8_t  data_length; /**< The length of the data */
+  uint8_t  att_data[VARIABLE_SIZE]; /**< The new value (length is data_length) */
+} PACKED evt_gatt_attr_modified_IDB04A1;
+
+/**
+ * This event is generated by the client/server to the application on a GATT timeout (30 seconds).
+ * See @ref _evt_gatt_procedure_timeout.
+ */
+#define EVT_BLUE_GATT_PROCEDURE_TIMEOUT           (0x0C02)
+typedef __packed struct _evt_gatt_procedure_timeout{
+	uint16_t conn_handle; /**< The connection handle on which the GATT procedure has timed out */
+} PACKED evt_gatt_procedure_timeout;
+
+/**
+ * This event is generated in response to an Exchange MTU request. See aci_gatt_exchange_configuration().
+ * See @ref _evt_att_exchange_mtu_resp.
+ */
+#define EVT_BLUE_ATT_EXCHANGE_MTU_RESP		  (0x0C03)
+typedef __packed struct _evt_att_exchange_mtu_resp{
+  uint16_t conn_handle; /**< The connection handle related to the response */
+  uint8_t  event_data_length; /**< Length of following data (always 1). */
+  uint16_t server_rx_mtu; /**< Attribute server receive MTU size */
+} PACKED evt_att_exchange_mtu_resp;
+
+/**
+ * This event is generated in response to a @a Find @a Information @a Request. See aci_att_find_information_req() and
+ * Find Information Response in Bluetooth Core v4.0 spec. See @ref _evt_att_find_information_resp.
+ */
+#define EVT_BLUE_ATT_FIND_INFORMATION_RESP	  (0x0C04)
+typedef __packed struct _evt_att_find_information_resp{
+  uint16_t conn_handle;			/**< The connection handle related to the response */
+  uint8_t  event_data_length;	/**< Length of following data. */
+  uint8_t  format;				/**< The format of the handle_uuid_pair. @arg 1: 16-bit UUIDs @arg 2: 128-bit UUIDs */
+  /**
+   *  A sequence of handle-uuid pairs.\n
+   *  @li if format=1, each pair is:\n
+   *  [2 octets for handle, 2 octets for UUIDs] \n
+   *  @li if format=2, each pair is:\n
+   *  [2 octets for handle, 16 octets for UUIDs]
+   */
+  uint8_t  handle_uuid_pair[VARIABLE_SIZE];
+} PACKED evt_att_find_information_resp;
+
+/**
+ * This event is generated in response to a @a Find @a By @a Type @a Value @a Request. See
+ * Find By Type Value Response in Bluetooth Core v4.0 spec. See @ref _evt_att_find_by_type_val_resp.
+ */
+#define EVT_BLUE_ATT_FIND_BY_TYPE_VAL_RESP	  (0x0C05)
+typedef __packed struct _evt_att_find_by_type_val_resp{
+  uint16_t conn_handle;				/**< The connection handle related to the response */
+  uint8_t  event_data_length;		/**< Length of following data. */
+  /**
+   *  Handles Information List as defined in Bluetooth Core v4.0 spec.
+   *  A sequence of handle pairs: [2 octets for Found Attribute Handle, 2 octets for Group End Handle]
+   */
+  uint8_t  handles_info_list[VARIABLE_SIZE];
+} PACKED evt_att_find_by_type_val_resp;
+
+/**
+ * This event is generated in response to a @a Read @a By @a Type @a Request. See aci_gatt_find_included_services() and
+ * aci_gatt_disc_all_charac_of_serv().
+ * For more info see Read By Type Response in Bluetooth Core v4.0 spec. See @ref _evt_att_read_by_type_resp.
+ */
+#define EVT_BLUE_ATT_READ_BY_TYPE_RESP		  (0x0C06)
+typedef __packed struct _evt_att_read_by_type_resp{
+  uint16_t conn_handle;				/**< The connection handle related to the response */
+  uint8_t  event_data_length;		/**< Length of following data. */
+  uint8_t  handle_value_pair_length; /**< The size of each attribute handle-value pair */
+  /**
+   *  Attribute Data List as defined in Bluetooth Core v4.0 spec.
+   *  A sequence of handle-value pairs: [2 octets for Attribute Handle, (handle_value_pair_length - 2 octets) for Attribute Value]
+   */
+  uint8_t  handle_value_pair[VARIABLE_SIZE];
+} PACKED evt_att_read_by_type_resp;
+
+/**
+ * This event is generated in response to a @a Read @a Request. See aci_gatt_read_charac_val().
+ * For more info see Read Response in Bluetooth Core v4.0 spec. See @ref _evt_att_read_resp.
+ */
+#define EVT_BLUE_ATT_READ_RESP			  (0x0C07)
+typedef __packed struct _evt_att_read_resp{
+  uint16_t conn_handle;				/**< The connection handle related to the response. */
+  uint8_t  event_data_length;		/**< Length of following data. */
+  uint8_t  attribute_value[VARIABLE_SIZE]; /**< The value of the attribute. */
+} PACKED evt_att_read_resp;
+
+/**
+ * This event is generated in response to a @a Read @a Blob @a Request. See aci_gatt_read_long_charac_val().
+ * For more info see Read Blob Response in Bluetooth Core v4.0 spec. See @ref _evt_att_read_blob_resp.
+ */
+#define EVT_BLUE_ATT_READ_BLOB_RESP		  (0x0C08)
+typedef __packed struct _evt_att_read_blob_resp{
+  uint16_t conn_handle;				/**< The connection handle related to the response. */
+  uint8_t  event_data_length;		/**< Length of following data. */
+  uint8_t  part_attribute_value[VARIABLE_SIZE]; /**< Part of the attribute value. */
+} PACKED evt_att_read_blob_resp;
+
+/**
+ * This event is generated in response to a @a Read @a Multiple @a Request.
+ * For more info see Read Multiple Response in Bluetooth Core v4.0 spec. See @ref _evt_att_read_mult_resp.
+ */
+#define EVT_BLUE_ATT_READ_MULTIPLE_RESP		  (0x0C09)
+typedef __packed struct _evt_att_read_mult_resp{
+  uint16_t conn_handle;				/**< The connection handle related to the response. */
+  uint8_t  event_data_length;		/**< Length of following data. */
+  uint8_t  set_of_values[VARIABLE_SIZE]; /**< A set of two or more values.*/
+} PACKED evt_att_read_mult_resp;
+
+/**
+ * This event is generated in response to a @a Read @a By @a Group @a Type @a Request. See aci_gatt_disc_all_prim_services().
+ * For more info see Read By Group type Response in Bluetooth Core v4.0 spec. See @ref _evt_att_read_by_group_resp.
+ */
+#define EVT_BLUE_ATT_READ_BY_GROUP_TYPE_RESP           (0x0C0A)
+typedef __packed struct _evt_att_read_by_group_resp{
+  uint16_t conn_handle;				/**< The connection handle related to the response. */
+  uint8_t  event_data_length;		/**< Length of following data. */
+  uint8_t  attribute_data_length;   /**< The size of each Attribute Data. */
+  /**
+   *  A list of Attribute Data where the attribute data is composed by:
+   *  @li 2 octets for Attribute Handle
+   *  @li 2 octets for End Group Handle
+   *  @li (attribute_data_length - 4) octets for Attribute Value
+   */
+  uint8_t  attribute_data_list[VARIABLE_SIZE];
+} PACKED evt_att_read_by_group_resp;
+
+/**
+ * This event is generated in response to a @a Prepare @a Write @a Request.
+ * For more info see Prepare Write Response in Bluetooth Core v4.0 spec. See @ref _evt_att_prepare_write_resp.
+ */
+#define EVT_BLUE_ATT_PREPARE_WRITE_RESP		  (0x0C0C)
+typedef __packed struct _evt_att_prepare_write_resp{
+  uint16_t conn_handle;				/**< The connection handle related to the response. */
+  uint8_t  event_data_length;		/**< Length of following data. */
+  uint16_t  attribute_handle;		/**< The handle of the attribute to be written. */
+  uint16_t  offset;					/**< The offset of the first octet to be written. */
+  uint8_t  part_attr_value[VARIABLE_SIZE]; /**< The value of the attribute to be written. */
+} PACKED evt_att_prepare_write_resp;
+
+/**
+ * This event is generated in response to an @a Execute @a Write @a Request.
+ * For more info see Execute Write Response in Bluetooth Core v4.0 spec. See @ref _evt_att_exec_write_resp.
+ */
+#define EVT_BLUE_ATT_EXEC_WRITE_RESP		  (0x0C0D)
+typedef __packed struct _evt_att_exec_write_resp{
+  uint16_t conn_handle;			/**< The connection handle related to the response. */
+  uint8_t  event_data_length; 	/**< Always 0. */
+} PACKED evt_att_exec_write_resp;
+
+/**
+ * This event is generated when an indication is received from the server.
+ * For more info see Handle Value Indication in Bluetooth Core v4.0 spec. See @ref _evt_gatt_indication.
+ */
+#define EVT_BLUE_GATT_INDICATION		  (0x0C0E)
+typedef __packed struct _evt_gatt_indication{
+  uint16_t conn_handle;		  			/**< The connection handle related to the event. */
+  uint8_t  event_data_length; 			/**< Length of following data. */
+  uint16_t attr_handle;					/**< The handle of the attribute. */
+  uint8_t  attr_value[VARIABLE_SIZE]; 	/**< The current value of the attribute. */
+} PACKED evt_gatt_indication;
+
+/**
+ * This event is generated when a notification is received from the server.
+ * For more info see Handle Value Notification in Bluetooth Core v4.0 spec. See @ref _evt_gatt_notification.
+ */
+#define EVT_BLUE_GATT_NOTIFICATION		  (0x0C0F)
+typedef __packed struct _evt_gatt_notification{
+  uint16_t conn_handle;					/**< The connection handle related to the event. */
+  uint8_t  event_data_length; 			/**< Length of following data. */
+  uint16_t attr_handle;					/**< The handle of the attribute. */
+  uint8_t  attr_value[VARIABLE_SIZE]; 	/**< The current value of the attribute. */
+} PACKED evt_gatt_attr_notification;
+
+/**
+ * This event is generated when a GATT client procedure completes either with error or successfully.
+ * See @ref _evt_gatt_procedure_complete.
+ */
+#define EVT_BLUE_GATT_PROCEDURE_COMPLETE          (0x0C10)
+typedef __packed struct _evt_gatt_procedure_complete{
+  uint16_t conn_handle; /**< The connection handle on which the GATT procedure has completed */
+  uint8_t  data_length; /**< Length of error_code field (always 1). */
+  /**
+   * Indicates whether the procedure completed with error (BLE_STATUS_FAILED) or was successful (BLE_STATUS_SUCCESS).
+   */
+  uint8_t  error_code;
+} PACKED evt_gatt_procedure_complete;
+
+/**
+ * This event is generated when an Error Response is received from the server. The error response can be given
+ * by the server at the end of one of the GATT discovery procedures. This does not mean that the procedure ended
+ * with an error, but this error event is part of the procedure itself. See @ref _evt_gatt_error_resp.
+ */
+#define EVT_BLUE_GATT_ERROR_RESP                  (0x0C11)
+typedef __packed struct _evt_gatt_error_resp{
+  uint16_t conn_handle;			/**< The connection handle related to the event. */
+  uint8_t  event_data_length;	/**< Length of following data. */
+  uint8_t  req_opcode;			/**< The request that generated this error response. */
+  uint16_t attr_handle;			/**< The attribute handle that generated this error response. */
+  uint8_t  error_code;			/**< The reason why the request has generated an error response. See Error Response in Bluetooth Core v4.0 spec.  */
+} PACKED evt_gatt_error_resp;
+
+/**
+ * This event can be generated during a "Discover Characteristics By UUID" procedure or a "Read using
+ * Characteristic UUID" procedure.
+ * The attribute value will be a service declaration as defined in Bluetooth Core v4.0 spec (vol.3, Part G, ch. 3.3.1),
+ * when a "Discover Characteristics By UUID" has been started. It will be the value of the Characteristic if a
+ * "Read using Characteristic UUID" has been performed. See @ref _evt_gatt_disc_read_char_by_uuid_resp.
+ */
+#define EVT_BLUE_GATT_DISC_READ_CHAR_BY_UUID_RESP (0x0C12)
+typedef __packed struct _evt_gatt_disc_read_char_by_uuid_resp{
+  uint16_t conn_handle;						/**< The connection handle related to the event. */
+  uint8_t  event_data_length;				/**< Length of following data. */
+  uint16_t attr_handle;						/**< The handle of the attribute. */
+  /**
+   * The attribute value will be a service declaration as defined in Bluetooth Core v4.0 spec (vol.3, Part G, ch. 3.3.1),
+   * when a "Discover Characteristics By UUID" has been started. It will be the value of the Characteristic if a
+   * "Read using Characteristic UUID" has been performed.
+   */
+  uint8_t  attr_value[VARIABLE_SIZE];
+} PACKED evt_gatt_disc_read_char_by_uuid_resp;
+
+/**
+ * This event is given to the application when a write request, write command or signed write command
+ * is received by the server from the client. This event will be given to the application only if the
+ * event bit for this event generation is set when the characteristic was added.
+ * When this event is received, the application has to check whether the value being requested for write
+ * is allowed to be written and respond with the command aci_gatt_write_response().
+ * If the write is rejected by the application, then the value of the attribute will not be modified.
+ * In case of a write request, an error response will be sent to the client, with the error code as specified by the application.
+ * In case of write/signed write commands, no response is sent to the client but the attribute is not modified.
+ * See @ref evt_gatt_write_permit_req.
+ */
+#define EVT_BLUE_GATT_WRITE_PERMIT_REQ            (0x0C13)
+typedef __packed struct _evt_gatt_write_permit_req{
+  uint16_t conn_handle; /**< Handle of the connection on which there was the request to write the attribute. */
+  uint16_t attr_handle; /**< The handle of the attribute for which the write request has been made by the client */
+  uint8_t  data_length; /**< Length of data field. */
+  uint8_t  data[VARIABLE_SIZE]; /**< The data that the client has requested to write */
+} PACKED evt_gatt_write_permit_req;
+
+/**
+ * This event is given to the application when a read request or read blob request is received by the server
+ * from the client. This event will be given to the application only if the event bit for this event generation
+ * is set when the characteristic was added.
+ * On receiving this event, the application can update the value of the handle if it desires and when done
+ * it has to use the aci_gatt_allow_read() command to indicate to the stack that it can send the response to the client.
+ * See @ref evt_gatt_read_permit_req.
+ *
+ */
+#define EVT_BLUE_GATT_READ_PERMIT_REQ             (0x0C14)
+typedef __packed struct _evt_gatt_read_permit_req{
+  uint16_t conn_handle; /**< Handle of the connection on which there was the request to read the attribute. */
+  uint16_t attr_handle; /**< The handle of the attribute for which the read request has been made by the client */
+  uint8_t  data_length; /**< Length of offset field. (always 1). */
+  uint8_t  offset;      /**< Contains the offset from which the read has been requested */
+} PACKED evt_gatt_read_permit_req;
+
+/**
+ * This event is given to the application when a read multiple request or read by type request is received
+ * by the server from the client. This event will be given to the application only if the event bit for this
+ * event generation is set when the characteristic was added.
+ * On receiving this event, the application can update the values of the handles if it desires and when done
+ * it has to send the aci_gatt_allow_read command to indicate to the stack that it can send the response to the client.
+ * See @ref evt_gatt_read_multi_permit_req.
+ *
+ */
+#define EVT_BLUE_GATT_READ_MULTI_PERMIT_REQ       (0x0C15)
+typedef __packed struct _evt_gatt_read_multi_permit_req{
+  uint16_t conn_handle; /**< Handle of the connection on which there was the request to read the attribute. */
+  uint8_t  data_length; /**< Length of data field. */
+  uint8_t  data[VARIABLE_SIZE]; /**< The handles of the attributes that have been requested by the client for a read. */
+} PACKED evt_gatt_read_multi_permit_req;
+
+/**
+ * This event is raised when the number of available TX buffers is above a threshold TH (TH = 2).
+ * The event will be given only if a previous ACI command returned with BLE_STATUS_INSUFFICIENT_RESOURCES.
+ * On receiving this event, the application can continue to send notifications by calling aci_gatt_update_char_value().
+ * See @ref evt_gatt_tx_pool_vailable.
+ *
+ */
+#define EVT_BLUE_GATT_TX_POOL_AVAILABLE_IDB05A1   (0x0C16)
+typedef __packed struct _evt_gatt_tx_pool_available{
+  uint16_t conn_handle; /**< Handle of the connection on which there was the request to read the attribute. */
+  uint16_t available_buffers; /**< Length of data field. */
+} PACKED evt_gatt_tx_pool_available;
+
+/**
+ * This event is raised on the server when the client confirms the reception of an indication.
+ */
+#define EVT_BLUE_GATT_SERVER_CONFIRMATION_EVENT_IDB05A1 (0x0C17)
+typedef __packed struct _evt_gatt_server_confirmation{
+  uint16_t conn_handle; /**< Handle of the connection on which there was the request to read the attribute. */
+  uint16_t reserved; /**< Not used. */
+} PACKED evt_gatt_server_confirmation;
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#endif /* __BLUENRG_GATT_ACI_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_gatt_server.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,223 @@
+/******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
+* File Name          : bluenrg_gatt_server.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 19-July-2012
+* Description        : Header file for BlueNRG's GATT server layer.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __BNRG_GATT_SERVER_H__
+#define __BNRG_GATT_SERVER_H__
+
+#include "ble_compiler.h"
+#include "ble_status.h"
+
+/**
+ *@addtogroup GATT GATT
+ *@{
+ */
+
+/**
+ * @anchor Well-Known_UUIDs
+ * @name Well-Known UUIDs
+ * @{
+ */
+#define PRIMARY_SERVICE_UUID                       (0x2800)
+#define SECONDARY_SERVICE_UUID                     (0x2801)
+#define INCLUDE_SERVICE_UUID                       (0x2802)
+#define CHARACTERISTIC_UUID                        (0x2803)
+#define CHAR_EXTENDED_PROP_DESC_UUID               (0x2900)
+#define CHAR_USER_DESC_UUID                        (0x2901)
+#define CHAR_CLIENT_CONFIG_DESC_UUID               (0x2902)
+#define CHAR_SERVER_CONFIG_DESC_UUID               (0x2903)
+#define CHAR_FORMAT_DESC_UUID                      (0x2904)
+#define CHAR_AGGR_FMT_DESC_UUID                    (0x2905)
+#define GATT_SERVICE_UUID                          (0x1801)
+#define GAP_SERVICE_UUID                           (0x1800)
+#define SERVICE_CHANGED_UUID                       (0x2A05)
+/**
+ * @}
+ */
+
+/**
+ * @anchor Access_permissions
+ * @name Access permissions
+ * Access permissions for an attribute
+ * @{
+ */
+#define ATTR_NO_ACCESS                             (0x00)
+#define ATTR_ACCESS_READ_ONLY                      (0x01) 
+#define ATTR_ACCESS_WRITE_REQ_ONLY                 (0x02)
+#define ATTR_ACCESS_READ_WRITE                     (0x03)
+#define ATTR_ACCESS_WRITE_WITHOUT_RESPONSE         (0x04)
+#define ATTR_ACCESS_SIGNED_WRITE_ALLOWED           (0x08)
+/**
+ * Allows all write procedures
+ */
+#define ATTR_ACCESS_WRITE_ANY                      (0x0E)
+/**
+ * @}
+ */
+
+/**
+ * @anchor Char_properties
+ * @name Characteristic properties.
+ * @{
+ */
+#define CHAR_PROP_BROADCAST 					(0x01)
+#define CHAR_PROP_READ							(0x02)
+#define CHAR_PROP_WRITE_WITHOUT_RESP			(0x04)
+#define CHAR_PROP_WRITE			                (0x08)
+#define CHAR_PROP_NOTIFY			            (0x10)
+#define CHAR_PROP_INDICATE			            (0x20)
+#define CHAR_PROP_SIGNED_WRITE                  (0x40)
+#define CHAR_PROP_EXT           	            (0x80)
+/**
+ * @}
+ */
+
+
+/**
+ * @anchor Security_permissions
+ * @name Security permissions for an attribute.
+ * @{
+ */
+#define ATTR_PERMISSION_NONE                       (0x00) /**< No security. */
+#define ATTR_PERMISSION_AUTHEN_READ                (0x01) /**< Need authentication to read */
+#define ATTR_PERMISSION_AUTHOR_READ                (0x02) /**< Need authorization to read */
+#define ATTR_PERMISSION_ENCRY_READ                 (0x04) /**< Link must be encrypted to read */
+#define ATTR_PERMISSION_AUTHEN_WRITE               (0x08) /**< Need authentication to write */
+#define ATTR_PERMISSION_AUTHOR_WRITE               (0x10) /**< Need authorization to write */
+#define ATTR_PERMISSION_ENCRY_WRITE                (0x20) /**< Link must be encrypted for write */
+/**
+ * @}
+ */
+
+/**
+ * @anchor UUID_Types
+ * @name Type of UUID (16 bit or 128 bit).
+ * @{
+ */
+#define UUID_TYPE_16                               (0x01)
+#define UUID_TYPE_128                              (0x02)
+/**
+ * @}
+ */
+
+/**
+ * @anchor Service_type
+ * @name Type of service (primary or secondary)
+ * @{
+ */
+#define PRIMARY_SERVICE                            (0x01)
+#define SECONDARY_SERVICE                          (0x02)
+/**
+ * @}
+ */
+
+/**
+ * @anchor Gatt_Event_Mask
+ * @name Gatt Event Mask
+ * Type of event generated by GATT server
+ * @{
+ */
+#define GATT_DONT_NOTIFY_EVENTS                       (0x00) /**< Do not notify events. */
+#define GATT_NOTIFY_ATTRIBUTE_WRITE                   (0x01) /**< The application will be notified when a client writes to this attribute.
+                                                                  An @ref EVT_BLUE_GATT_ATTRIBUTE_MODIFIED will be issued. */
+#define GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP  (0x02) /**< The application will be notified when a write request, a write cmd
+                                                                    or a signed write cmd are received by the server for this attribute.
+                                                                    An @ref EVT_BLUE_GATT_WRITE_PERMIT_REQ will be issued. */
+#define GATT_NOTIFY_READ_REQ_AND_WAIT_FOR_APPL_RESP   (0x04) /**< The application will be notified when a read request of any type is
+                                                                  received for this attribute. An @ref EVT_BLUE_GATT_READ_PERMIT_REQ will be issued. */
+/**
+ * @}
+ */
+
+/** 
+ * @name Type of characteristic length
+ * See aci_gatt_add_char()
+ * @{
+ */
+#define CHAR_VALUE_LEN_CONSTANT           (0x00)
+#define CHAR_VALUE_LEN_VARIABLE           (0x01)
+/**
+ * @}
+ */
+
+
+/**
+ * @name Encryption key size
+ * @{
+ */
+/**
+ * Minimum encryption key size
+ */
+#define MIN_ENCRY_KEY_SIZE                (7)
+
+/**
+ * Maximum encryption key size
+ */
+#define MAX_ENCRY_KEY_SIZE                (0x10)
+/**
+ * @}
+ */
+
+/**
+ * @name Characteristic Presentation Format
+ * @{
+ */
+typedef __packed struct _charactFormat {
+    uint8_t format;
+    int8_t exp;
+    uint16_t unit;
+    uint8_t name_space;
+    uint16_t desc;
+} PACKED charactFormat;
+
+/**
+ * @}
+ */
+
+/**
+ * @name Format
+ * @{
+ */
+#define FORMAT_UINT8         0x04
+#define FORMAT_UINT16        0x06
+#define FORMAT_SINT16        0x0E
+#define FORMAT_SINT24        0x0F
+/**
+ * @}
+ */
+
+/**
+ * @name Unit
+ * @{
+ */
+#define UNIT_UNITLESS        0x2700
+#define UNIT_TEMP_CELSIUS    0x272F
+#define UNIT_PRESSURE_BAR    0x2780
+/**
+ * @}
+ */
+
+
+/**
+ * ATT MTU size
+ */
+#define ATT_MTU       (23)
+
+/**
+ * @}
+ */
+
+
+
+#endif /* __BNRG_GATT_SERVER_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_hal_aci.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,183 @@
+/******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
+* File Name          : bluenrg_hal_aci.h
+* Author             : AMS - AAS
+* Version            : V1.0.0
+* Date               : 26-Jun-2014
+* Description        : Header file with HCI commands for BlueNRG FW6.3.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __BLUENRG_HAL_ACI_H__
+#define __BLUENRG_HAL_ACI_H__
+
+/**
+ *@addtogroup HAL HAL
+ *@brief Hardware Abstraction Layer.
+ *@{
+ */
+
+/**
+ * @defgroup HAL_Functions HAL functions
+ * @brief API for BlueNRG HAL layer.
+ * @{
+ */
+
+/**
+ * @brief This command writes a value to a low level configure data structure.
+ * @note  It is useful to setup directly some low level parameters for the system at runtime.
+ * @param offset Offset in the data structure. The starting member in the data structure will have an offset 0.\n
+ * 				 See @ref Config_vals.
+ *
+ * @param len Length of data to be written
+ * @param[out] val Data to be written
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_hal_write_config_data(uint8_t offset, 
+                                    uint8_t len,
+                                    const uint8_t *val);
+
+/**
+ * @brief This command requests the value in the low level configure data structure.
+ *        The number of read bytes changes for different Offset.
+ * @param offset Offset in the data structure. The starting member in the data structure will have an offset 0.\n
+ * 				 See @ref Config_vals.
+ * @param data_len Length of the data buffer
+ * @param[out] data_len_out_p length of the data returned by the read.
+ * @param[out] data Read data
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_hal_read_config_data(uint8_t offset, uint16_t data_len, uint8_t *data_len_out_p, uint8_t *data);
+
+/**
+ * @brief This command sets the TX power level of the BlueNRG.
+ * @note  By controlling the EN_HIGH_POWER and the PA_LEVEL, the combination of the 2 determines
+ *        the output power level (dBm).
+ *        When the system starts up or reboots, the default TX power level will be used, which is
+ *        the maximum value of 8dBm. Once this command is given, the output power will be changed
+ *        instantly, regardless if there is Bluetooth communication going on or not. For example,
+ *        for debugging purpose, the BlueNRG can be set to advertise all the time and use this
+ *        command to observe the signal strength changing. The system will keep the last received
+ *        TX power level from the command, i.e. the 2nd command overwrites the previous TX power
+ *        level. The new TX power level remains until another Set TX Power command, or the system
+ *        reboots.\n
+ * @param en_high_power Can be only 0 or 1. Set high power bit on or off. It is strongly adviced to use the
+ * 						right value, depending on the selected hardware configuration for the RF network:
+ * 						normal mode or high power mode.
+ * @param pa_level Can be from 0 to 7. Set the PA level value.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_hal_set_tx_power_level(uint8_t en_high_power, uint8_t pa_level);
+
+/**
+ * @brief This command returns the number of packets sent in Direct Test Mode.
+ * @note  When the Direct TX test is started, a 32-bit counter is used to count how many packets
+ *        have been transmitted. This command can be used to check how many packets have been sent
+ *        during the Direct TX test.\n
+ *        The counter starts from 0 and counts upwards. The counter can wrap and start from 0 again.
+ *        The counter is not cleared until the next Direct TX test starts.
+ * @param[out] number_of_packets Number of packets sent during the last Direct TX test.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_hal_le_tx_test_packet_number(uint32_t *number_of_packets);
+
+/**
+ * @brief Put the device in standby mode.
+ * @note Normally the BlueNRG will automatically enter sleep mode to save power. This command puts the
+ * 		 device into the Standby mode instead of the sleep mode. The difference is that, in sleep mode,
+ * 		 the device can still wake up itself with the internal timer. But in standby mode, this timer is
+ * 		 disabled. So the only possibility to wake up the device is by external signals, e.g. a HCI command
+ * 		 sent via SPI bus.
+ * 		 The command is only accepted when there is no other Bluetooth activity. Otherwise an error code
+ * 		 ERR_COMMAND_DISALLOWED will be returned.
+ *
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_hal_device_standby(void);
+
+/**
+ * @brief This command starts a carrier frequency, i.e. a tone, on a specific channel.
+ * @note  The frequency sine wave at the specific channel may be used for test purpose only.
+ * 		  The channel ID is a parameter from 0 to 39 for the 40 BLE channels, e.g. 0 for 2.402GHz, 1 for 2.404GHz etc.
+ * 		  This command shouldn't be used when normal Bluetooth activities are ongoing.
+ * 		  The tone should be stopped by aci_hal_tone_stop() command.
+ *
+ * @param rf_channel BLE Channel ID, from 0 to 39 meaning (2.402 + 2*N) GHz. Actually the tone will be emitted at the
+ * 					 channel central frequency minus 250 kHz.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_hal_tone_start(uint8_t rf_channel);
+
+/**
+ * This command is used to stop the previously started aci_hal_tone_start() command.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_hal_tone_stop(void);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup Config_vals Offsets and lengths for configuration values.
+ * @brief Offsets and lengths for configuration values.
+ * 		  See aci_hal_write_config_data().
+ * @{
+ */
+
+/**
+ * @name Configuration values.
+ * See @ref aci_hal_write_config_data().
+ * @{
+ */
+#define CONFIG_DATA_PUBADDR_OFFSET          (0x00) /**< Bluetooth public address */
+#define CONFIG_DATA_DIV_OFFSET              (0x06) /**< DIV used to derive CSRK */
+#define CONFIG_DATA_ER_OFFSET               (0x08) /**< Encryption root key used to derive LTK and CSRK */
+#define CONFIG_DATA_IR_OFFSET               (0x18) /**< Identity root key used to derive LTK and CSRK */
+#define CONFIG_DATA_LL_WITHOUT_HOST         (0x2C) /**< Switch on/off Link Layer only mode. Set to 1 to disable Host.
+ 	 	 	 	 	 	 	 	 	 	 	 	 	 It can be written only if aci_hal_write_config_data() is the first command
+ 	 	 	 	 	 	 	 	 	 	 	 	 	 after reset. */
+
+#define CONFIG_DATA_RANDOM_ADDRESS_IDB05A1  (0x80) /**< Stored static random address. Read-only (IDB05A1 only) */
+
+/**
+ * Select the BlueNRG roles and mode configurations.\n
+ * @li Mode 1: slave or master, 1 connection, RAM1 only (small GATT DB)
+ * @li Mode 2: slave or master, 1 connection, RAM1 and RAM2 (large GATT DB)
+ * @li Mode 3: master only, 8 connections, RAM1 and RAM2.
+ */
+#define CONFIG_DATA_ROLE					(0x2D)
+/**
+ * @}
+ */
+
+/**
+ * @name Length for configuration values.
+ * See @ref aci_hal_write_config_data().
+ * @{
+ */
+#define CONFIG_DATA_PUBADDR_LEN             (6)
+#define CONFIG_DATA_DIV_LEN                 (2)
+#define CONFIG_DATA_ER_LEN                  (16)
+#define CONFIG_DATA_IR_LEN                  (16)
+#define CONFIG_DATA_LL_WITHOUT_HOST_LEN     (1)
+#define CONFIG_DATA_ROLE_LEN                (1)
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+
+#endif /* __BLUENRG_HAL_ACI_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_l2cap_aci.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,166 @@
+/******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
+* File Name          : bluenrg_l2cap_aci.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 26-Jun-2014
+* Description        : Header file with L2CAP commands for BlueNRG FW6.3.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __BLUENRG_L2CAP_ACI_H__
+#define __BLUENRG_L2CAP_ACI_H__
+
+/**
+ *@addtogroup L2CAP L2CAP
+ *@brief L2CAP layer.
+ *@{
+ */
+
+/**
+ *@defgroup L2CAP_Functions L2CAP functions
+ *@brief API for L2CAP layer.
+ *@{
+ */
+
+/**
+ * @brief Send an L2CAP Connection Parameter Update request from the slave to the master.
+ * @note  An @ref EVT_BLUE_L2CAP_CONN_UPD_RESP event will be raised when the master will respond to the request
+ * 		  (accepts or rejects).
+ * @param conn_handle Connection handle on which the connection parameter update request has to be sent.
+ * @param interval_min Defines minimum value for the connection event interval in the following manner:
+ *						connIntervalMin = interval_min x 1.25ms
+ * @param interval_max Defines maximum value for the connection event interval in the following manner:
+ * 						connIntervalMax = interval_max x 1.25ms
+ * @param slave_latency Defines the slave latency parameter (number of connection events that can be skipped).
+ * @param timeout_multiplier Defines connection timeout parameter in the following manner:
+ * 							 timeout_multiplier x 10ms.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_l2cap_connection_parameter_update_request(uint16_t conn_handle, uint16_t interval_min,
+							 uint16_t interval_max, uint16_t slave_latency,
+							 uint16_t timeout_multiplier);
+/**
+ * @brief Accept or reject a connection update.
+ * @note  This command should be sent in response to a @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event from the controller.
+ * 		  The accept parameter has to be set if the connection parameters given in the event are acceptable.
+ * @param conn_handle Handle received in @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event.
+ * @param interval_min The connection interval parameter as received in the l2cap connection update request event
+ * @param interval_max The maximum connection interval parameter as received in the l2cap connection update request event.
+ * @param slave_latency The slave latency parameter as received in the l2cap connection update request event.
+ * @param timeout_multiplier The supervision connection timeout parameter as received in the l2cap connection update request event.
+ * @param min_ce_length Minimum length of connection event needed for the LE connection.\n
+ * 						Range: 0x0000 - 0xFFFF\n
+ * 						Time = N x 0.625 msec.
+ * @param max_ce_length Maximum length of connection event needed for the LE connection.\n
+ * 						Range: 0x0000 - 0xFFFF\n
+ * 						Time = N x 0.625 msec.
+ * @param id Identifier received in @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event.
+ * @param accept @arg 0x00: The connection update parameters are not acceptable.
+ *               @arg 0x01: The connection update parameters are acceptable.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_l2cap_connection_parameter_update_response_IDB05A1(uint16_t conn_handle, uint16_t interval_min,
+							 uint16_t interval_max, uint16_t slave_latency,
+							 uint16_t timeout_multiplier, uint16_t min_ce_length, uint16_t max_ce_length,
+                                                         uint8_t id, uint8_t accept);
+ /**
+ * @brief Accept or reject a connection update.
+ * @note  This command should be sent in response to a @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event from the controller.
+ * 		  The accept parameter has to be set if the connection parameters given in the event are acceptable.
+ * @param conn_handle Handle received in @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event.
+ * @param interval_min The connection interval parameter as received in the l2cap connection update request event
+ * @param interval_max The maximum connection interval parameter as received in the l2cap connection update request event.
+ * @param slave_latency The slave latency parameter as received in the l2cap connection update request event.
+ * @param timeout_multiplier The supervision connection timeout parameter as received in the l2cap connection update request event.
+ * @param id Identifier received in @ref EVT_BLUE_L2CAP_CONN_UPD_REQ event.
+ * @param accept @arg 0x00: The connection update parameters are not acceptable.
+ *               @arg 0x01: The connection update parameters are acceptable.
+ * @return Value indicating success or error code.
+ */
+tBleStatus aci_l2cap_connection_parameter_update_response_IDB04A1(uint16_t conn_handle, uint16_t interval_min,
+							 uint16_t interval_max, uint16_t slave_latency,
+							 uint16_t timeout_multiplier, uint8_t id, uint8_t accept);
+
+/**
+ * @}
+ */
+   
+/**
+ * @defgroup L2CAP_Events L2CAP events
+ * @{
+ */
+
+/**
+ * This event is generated when the master responds to the L2CAP connection update request packet.
+ * For more info see CONNECTION PARAMETER UPDATE RESPONSE and COMMAND REJECT in Bluetooth Core v4.0 spec.
+ */
+#define EVT_BLUE_L2CAP_CONN_UPD_RESP		  (0x0800)
+typedef __packed struct _evt_l2cap_conn_upd_resp{
+  uint16_t conn_handle;         /**< The connection handle related to the event. */
+  uint8_t  event_data_length;  /**< Length of following data. */
+/**
+ * @li 0x13 in case of valid L2CAP Connection Parameter Update Response packet.
+ * @li 0x01 in case of Command Reject.
+ */
+  uint8_t  code;
+  uint8_t  identifier;    /**< Identifier of the response. It is equal to the request. */
+  uint16_t l2cap_length;  /**< Length of following data. It should always be 2 */
+/**
+ * Result code (parameters accepted or rejected) in case of Connection Parameter Update
+ * Response (code=0x13) or reason code for rejection in case of Command Reject (code=0x01).
+ */
+  uint16_t result;
+} PACKED evt_l2cap_conn_upd_resp;
+
+/**
+ * This event is generated when the master does not respond to the connection update request
+ * within 30 seconds.
+ */
+#define EVT_BLUE_L2CAP_PROCEDURE_TIMEOUT      (0x0801)
+typedef __packed struct _evt_l2cap_procedure_timeout{
+  uint16_t conn_handle;         /**< The connection handle related to the event. */
+  uint8_t  event_data_length;  /**< Length of following data. It should be always 0 for this event. */
+} PACKED evt_l2cap_procedure_timeout;
+
+/**
+ * The event is given by the L2CAP layer when a connection update request is received from the slave.
+ * The application has to respond by calling aci_l2cap_connection_parameter_update_response().
+ */
+#define EVT_BLUE_L2CAP_CONN_UPD_REQ		  	  (0x0802)
+typedef __packed struct _evt_l2cap_conn_upd_req{
+/**
+ * Handle of the connection for which the connection update request has been received.
+ * The same handle has to be returned while responding to the event with the command
+ * aci_l2cap_connection_parameter_update_response().
+ */
+  uint16_t conn_handle; 
+  uint8_t  event_data_length; /**< Length of following data. */
+/**
+ * This is the identifier which associates the request to the
+ * response. The same identifier has to be returned by the upper
+ * layer in the command aci_l2cap_connection_parameter_update_response().
+ */
+  uint8_t  identifier; 
+  uint16_t l2cap_length;  /**< Length of the L2CAP connection update request. */
+  uint16_t interval_min;  /**< Value as defined in Bluetooth 4.0 spec, Volume 3, Part A 4.20. */
+  uint16_t interval_max;  /**< Value as defined in Bluetooth 4.0 spec, Volume 3, Part A 4.20. */
+  uint16_t slave_latency; /**< Value as defined in Bluetooth 4.0 spec, Volume 3, Part A 4.20. */
+  uint16_t timeout_mult;  /**< Value as defined in Bluetooth 4.0 spec, Volume 3, Part A 4.20. */
+} PACKED evt_l2cap_conn_upd_req;
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+
+#endif /* __BLUENRG_L2CAP_ACI_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_updater_aci.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,78 @@
+/******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
+* File Name          : bluenrg_updater_aci.h
+* Author             : AMS - HEA&RF BU
+* Version            : V1.0.0
+* Date               : 26-Jun-2014
+* Description        : Header file with updater commands for BlueNRG FW6.3.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+#ifndef __BLUENRG_UPDATER_ACI_H__
+#define __BLUENRG_UPDATER_ACI_H__
+
+#include <ble_compiler.h>
+
+/**
+ * @defgroup Updater Updater
+ * @brief Updater.
+ * @{
+ */
+
+/**
+ * @defgroup Updater_Functions Updater functions
+ * @brief API for BlueNRG Updater.
+ * @{
+ */
+
+tBleStatus aci_updater_start(void);
+
+tBleStatus aci_updater_reboot(void);
+
+tBleStatus aci_get_updater_version(uint8_t *version);
+
+tBleStatus aci_get_updater_buffer_size(uint8_t *buffer_size);
+
+tBleStatus aci_erase_blue_flag(void);
+
+tBleStatus aci_reset_blue_flag(void);
+
+tBleStatus aci_updater_erase_sector(uint32_t address);
+
+tBleStatus aci_updater_program_data_block(uint32_t address, uint16_t len, const uint8_t *data);
+
+tBleStatus aci_updater_read_data_block(uint32_t address, uint16_t data_len, uint8_t *data);
+
+tBleStatus aci_updater_calc_crc(uint32_t address, uint8_t num_sectors, uint32_t *crc);
+
+tBleStatus aci_updater_hw_version(uint8_t *version);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup Updater_Events Updater events
+ * @{
+ */
+/** HCI vendor specific event, raised at BlueNRG power-up or reboot. */
+#define EVT_BLUE_INITIALIZED                      (0x0001)
+typedef __packed struct _evt_blue_initialized{
+  uint8_t reason_code;
+} PACKED evt_blue_initialized;
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+
+
+#endif /* __BLUENRG_UPDATER_ACI_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/bluenrg-hci/bluenrg_utils.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,204 @@
+/******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
+* File Name          : bluenrg_utils.h
+* Author             : AMS - VMA, RF Application Team
+* Version            : V1.0.1
+* Date               : 03-October-2014
+* Description        : Header file for BlueNRG utility functions 
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+/**
+ * @file  bluenrg_utils.h
+ * @brief BlueNRG IFR updater & BlueNRG stack updater utility APIs description
+ *
+ * <!-- Copyright 2014 by STMicroelectronics.  All rights reserved.       *80*-->
+**/
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __BLUENRG_UTILS_H
+#define __BLUENRG_UTILS_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "ble_hal_types.h" 
+#include "ble_compiler.h"
+
+/* Exported types ------------------------------------------------------------*/
+typedef struct{
+  uint8_t stack_mode;
+  uint8_t day;
+  uint8_t month;
+  uint8_t year;
+  uint16_t slave_sca_ppm;
+  uint8_t master_sca;
+  uint16_t hs_startup_time; /* In system time units*/
+} IFR_config2_TypeDef;
+
+/**
+ * Structure inside IFR for configuration options. 
+ */
+typedef __packed struct{
+  uint8_t cold_ana_act_config_table[64];
+  uint8_t hot_ana_config_table[64];
+  uint8_t stack_mode;
+  uint8_t gpio_config;
+  uint8_t rsrvd1[2];
+  uint32_t rsrvd2[3];
+  uint32_t max_conn_event_time;
+  uint32_t ls_crystal_period;
+  uint32_t ls_crystal_freq;
+  uint16_t slave_sca_ppm;
+  uint8_t master_sca;
+  uint8_t rsrvd3;
+  uint16_t hs_startup_time; /* In system time units*/
+  uint8_t rsrvd4[2];
+  uint32_t uid;
+  uint8_t rsrvd5;
+  uint8_t year;  
+  uint8_t month;
+  uint8_t day;
+  uint32_t unused[5];
+} PACKED IFR_config_TypeDef;
+
+/* Exported constants --------------------------------------------------------*/
+extern const IFR_config_TypeDef IFR_config;
+
+/* Exported macros -----------------------------------------------------------*/
+#define FROM_US_TO_SYS_TIME(us)      ((uint16_t)(us/2.4414))
+#define FROM_SYS_TIME_TO_US(sys)     ((uint16_t)(sys*2.4414))
+
+/* Convert 2 digit BCD number to an integer */
+#define BCD_TO_INT(bcd) ((bcd & 0xF) + ((bcd & 0xF0) >> 4)*10)
+
+/* Convert 2 digit number to a BCD number */
+#define INT_TO_BCD(n) ((((uint8_t)n/10)<<4) + (uint8_t)n%10)
+
+/** 
+  * Return values 
+  */ 
+#define BLE_UTIL_SUCCESS                 0
+#define BLE_UTIL_UNSUPPORTED_VERSION     1
+#define BLE_UTIL_WRONG_IMAGE_SIZE        2
+#define BLE_UTIL_ACI_ERROR               3
+#define BLE_UTIL_CRC_ERROR               4
+#define BLE_UTIL_PARSE_ERROR             5
+#define BLE_UTIL_WRONG_VERIFY            6
+
+/* Exported functions ------------------------------------------------------- */ 
+/**
+  * @brief  Flash a new firmware using internal bootloader.
+  * @param  fw_image     Pointer to the firmware image (raw binary data,
+  *                      little-endian).
+  * @param  fw_size      Size of the firmware image. The firmware image size shall
+  *                      be multiple of 4 bytes.
+  * @retval int      It returns 0 if successful, or a number not equal to 0 in
+  *                  case of error (ACI_ERROR, UNSUPPORTED_VERSION,
+  *                  WRONG_IMAGE_SIZE, CRC_ERROR)
+  */
+int program_device(const uint8_t *fw_image, uint32_t fw_size);
+
+/**
+  * @brief  Read raw data from IFR (3 64-bytes blocks).
+  * @param  data     Pointer to the buffer that will contain the read data.
+  *                  Its size must be 192 bytes. This data can be parsed by
+  *                  parse_IFR_data_config().
+  * @retval int      It returns 0 if successful, or a number not equal to 0 in
+  *                  case of error (ACI_ERROR, UNSUPPORTED_VERSION)
+  */
+int read_IFR(uint8_t data[192]);
+
+/**
+  * @brief  Verify raw data from IFR (3 64-bytes blocks).
+  * @param  ifr_data Pointer to the buffer that will contain the data to verify.
+  *                  Its size must be 192 bytes.
+  * @retval int      It returns 0 if successful, or a number not equal to 0 in
+                     case of error (ACI_ERROR, BLE_UTIL_WRONG_VERIFY)
+  */
+uint8_t verify_IFR(const IFR_config_TypeDef *ifr_data);
+
+/**
+  * @brief  Program raw data to IFR (3 64-bytes blocks).
+  * @param  ifr_image     Pointer to the buffer that will contain the data to program.
+  *                  Its size must be 192 bytes.
+  * @retval int      It returns 0 if successful
+  */
+int program_IFR(const IFR_config_TypeDef *ifr_image);
+
+/**
+  * @brief  Parse IFR raw data.
+  * @param  data     Pointer to the raw data: last 64 bytes read from IFR sector.
+  * @param  IFR_config     Data structure that will be filled with parsed data.
+  * @retval None
+  */
+void parse_IFR_data_config(const uint8_t data[64], IFR_config2_TypeDef *IFR_config);
+
+/**
+  * @brief  Check for the correctness of parsed data.
+  * @param  IFR_config     Data structure filled with parsed data.
+  * @retval int      It returns 0 if successful, or PARSE_ERROR in case data is
+  *                  not correct.
+  */
+int IFR_validate(IFR_config2_TypeDef *IFR_config);
+
+/**
+  * @brief  Modify IFR data. (Last 64-bytes block).
+  * @param  IFR_config   Structure that contains the new parameters inside the
+  *                      IFR configuration data.
+  * @note   It is highly recommended to parse the IFR configuration from
+  *         a working IFR block (this should be done with parse_IFR_data_config()).
+  *         Then it is possible to write the new parameters inside the IFR_config
+  *         structure.
+  * @param  data     Pointer to the buffer that contains the original data. It
+  *                  will be modified according to the new data in the IFR_config
+  *                  structure. Then this data must be written in the last
+  *                  64-byte block in the IFR.
+  *                  Its size must be 64 bytes.
+  * @retval None
+  */
+void change_IFR_data_config(IFR_config2_TypeDef *IFR_config, uint8_t data[64]);
+
+/**
+  * @brief  Get BlueNRG hardware and firmware version
+  * @param  hwVersion This parameter returns the Hardware Version (i.e. CUT 3.0 = 0x30, CUT 3.1 = 0x31).
+  * @param  fwVersion This parameter returns the Firmware Version in the format 0xJJMN
+  *                   where JJ = Major Version number, M = Minor Version number and N = Patch Version number.
+  * @retval Status of the call
+  */
+uint8_t getBlueNRGVersion(uint8_t *hwVersion, uint16_t *fwVersion);
+
+/**
+  * @brief  Get BlueNRG updater version
+  * @param  version This parameter returns the updater version. If the updadter version is 0x03 
+  *                 the chip has the updater old, needs to update the bootloader.
+  * @retval Status of the call
+  */
+uint8_t getBlueNRGUpdaterVersion(uint8_t *version);
+
+/**
+  * @brief  Get BlueNRG HW version in bootloader mode
+  * @param  version This parameter returns the updater HW version.
+  * @retval Status of the call
+  */
+uint8_t getBlueNRGUpdaterHWVersion(uint8_t *version);
+
+/**
+  * @brief  Verifies if the bootloader is patched or not. This function shall be used to fix a bug on
+  *         the HW bootloader related to the 32 MHz external crystal oscillator.
+  * @retval TRUE if the HW bootloader is already patched, FALSE otherwise
+  */
+uint8_t isHWBootloader_Patched(void);
+   
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__BLUENRG_UTILS_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/platform/btle.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,61 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#ifndef _BTLE_H_
+#define _BTLE_H_
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+#include "ble_hci.h"
+#include "bluenrg_aci.h"
+#include "ble_hci_const.h"
+#include "bluenrg_hal_aci.h"
+#include "stm32_bluenrg_ble.h"
+#include "bluenrg_gap.h"
+#include "bluenrg_gatt_server.h"
+
+extern uint16_t g_gap_service_handle;
+extern uint16_t g_appearance_char_handle;
+extern uint16_t g_device_name_char_handle;
+extern uint16_t g_preferred_connection_parameters_char_handle;
+
+void btleInit(void);
+void SPI_Poll(void);
+void User_Process(void);
+void setConnectable(void);
+void setVersionString(uint8_t hwVersion, uint16_t fwVersion);
+const char* getVersionString(void);
+tBleStatus btleStartRadioScan(uint8_t scan_type,
+                              uint16_t scan_interval,
+                              uint16_t scan_window,
+                              uint8_t own_address_type);
+
+
+extern int btle_handler_pending;
+extern void btle_handler(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/platform/stm32_bluenrg_ble.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,104 @@
+/**
+  ******************************************************************************
+  * @file    stm32_bluenrg_ble.h
+  * @author  CL
+  * @version V1.0.1
+  * @date    15-June-2014
+  * @brief   
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. 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.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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.
+  *
+  ******************************************************************************
+  */ 
+  
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32_BLUENRG_BLE_H
+#define __STM32_BLUENRG_BLE_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif 	 
+	 
+
+#include <stdint.h>
+#include "ble_gp_timer.h"
+#include "ble_hal.h"
+
+/** @addtogroup BSP
+ *  @{
+ */
+
+/** @addtogroup X-NUCLEO-IDB04A1
+ *  @{
+ */
+ 
+/** @addtogroup STM32_BLUENRG_BLE
+ *  @{
+ */
+
+/** @defgroup STM32_BLUENRG_BLE_Exported_Functions 
+ * @{
+ */
+  
+// FIXME: add prototypes for BlueNRG here
+void BlueNRG_RST(void);
+uint8_t BlueNRG_DataPresent(void);
+void    BlueNRG_HW_Bootloader(void);
+int32_t BlueNRG_SPI_Read_All(uint8_t *buffer,
+                             uint8_t buff_size);
+int32_t BlueNRG_SPI_Write(uint8_t* data1,
+                          uint8_t* data2,
+                          uint8_t Nb_bytes1,
+                          uint8_t Nb_bytes2);
+void Clear_SPI_EXTI_Flag(void);
+
+void print_csv_time(void);
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+ 
+/**
+ * @}
+ */
+ 
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32_BLUENRG_BLE_H */
+    
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/utils/ble_payload.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,195 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifdef YOTTA_CFG_MBED_OS
+    #include "mbed-drivers/mbed.h"
+#else
+    #include "mbed.h"
+#endif 
+#include "ble_debug.h"
+
+#ifndef __PAYLOAD_H__
+#define __PAYLOAD_H__
+
+class UnitPayload
+{
+public:
+    uint8_t length;
+    uint8_t id;    
+    uint8_t *data;
+    uint8_t *idptr;    
+
+    
+    
+    void set_length(uint8_t l) {
+        length=l;   
+    }
+
+    void set_id(uint8_t i) {
+        id=i;
+    }
+
+    void set_data(uint8_t* data1) {
+        for(int j=0;j<length;j++)
+        {
+            data[j]=data1[j];
+        }   
+    }
+
+    uint8_t get_length()  {
+        return length;      
+    }
+
+    uint8_t get_id()  {
+        return id;      
+    }
+
+    uint8_t* get_data() {
+        return data;        
+    }
+
+};
+
+class Payload {
+    UnitPayload *payload;
+    int stringLength;
+    int payloadUnitCount;
+    
+public:
+    Payload(const uint8_t *tokenString, uint8_t string_ength);
+    Payload();
+    ~Payload();
+    uint8_t getPayloadUnitCount();
+    
+    uint8_t getIDAtIndex(int index);  
+    uint8_t getLengthAtIndex(int index);   
+    uint8_t* getDataAtIndex(int index);    
+    int8_t getInt8AtIndex(int index);  
+    uint16_t getUint16AtIndex(int index); 
+    uint8_t* getSerializedAdDataAtIndex(int index);         
+};
+
+
+class PayloadUnit {
+private:        
+    uint8_t* lenPtr;
+    uint8_t* adTypePtr;
+    uint8_t* dataPtr;
+    
+public:
+    PayloadUnit() {
+        lenPtr = NULL;
+        adTypePtr = NULL;
+        dataPtr = NULL;
+    }
+    
+    PayloadUnit(uint8_t *len, uint8_t *adType, uint8_t* data) {
+        lenPtr = len;
+        adTypePtr = adType;
+        dataPtr = data;
+    }    
+    
+    void setLenPtr(uint8_t *len)   {
+        lenPtr = len;
+    } 
+    
+    void setAdTypePtr(uint8_t *adType)   {
+        adTypePtr = adType;
+    }  
+    
+    void setDataPtr(uint8_t *data)   {
+        dataPtr = data;
+    }      
+    
+    uint8_t* getLenPtr()   {
+        return lenPtr;
+    } 
+    
+    uint8_t* getAdTypePtr()   {
+        return adTypePtr;
+    }  
+    
+    uint8_t* getDataPtr()   {
+        return dataPtr;
+    }   
+    
+    void printDataAsHex()   {
+        int i = 0;
+        PRINTF("AdData=");
+        for(i=0; i<*lenPtr-1; i++) {
+            PRINTF("0x%x ", dataPtr[i]);
+        }
+        PRINTF("\n");
+    }     
+    
+    void printDataAsString()   {
+        int i = 0;
+        PRINTF("AdData=");
+        for(i=0; i<*lenPtr-1; i++) {
+            PRINTF("%c", dataPtr[i]);
+        }
+        PRINTF("\n");
+    }                                                   
+    
+};
+
+class PayloadPtr {
+private:
+    PayloadUnit *unit;
+    int payloadUnitCount;
+public:    
+    PayloadPtr(const uint8_t *tokenString, uint8_t string_ength) {
+        // initialize private data members
+        int stringLength = string_ength;
+        payloadUnitCount = 0;
+        
+        int index = 0;
+        while(index!=stringLength) {
+            int len=tokenString[index];
+            index=index+1+len;
+            payloadUnitCount++;               
+        }
+        
+        // allocate memory to unit
+        unit = new PayloadUnit[payloadUnitCount];
+        int i = 0;
+        int nextUnitOffset = 0;
+        
+        while(i<payloadUnitCount) {           
+            unit[i].setLenPtr((uint8_t *)tokenString+nextUnitOffset);
+            unit[i].setAdTypePtr((uint8_t *)tokenString+nextUnitOffset+1);
+            unit[i].setDataPtr((uint8_t *)tokenString+nextUnitOffset+2);
+            
+            nextUnitOffset += *unit[i].getLenPtr()+1;
+            i++;
+
+        }
+    }
+    
+    PayloadUnit getUnitAtIndex(int index) {
+        return unit[index];
+    }
+    
+    int getPayloadUnitCount() { return payloadUnitCount; }
+    
+    ~PayloadPtr() {
+        if(unit) delete[] unit;
+
+        unit = NULL;
+    }
+};    
+
+#endif // __PAYLOAD_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/utils/ble_utils.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,46 @@
+/* mbed Microcontroller Library
+* Copyright (c) 2006-2013 ARM Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+// utility functions
+
+#ifndef __UTIL_H__
+#define __UTIL_H__
+
+#include "ble_status.h"
+#include "ble_hal_types.h"
+
+#define STORE_LE_16(buf, val)    ( ((buf)[0] =  (uint8_t) (val)    ) , \
+    ((buf)[1] =  (uint8_t) (val>>8) ) )
+
+#define STORE_LE_32(buf, val)    ( ((buf)[0] =  (uint8_t) (val)     ) , \
+    ((buf)[1] =  (uint8_t) (val>>8)  ) , \
+    ((buf)[2] =  (uint8_t) (val>>16) ) , \
+    ((buf)[3] =  (uint8_t) (val>>24) ) )
+
+#define COPY_UUID_128(uuid_struct, uuid_15, uuid_14, uuid_13, uuid_12, uuid_11, uuid_10, uuid_9, uuid_8, uuid_7, uuid_6, uuid_5, uuid_4, uuid_3, uuid_2, uuid_1, uuid_0) \
+    do {\
+        uuid_struct[0] = uuid_0; uuid_struct[1] = uuid_1; uuid_struct[2] = uuid_2; uuid_struct[3] = uuid_3; \
+        uuid_struct[4] = uuid_4; uuid_struct[5] = uuid_5; uuid_struct[6] = uuid_6; uuid_struct[7] = uuid_7; \
+        uuid_struct[8] = uuid_8; uuid_struct[9] = uuid_9; uuid_struct[10] = uuid_10; uuid_struct[11] = uuid_11; \
+        uuid_struct[12] = uuid_12; uuid_struct[13] = uuid_13; uuid_struct[14] = uuid_14; uuid_struct[15] = uuid_15; \
+    }while(0)
+
+
+tBleStatus getHighPowerAndPALevelValue(int8_t dBMLevel, int8_t& EN_HIGH_POWER, int8_t& PA_LEVEL);
+
+#endif // __UTIL_H__
+		
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shields/TARGET_ST_BLUENRG/x-nucleo-idb0xa1/x_nucleo_idb0xa1_targets.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,75 @@
+/**
+  ******************************************************************************
+  * @file    x_nucleo_idb0xa1_targets.h
+  * @author  AST / EST
+  * @version V0.0.1
+  * @date    24-July-2015
+  * @brief   This header file is intended to manage the differences between 
+  *          the different supported base-boards which might mount the
+  *          X_NUCLEO_IDB0XA1 BlueNRG BLE Expansion Board.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. 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.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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.
+  *
+  ******************************************************************************
+  */ 
+ 
+/* Define to prevent from recursive inclusion --------------------------------*/
+#ifndef _X_NUCLEO_IDB0XA1_TARGETS_H_
+#define _X_NUCLEO_IDB0XA1_TARGETS_H_
+ 
+/*** SPI ***/
+/* Use Arduino I2C Connectors */
+#define IDB0XA1_PIN_SPI_MOSI   (D11)
+#define IDB0XA1_PIN_SPI_MISO   (D12)
+#define IDB0XA1_PIN_SPI_nCS    (A1)
+#define IDB0XA1_PIN_SPI_RESET  (D7)
+#define IDB0XA1_PIN_SPI_IRQ    (A0)
+
+/* NOTE: Define macro 'IDB0XA1_D13_PATCH' if you want to compile for a specifically
+         modified version of the X_NUCLEO_IDB0XA1 expansion board in
+         which pin 'D13' (rather than the standard pin 'D3') is used 
+         in order to provide the SPI serial clock.
+	 Expansion boards modified in this way allow to be used on almost
+	 any Arduino-compliant base board.
+*/
+#if defined(IDB0XA1_D13_PATCH)
+#define IDB0XA1_PIN_SPI_SCK    (D13)
+#else // !defined(IDB0XA1_D13_PATCH)
+#define IDB0XA1_PIN_SPI_SCK    (D3)
+#endif // !defined(IDB0XA1_D13_PATCH)
+
+/* NOTE: Stack Mode 0x04 allows Simultaneous Scanning and Advertisement (SSAdv)
+         Define macro 'SSADV' to enable it
+*/
+#define SSADV
+#if defined(SSADV)
+#define IDB0XA1_STACK_MODE (0x04)
+#else
+#define IDB0XA1_STACK_MODE (0x02)
+#endif
+
+#endif // _X_NUCLEO_IDB0XA1_TARGETS_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/simpleclient.h	Thu Apr 13 04:48:11 2017 +0000
@@ -0,0 +1,362 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __SIMPLECLIENT_H__
+#define __SIMPLECLIENT_H__
+
+#include "mbed-client/m2minterfacefactory.h"
+#include "mbed-client/m2mdevice.h"
+#include "mbed-client/m2minterfaceobserver.h"
+#include "mbed-client/m2minterface.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+#include "mbed-client/m2mconfig.h"
+#include "mbed-client/m2mblockmessage.h"
+#include "security.h"
+#include "mbed.h"
+
+#define ETHERNET        1
+#define WIFI            2
+#define MESH_LOWPAN_ND  3
+#define MESH_THREAD     4
+#define ATMEL           5
+#define MCR20           6
+
+#define STRINGIFY(s) #s
+
+// Check if using mesh networking, define helper
+#if MBED_CONF_APP_NETWORK_INTERFACE == MESH_LOWPAN_ND
+    #define MESH
+#elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_THREAD
+    #define MESH
+#endif
+
+#if defined (MESH) || (MBED_CONF_LWIP_IPV6_ENABLED==true)
+    // Mesh is always IPV6 - also WiFi and ETH can be IPV6 if IPV6 is enabled
+    M2MInterface::NetworkStack NETWORK_STACK = M2MInterface::LwIP_IPv6;
+#else
+    // Everything else - we assume it's IPv4
+    M2MInterface::NetworkStack NETWORK_STACK = M2MInterface::LwIP_IPv4;
+#endif
+
+//Select binding mode: UDP or TCP -- note - Mesh networking is IPv6 UDP ONLY
+#ifdef MESH
+    M2MInterface::BindingMode SOCKET_MODE = M2MInterface::UDP;
+#else
+    // WiFi or Ethernet supports both - TCP by default to avoid
+    // NAT problems, but UDP will also work - IF you configure
+    // your network right.
+    M2MInterface::BindingMode SOCKET_MODE = M2MInterface::TCP;
+#endif
+
+
+// MBED_DOMAIN and MBED_ENDPOINT_NAME come
+// from the security.h file copied from connector.mbed.com
+
+struct MbedClientDevice {
+    const char* Manufacturer;
+    const char* Type;
+    const char* ModelNumber;
+    const char* SerialNumber;
+};
+
+/*
+* Wrapper for mbed client stack that handles all callbacks, error handling, and
+* other shenanigans to make the mbed client stack easier to use.
+*
+* The end user should only have to care about configuring the parameters at the
+* top of this file and making sure they add the security.h file correctly.
+* To add resources you can copy the _TODO__ function and add as many instances as
+* you want.
+*
+*/
+class MbedClient: public M2MInterfaceObserver {
+public:
+
+    // constructor for MbedClient object, initialize private variables
+    MbedClient(struct MbedClientDevice device) {
+        _interface = NULL;
+        _bootstrapped = false;
+        _error = false;
+        _registered = false;
+        _unregistered = false;
+        _register_security = NULL;
+        _value = 0;
+        _object = NULL;
+        _device = device;
+    }
+
+    // de-constructor for MbedClient object, you can ignore this
+    ~MbedClient() {
+        if(_interface) {
+            delete _interface;
+        }
+        if(_register_security){
+            delete _register_security;
+        }
+    }
+
+    // debug printf function
+    void trace_printer(const char* str) {
+        printf("\r\n%s\r\n", str);
+    }
+
+    /*
+    *  Creates M2MInterface using which endpoint can
+    *  setup its name, resource type, life time, connection mode,
+    *  Currently only LwIPv4 is supported.
+    */
+    void create_interface(const char *server_address,
+                          void *handler=NULL) {
+    // Randomizing listening port for Certificate mode connectivity
+    _server_address = server_address;
+    uint16_t port = 0; // Network interface will randomize with port 0
+
+    // create mDS interface object, this is the base object everything else attaches to
+    _interface = M2MInterfaceFactory::create_interface(*this,
+                                                      MBED_ENDPOINT_NAME,       // endpoint name string
+                                                      "test",                   // endpoint type string
+                                                      100,                      // lifetime
+                                                      port,                     // listen port
+                                                      MBED_DOMAIN,              // domain string
+                                                      SOCKET_MODE,              // binding mode
+                                                      NETWORK_STACK,            // network stack
+                                                      "");                      // context address string
+    const char *binding_mode = (SOCKET_MODE == M2MInterface::UDP) ? "UDP" : "TCP";
+    printf("\r\nSOCKET_MODE : %s\r\n", binding_mode);
+    printf("Connecting to %s\r\n", server_address);
+
+    if(_interface) {
+        _interface->set_platform_network_handler(handler);
+    }
+
+    }
+
+    /*
+    *  check private variable to see if the registration was sucessful or not
+    */
+    bool register_successful() {
+        return _registered;
+    }
+
+    /*
+    *  check private variable to see if un-registration was sucessful or not
+    */
+    bool unregister_successful() {
+        return _unregistered;
+    }
+
+    /*
+    *  Creates register server object with mbed device server address and other parameters
+    *  required for client to connect to mbed device server.
+    */
+    M2MSecurity* create_register_object() {
+        // create security object using the interface factory.
+        // this will generate a security ObjectID and ObjectInstance
+        M2MSecurity *security = M2MInterfaceFactory::create_security(M2MSecurity::M2MServer);
+
+        // make sure security ObjectID/ObjectInstance was created successfully
+        if(security) {
+            // Add ResourceID's and values to the security ObjectID/ObjectInstance
+            security->set_resource_value(M2MSecurity::M2MServerUri, _server_address);
+            security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::Certificate);
+            security->set_resource_value(M2MSecurity::ServerPublicKey, SERVER_CERT, sizeof(SERVER_CERT) - 1);
+            security->set_resource_value(M2MSecurity::PublicKey, CERT, sizeof(CERT) - 1);
+            security->set_resource_value(M2MSecurity::Secretkey, KEY, sizeof(KEY) - 1);
+        }
+        return security;
+    }
+
+    /*
+    * Creates device object which contains mandatory resources linked with
+    * device endpoint.
+    */
+    M2MDevice* create_device_object() {
+        // create device objectID/ObjectInstance
+        M2MDevice *device = M2MInterfaceFactory::create_device();
+        // make sure device object was created successfully
+        if(device) {
+            // add resourceID's to device objectID/ObjectInstance
+            device->create_resource(M2MDevice::Manufacturer, _device.Manufacturer);
+            device->create_resource(M2MDevice::DeviceType, _device.Type);
+            device->create_resource(M2MDevice::ModelNumber, _device.ModelNumber);
+            device->create_resource(M2MDevice::SerialNumber, _device.SerialNumber);
+        }
+        return device;
+    }
+
+    /*
+    * register an object
+    */
+    void test_register(M2MSecurity *register_object, M2MObjectList object_list){
+        if(_interface) {
+            // Register function
+            _interface->register_object(register_object, object_list);
+        }
+    }
+
+    /*
+    * unregister all objects
+    */
+    void test_unregister() {
+        if(_interface) {
+            // Unregister function
+            _interface->unregister_object(NULL); // NULL will unregister all objects
+        }
+    }
+
+    //Callback from mbed client stack when the bootstrap
+    // is successful, it returns the mbed Device Server object
+    // which will be used for registering the resources to
+    // mbed Device server.
+    void bootstrap_done(M2MSecurity *server_object){
+        if(server_object) {
+            _bootstrapped = true;
+            _error = false;
+            trace_printer("Bootstrapped");
+        }
+    }
+
+    //Callback from mbed client stack when the registration
+    // is successful, it returns the mbed Device Server object
+    // to which the resources are registered and registered objects.
+    void object_registered(M2MSecurity */*security_object*/, const M2MServer &/*server_object*/){
+        _registered = true;
+        _unregistered = false;
+        trace_printer("Registered object successfully!");
+    }
+
+    //Callback from mbed client stack when the unregistration
+    // is successful, it returns the mbed Device Server object
+    // to which the resources were unregistered.
+    void object_unregistered(M2MSecurity */*server_object*/){
+        trace_printer("Unregistered Object Successfully");
+        _unregistered = true;
+        _registered = false;
+    }
+
+    /*
+    * Callback from mbed client stack when registration is updated
+    */
+    void registration_updated(M2MSecurity */*security_object*/, const M2MServer & /*server_object*/){
+        /* The registration is updated automatically and frequently by the
+        *  mbed client stack. This print statement is turned off because it
+        *  tends to happen alot.
+        */
+        //trace_printer("\r\nRegistration Updated\r\n");
+    }
+
+    // Callback from mbed client stack if any error is encountered
+    // during any of the LWM2M operations. Error type is passed in
+    // the callback.
+    void error(M2MInterface::Error error){
+        _error = true;
+        switch(error){
+            case M2MInterface::AlreadyExists:
+                trace_printer("[ERROR:] M2MInterface::AlreadyExist");
+                break;
+            case M2MInterface::BootstrapFailed:
+                trace_printer("[ERROR:] M2MInterface::BootstrapFailed");
+                break;
+            case M2MInterface::InvalidParameters:
+                trace_printer("[ERROR:] M2MInterface::InvalidParameters");
+                break;
+            case M2MInterface::NotRegistered:
+                trace_printer("[ERROR:] M2MInterface::NotRegistered");
+                break;
+            case M2MInterface::Timeout:
+                trace_printer("[ERROR:] M2MInterface::Timeout");
+                break;
+            case M2MInterface::NetworkError:
+                trace_printer("[ERROR:] M2MInterface::NetworkError");
+                break;
+            case M2MInterface::ResponseParseFailed:
+                trace_printer("[ERROR:] M2MInterface::ResponseParseFailed");
+                break;
+            case M2MInterface::UnknownError:
+                trace_printer("[ERROR:] M2MInterface::UnknownError");
+                break;
+            case M2MInterface::MemoryFail:
+                trace_printer("[ERROR:] M2MInterface::MemoryFail");
+                break;
+            case M2MInterface::NotAllowed:
+                trace_printer("[ERROR:] M2MInterface::NotAllowed");
+                break;
+            case M2MInterface::SecureConnectionFailed:
+                trace_printer("[ERROR:] M2MInterface::SecureConnectionFailed");
+                break;
+            case M2MInterface::DnsResolvingFailed:
+                trace_printer("[ERROR:] M2MInterface::DnsResolvingFailed");
+                break;
+
+            default:
+                break;
+        }
+    }
+
+    /* Callback from mbed client stack if any value has changed
+    *  during PUT operation. Object and its type is passed in
+    *  the callback.
+    *  BaseType enum from m2mbase.h
+    *       Object = 0x0, Resource = 0x1, ObjectInstance = 0x2, ResourceInstance = 0x3
+    */
+    void value_updated(M2MBase *base, M2MBase::BaseType type) {
+        printf("\r\nPUT Request Received!");
+        printf("\r\nName :'%s', \r\nPath : '%s', \r\nType : '%d' (0 for Object, 1 for Resource), \r\nType : '%s'\r\n",
+               base->name(),
+               base->uri_path(),
+               type,
+               base->resource_type()
+               );
+    }
+
+    /*
+    * update the registration period
+    */
+    void test_update_register() {
+        if (_registered) {
+            _interface->update_registration(_register_security, 100);
+        }
+    }
+
+    /*
+    * manually configure the security object private variable
+    */
+   void set_register_object(M2MSecurity *register_object) {
+        if (_register_security == NULL) {
+            _register_security = register_object;
+        }
+    }
+
+private:
+
+    /*
+    *  Private variables used in class
+    */
+    M2MInterface    	     *_interface;
+    M2MSecurity              *_register_security;
+    M2MObject                *_object;
+    volatile bool            _bootstrapped;
+    volatile bool            _error;
+    volatile bool            _registered;
+    volatile bool            _unregistered;
+    int                      _value;
+    struct MbedClientDevice  _device;
+    String                   _server_address;
+};
+
+#endif // __SIMPLECLIENT_H__