NAMote72 Utility Application – Serial Terminal Monitor control for NAMote72 (note: this application replaces the previous na_mote1 test code application)

Dependencies:   SX127x lib_gps lib_mma8451q lib_mpl3115a2 lib_sx9500 mbed

Fork of na_mote1 by wayne roberts

See wiki Page for a detailed

This is a link to the wiki page

Files at this revision

API Documentation at this revision

Comitter:
Wayne Roberts
Date:
Tue May 29 14:03:22 2018 -0700
Parent:
16:b8648db86f86
Commit message:
update to latest libraries

Changed in this revision

SX127x.lib Show annotated file Show diff for this revision Revisions of this file
aes.cpp Show diff for this revision Revisions of this file
lib_gps.lib Show annotated file Show diff for this revision Revisions of this file
lorabase.h Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
oslmic.h Show diff for this revision Revisions of this file
rtc_alarm.c Show diff for this revision Revisions of this file
rtc_alarm.h Show diff for this revision Revisions of this file
diff -r b8648db86f86 -r f73dbeca8736 SX127x.lib
--- a/SX127x.lib	Fri Jan 15 18:28:50 2016 +0000
+++ b/SX127x.lib	Tue May 29 14:03:22 2018 -0700
@@ -1,1 +1,1 @@
-http://mbed.org/users/dudmuck/code/SX127x/#fa867fb9d2f6
+https://mbed.org/users/dudmuck/code/SX127x/#4b9fd8969428
diff -r b8648db86f86 -r f73dbeca8736 aes.cpp
--- a/aes.cpp	Fri Jan 15 18:28:50 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,367 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014 IBM Corporation.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    IBM Zurich Research Lab - initial API, implementation and documentation
- *******************************************************************************/
-
-#include "oslmic.h"
-
-#define AES_MICSUB 0x30 // internal use only
-
-static const u4_t AES_RCON[10] = { 
-    0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 
-    0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000
-};
-
-static const u1_t AES_S[256] = {
-  0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 
-  0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 
-  0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, 
-  0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, 
-  0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 
-  0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, 
-  0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, 
-  0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 
-  0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, 
-  0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, 
-  0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 
-  0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, 
-  0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, 
-  0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 
-  0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, 
-  0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16,
-};
-
-static const u4_t AES_E1[256] = {
-  0xC66363A5, 0xF87C7C84, 0xEE777799, 0xF67B7B8D, 0xFFF2F20D, 0xD66B6BBD, 0xDE6F6FB1, 0x91C5C554, 
-  0x60303050, 0x02010103, 0xCE6767A9, 0x562B2B7D, 0xE7FEFE19, 0xB5D7D762, 0x4DABABE6, 0xEC76769A, 
-  0x8FCACA45, 0x1F82829D, 0x89C9C940, 0xFA7D7D87, 0xEFFAFA15, 0xB25959EB, 0x8E4747C9, 0xFBF0F00B, 
-  0x41ADADEC, 0xB3D4D467, 0x5FA2A2FD, 0x45AFAFEA, 0x239C9CBF, 0x53A4A4F7, 0xE4727296, 0x9BC0C05B, 
-  0x75B7B7C2, 0xE1FDFD1C, 0x3D9393AE, 0x4C26266A, 0x6C36365A, 0x7E3F3F41, 0xF5F7F702, 0x83CCCC4F, 
-  0x6834345C, 0x51A5A5F4, 0xD1E5E534, 0xF9F1F108, 0xE2717193, 0xABD8D873, 0x62313153, 0x2A15153F, 
-  0x0804040C, 0x95C7C752, 0x46232365, 0x9DC3C35E, 0x30181828, 0x379696A1, 0x0A05050F, 0x2F9A9AB5, 
-  0x0E070709, 0x24121236, 0x1B80809B, 0xDFE2E23D, 0xCDEBEB26, 0x4E272769, 0x7FB2B2CD, 0xEA75759F, 
-  0x1209091B, 0x1D83839E, 0x582C2C74, 0x341A1A2E, 0x361B1B2D, 0xDC6E6EB2, 0xB45A5AEE, 0x5BA0A0FB, 
-  0xA45252F6, 0x763B3B4D, 0xB7D6D661, 0x7DB3B3CE, 0x5229297B, 0xDDE3E33E, 0x5E2F2F71, 0x13848497, 
-  0xA65353F5, 0xB9D1D168, 0x00000000, 0xC1EDED2C, 0x40202060, 0xE3FCFC1F, 0x79B1B1C8, 0xB65B5BED, 
-  0xD46A6ABE, 0x8DCBCB46, 0x67BEBED9, 0x7239394B, 0x944A4ADE, 0x984C4CD4, 0xB05858E8, 0x85CFCF4A, 
-  0xBBD0D06B, 0xC5EFEF2A, 0x4FAAAAE5, 0xEDFBFB16, 0x864343C5, 0x9A4D4DD7, 0x66333355, 0x11858594, 
-  0x8A4545CF, 0xE9F9F910, 0x04020206, 0xFE7F7F81, 0xA05050F0, 0x783C3C44, 0x259F9FBA, 0x4BA8A8E3, 
-  0xA25151F3, 0x5DA3A3FE, 0x804040C0, 0x058F8F8A, 0x3F9292AD, 0x219D9DBC, 0x70383848, 0xF1F5F504, 
-  0x63BCBCDF, 0x77B6B6C1, 0xAFDADA75, 0x42212163, 0x20101030, 0xE5FFFF1A, 0xFDF3F30E, 0xBFD2D26D, 
-  0x81CDCD4C, 0x180C0C14, 0x26131335, 0xC3ECEC2F, 0xBE5F5FE1, 0x359797A2, 0x884444CC, 0x2E171739, 
-  0x93C4C457, 0x55A7A7F2, 0xFC7E7E82, 0x7A3D3D47, 0xC86464AC, 0xBA5D5DE7, 0x3219192B, 0xE6737395, 
-  0xC06060A0, 0x19818198, 0x9E4F4FD1, 0xA3DCDC7F, 0x44222266, 0x542A2A7E, 0x3B9090AB, 0x0B888883, 
-  0x8C4646CA, 0xC7EEEE29, 0x6BB8B8D3, 0x2814143C, 0xA7DEDE79, 0xBC5E5EE2, 0x160B0B1D, 0xADDBDB76, 
-  0xDBE0E03B, 0x64323256, 0x743A3A4E, 0x140A0A1E, 0x924949DB, 0x0C06060A, 0x4824246C, 0xB85C5CE4, 
-  0x9FC2C25D, 0xBDD3D36E, 0x43ACACEF, 0xC46262A6, 0x399191A8, 0x319595A4, 0xD3E4E437, 0xF279798B, 
-  0xD5E7E732, 0x8BC8C843, 0x6E373759, 0xDA6D6DB7, 0x018D8D8C, 0xB1D5D564, 0x9C4E4ED2, 0x49A9A9E0, 
-  0xD86C6CB4, 0xAC5656FA, 0xF3F4F407, 0xCFEAEA25, 0xCA6565AF, 0xF47A7A8E, 0x47AEAEE9, 0x10080818, 
-  0x6FBABAD5, 0xF0787888, 0x4A25256F, 0x5C2E2E72, 0x381C1C24, 0x57A6A6F1, 0x73B4B4C7, 0x97C6C651, 
-  0xCBE8E823, 0xA1DDDD7C, 0xE874749C, 0x3E1F1F21, 0x964B4BDD, 0x61BDBDDC, 0x0D8B8B86, 0x0F8A8A85, 
-  0xE0707090, 0x7C3E3E42, 0x71B5B5C4, 0xCC6666AA, 0x904848D8, 0x06030305, 0xF7F6F601, 0x1C0E0E12, 
-  0xC26161A3, 0x6A35355F, 0xAE5757F9, 0x69B9B9D0, 0x17868691, 0x99C1C158, 0x3A1D1D27, 0x279E9EB9, 
-  0xD9E1E138, 0xEBF8F813, 0x2B9898B3, 0x22111133, 0xD26969BB, 0xA9D9D970, 0x078E8E89, 0x339494A7, 
-  0x2D9B9BB6, 0x3C1E1E22, 0x15878792, 0xC9E9E920, 0x87CECE49, 0xAA5555FF, 0x50282878, 0xA5DFDF7A, 
-  0x038C8C8F, 0x59A1A1F8, 0x09898980, 0x1A0D0D17, 0x65BFBFDA, 0xD7E6E631, 0x844242C6, 0xD06868B8, 
-  0x824141C3, 0x299999B0, 0x5A2D2D77, 0x1E0F0F11, 0x7BB0B0CB, 0xA85454FC, 0x6DBBBBD6, 0x2C16163A, 
-};
-
-static const u4_t AES_E2[256] = {
-  0xA5C66363, 0x84F87C7C, 0x99EE7777, 0x8DF67B7B, 0x0DFFF2F2, 0xBDD66B6B, 0xB1DE6F6F, 0x5491C5C5, 
-  0x50603030, 0x03020101, 0xA9CE6767, 0x7D562B2B, 0x19E7FEFE, 0x62B5D7D7, 0xE64DABAB, 0x9AEC7676, 
-  0x458FCACA, 0x9D1F8282, 0x4089C9C9, 0x87FA7D7D, 0x15EFFAFA, 0xEBB25959, 0xC98E4747, 0x0BFBF0F0, 
-  0xEC41ADAD, 0x67B3D4D4, 0xFD5FA2A2, 0xEA45AFAF, 0xBF239C9C, 0xF753A4A4, 0x96E47272, 0x5B9BC0C0, 
-  0xC275B7B7, 0x1CE1FDFD, 0xAE3D9393, 0x6A4C2626, 0x5A6C3636, 0x417E3F3F, 0x02F5F7F7, 0x4F83CCCC, 
-  0x5C683434, 0xF451A5A5, 0x34D1E5E5, 0x08F9F1F1, 0x93E27171, 0x73ABD8D8, 0x53623131, 0x3F2A1515, 
-  0x0C080404, 0x5295C7C7, 0x65462323, 0x5E9DC3C3, 0x28301818, 0xA1379696, 0x0F0A0505, 0xB52F9A9A, 
-  0x090E0707, 0x36241212, 0x9B1B8080, 0x3DDFE2E2, 0x26CDEBEB, 0x694E2727, 0xCD7FB2B2, 0x9FEA7575, 
-  0x1B120909, 0x9E1D8383, 0x74582C2C, 0x2E341A1A, 0x2D361B1B, 0xB2DC6E6E, 0xEEB45A5A, 0xFB5BA0A0, 
-  0xF6A45252, 0x4D763B3B, 0x61B7D6D6, 0xCE7DB3B3, 0x7B522929, 0x3EDDE3E3, 0x715E2F2F, 0x97138484, 
-  0xF5A65353, 0x68B9D1D1, 0x00000000, 0x2CC1EDED, 0x60402020, 0x1FE3FCFC, 0xC879B1B1, 0xEDB65B5B, 
-  0xBED46A6A, 0x468DCBCB, 0xD967BEBE, 0x4B723939, 0xDE944A4A, 0xD4984C4C, 0xE8B05858, 0x4A85CFCF, 
-  0x6BBBD0D0, 0x2AC5EFEF, 0xE54FAAAA, 0x16EDFBFB, 0xC5864343, 0xD79A4D4D, 0x55663333, 0x94118585, 
-  0xCF8A4545, 0x10E9F9F9, 0x06040202, 0x81FE7F7F, 0xF0A05050, 0x44783C3C, 0xBA259F9F, 0xE34BA8A8, 
-  0xF3A25151, 0xFE5DA3A3, 0xC0804040, 0x8A058F8F, 0xAD3F9292, 0xBC219D9D, 0x48703838, 0x04F1F5F5, 
-  0xDF63BCBC, 0xC177B6B6, 0x75AFDADA, 0x63422121, 0x30201010, 0x1AE5FFFF, 0x0EFDF3F3, 0x6DBFD2D2, 
-  0x4C81CDCD, 0x14180C0C, 0x35261313, 0x2FC3ECEC, 0xE1BE5F5F, 0xA2359797, 0xCC884444, 0x392E1717, 
-  0x5793C4C4, 0xF255A7A7, 0x82FC7E7E, 0x477A3D3D, 0xACC86464, 0xE7BA5D5D, 0x2B321919, 0x95E67373, 
-  0xA0C06060, 0x98198181, 0xD19E4F4F, 0x7FA3DCDC, 0x66442222, 0x7E542A2A, 0xAB3B9090, 0x830B8888, 
-  0xCA8C4646, 0x29C7EEEE, 0xD36BB8B8, 0x3C281414, 0x79A7DEDE, 0xE2BC5E5E, 0x1D160B0B, 0x76ADDBDB, 
-  0x3BDBE0E0, 0x56643232, 0x4E743A3A, 0x1E140A0A, 0xDB924949, 0x0A0C0606, 0x6C482424, 0xE4B85C5C, 
-  0x5D9FC2C2, 0x6EBDD3D3, 0xEF43ACAC, 0xA6C46262, 0xA8399191, 0xA4319595, 0x37D3E4E4, 0x8BF27979, 
-  0x32D5E7E7, 0x438BC8C8, 0x596E3737, 0xB7DA6D6D, 0x8C018D8D, 0x64B1D5D5, 0xD29C4E4E, 0xE049A9A9, 
-  0xB4D86C6C, 0xFAAC5656, 0x07F3F4F4, 0x25CFEAEA, 0xAFCA6565, 0x8EF47A7A, 0xE947AEAE, 0x18100808, 
-  0xD56FBABA, 0x88F07878, 0x6F4A2525, 0x725C2E2E, 0x24381C1C, 0xF157A6A6, 0xC773B4B4, 0x5197C6C6, 
-  0x23CBE8E8, 0x7CA1DDDD, 0x9CE87474, 0x213E1F1F, 0xDD964B4B, 0xDC61BDBD, 0x860D8B8B, 0x850F8A8A, 
-  0x90E07070, 0x427C3E3E, 0xC471B5B5, 0xAACC6666, 0xD8904848, 0x05060303, 0x01F7F6F6, 0x121C0E0E, 
-  0xA3C26161, 0x5F6A3535, 0xF9AE5757, 0xD069B9B9, 0x91178686, 0x5899C1C1, 0x273A1D1D, 0xB9279E9E, 
-  0x38D9E1E1, 0x13EBF8F8, 0xB32B9898, 0x33221111, 0xBBD26969, 0x70A9D9D9, 0x89078E8E, 0xA7339494, 
-  0xB62D9B9B, 0x223C1E1E, 0x92158787, 0x20C9E9E9, 0x4987CECE, 0xFFAA5555, 0x78502828, 0x7AA5DFDF, 
-  0x8F038C8C, 0xF859A1A1, 0x80098989, 0x171A0D0D, 0xDA65BFBF, 0x31D7E6E6, 0xC6844242, 0xB8D06868, 
-  0xC3824141, 0xB0299999, 0x775A2D2D, 0x111E0F0F, 0xCB7BB0B0, 0xFCA85454, 0xD66DBBBB, 0x3A2C1616, 
-};
-
-static const u4_t AES_E3[256] = {
-  0x63A5C663, 0x7C84F87C, 0x7799EE77, 0x7B8DF67B, 0xF20DFFF2, 0x6BBDD66B, 0x6FB1DE6F, 0xC55491C5, 
-  0x30506030, 0x01030201, 0x67A9CE67, 0x2B7D562B, 0xFE19E7FE, 0xD762B5D7, 0xABE64DAB, 0x769AEC76, 
-  0xCA458FCA, 0x829D1F82, 0xC94089C9, 0x7D87FA7D, 0xFA15EFFA, 0x59EBB259, 0x47C98E47, 0xF00BFBF0, 
-  0xADEC41AD, 0xD467B3D4, 0xA2FD5FA2, 0xAFEA45AF, 0x9CBF239C, 0xA4F753A4, 0x7296E472, 0xC05B9BC0, 
-  0xB7C275B7, 0xFD1CE1FD, 0x93AE3D93, 0x266A4C26, 0x365A6C36, 0x3F417E3F, 0xF702F5F7, 0xCC4F83CC, 
-  0x345C6834, 0xA5F451A5, 0xE534D1E5, 0xF108F9F1, 0x7193E271, 0xD873ABD8, 0x31536231, 0x153F2A15, 
-  0x040C0804, 0xC75295C7, 0x23654623, 0xC35E9DC3, 0x18283018, 0x96A13796, 0x050F0A05, 0x9AB52F9A, 
-  0x07090E07, 0x12362412, 0x809B1B80, 0xE23DDFE2, 0xEB26CDEB, 0x27694E27, 0xB2CD7FB2, 0x759FEA75, 
-  0x091B1209, 0x839E1D83, 0x2C74582C, 0x1A2E341A, 0x1B2D361B, 0x6EB2DC6E, 0x5AEEB45A, 0xA0FB5BA0, 
-  0x52F6A452, 0x3B4D763B, 0xD661B7D6, 0xB3CE7DB3, 0x297B5229, 0xE33EDDE3, 0x2F715E2F, 0x84971384, 
-  0x53F5A653, 0xD168B9D1, 0x00000000, 0xED2CC1ED, 0x20604020, 0xFC1FE3FC, 0xB1C879B1, 0x5BEDB65B, 
-  0x6ABED46A, 0xCB468DCB, 0xBED967BE, 0x394B7239, 0x4ADE944A, 0x4CD4984C, 0x58E8B058, 0xCF4A85CF, 
-  0xD06BBBD0, 0xEF2AC5EF, 0xAAE54FAA, 0xFB16EDFB, 0x43C58643, 0x4DD79A4D, 0x33556633, 0x85941185, 
-  0x45CF8A45, 0xF910E9F9, 0x02060402, 0x7F81FE7F, 0x50F0A050, 0x3C44783C, 0x9FBA259F, 0xA8E34BA8, 
-  0x51F3A251, 0xA3FE5DA3, 0x40C08040, 0x8F8A058F, 0x92AD3F92, 0x9DBC219D, 0x38487038, 0xF504F1F5, 
-  0xBCDF63BC, 0xB6C177B6, 0xDA75AFDA, 0x21634221, 0x10302010, 0xFF1AE5FF, 0xF30EFDF3, 0xD26DBFD2, 
-  0xCD4C81CD, 0x0C14180C, 0x13352613, 0xEC2FC3EC, 0x5FE1BE5F, 0x97A23597, 0x44CC8844, 0x17392E17, 
-  0xC45793C4, 0xA7F255A7, 0x7E82FC7E, 0x3D477A3D, 0x64ACC864, 0x5DE7BA5D, 0x192B3219, 0x7395E673, 
-  0x60A0C060, 0x81981981, 0x4FD19E4F, 0xDC7FA3DC, 0x22664422, 0x2A7E542A, 0x90AB3B90, 0x88830B88, 
-  0x46CA8C46, 0xEE29C7EE, 0xB8D36BB8, 0x143C2814, 0xDE79A7DE, 0x5EE2BC5E, 0x0B1D160B, 0xDB76ADDB, 
-  0xE03BDBE0, 0x32566432, 0x3A4E743A, 0x0A1E140A, 0x49DB9249, 0x060A0C06, 0x246C4824, 0x5CE4B85C, 
-  0xC25D9FC2, 0xD36EBDD3, 0xACEF43AC, 0x62A6C462, 0x91A83991, 0x95A43195, 0xE437D3E4, 0x798BF279, 
-  0xE732D5E7, 0xC8438BC8, 0x37596E37, 0x6DB7DA6D, 0x8D8C018D, 0xD564B1D5, 0x4ED29C4E, 0xA9E049A9, 
-  0x6CB4D86C, 0x56FAAC56, 0xF407F3F4, 0xEA25CFEA, 0x65AFCA65, 0x7A8EF47A, 0xAEE947AE, 0x08181008, 
-  0xBAD56FBA, 0x7888F078, 0x256F4A25, 0x2E725C2E, 0x1C24381C, 0xA6F157A6, 0xB4C773B4, 0xC65197C6, 
-  0xE823CBE8, 0xDD7CA1DD, 0x749CE874, 0x1F213E1F, 0x4BDD964B, 0xBDDC61BD, 0x8B860D8B, 0x8A850F8A, 
-  0x7090E070, 0x3E427C3E, 0xB5C471B5, 0x66AACC66, 0x48D89048, 0x03050603, 0xF601F7F6, 0x0E121C0E, 
-  0x61A3C261, 0x355F6A35, 0x57F9AE57, 0xB9D069B9, 0x86911786, 0xC15899C1, 0x1D273A1D, 0x9EB9279E, 
-  0xE138D9E1, 0xF813EBF8, 0x98B32B98, 0x11332211, 0x69BBD269, 0xD970A9D9, 0x8E89078E, 0x94A73394, 
-  0x9BB62D9B, 0x1E223C1E, 0x87921587, 0xE920C9E9, 0xCE4987CE, 0x55FFAA55, 0x28785028, 0xDF7AA5DF, 
-  0x8C8F038C, 0xA1F859A1, 0x89800989, 0x0D171A0D, 0xBFDA65BF, 0xE631D7E6, 0x42C68442, 0x68B8D068, 
-  0x41C38241, 0x99B02999, 0x2D775A2D, 0x0F111E0F, 0xB0CB7BB0, 0x54FCA854, 0xBBD66DBB, 0x163A2C16, 
-};
-
-static const u4_t AES_E4[256] = {
-  0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491, 
-  0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC, 
-  0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB, 
-  0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B, 
-  0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83, 
-  0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A, 
-  0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F, 
-  0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA, 
-  0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B, 
-  0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713, 
-  0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6, 
-  0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85, 
-  0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411, 
-  0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B, 
-  0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1, 
-  0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF, 
-  0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E, 
-  0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6, 
-  0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B, 
-  0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD, 
-  0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8, 
-  0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2, 
-  0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049, 
-  0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810, 
-  0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197, 
-  0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F, 
-  0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C, 
-  0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927, 
-  0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733, 
-  0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5, 
-  0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0, 
-  0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C, 
-};
-
-#define msbf4_read(p)    ((p)[0]<<24 | (p)[1]<<16 | (p)[2]<<8 | (p)[3])
-#define msbf4_write(p,v) (p)[0]=(v)>>24,(p)[1]=(v)>>16,(p)[2]=(v)>>8,(p)[3]=(v)
-#define swapmsbf(x)      ( (x&0xFF)<<24 | (x&0xFF00)<<8 | (x&0xFF0000)>>8 | (x>>24) )
-
-#define u1(v)		            ((u1_t)(v))
-
-#define AES_key4(r1,r2,r3,r0,i)    r1 = ki[i+1]; \
-                                   r2 = ki[i+2]; \
-                                   r3 = ki[i+3]; \
-                                   r0 = ki[i]
-
-#define AES_expr4(r1,r2,r3,r0,i)   r1 ^= AES_E4[u1(i)];	    \
-			           r2 ^= AES_E3[u1(i>>8)];  \
-			           r3 ^= AES_E2[u1(i>>16)]; \
-			           r0 ^= AES_E1[  (i>>24)]
-
-#define AES_expr(a,r0,r1,r2,r3,i)  a = ki[i];                    \
-				   a ^= (AES_S[   r0>>24 ]<<24); \
-				   a ^= (AES_S[u1(r1>>16)]<<16); \
-				   a ^= (AES_S[u1(r2>> 8)]<< 8); \
-				   a ^=  AES_S[u1(r3)    ]
-
-// global area for passing parameters (aux, key) and for storing round keys
-u4_t AESAUX[16/sizeof(u4_t)];
-u4_t AESKEY[11*16/sizeof(u4_t)];
-
-// generate 1+10 roundkeys for encryption with 128-bit key
-// read 128-bit key from AESKEY in MSBF, generate roundkey words in place
-static void aesroundkeys (void) {
-    int i;
-    u4_t b;
-
-    for( i=0; i<4; i++) {
-	AESKEY[i] = swapmsbf(AESKEY[i]);
-    }
-    
-    b = AESKEY[3];
-    for( ; i<44; i++ ) {
-	if( i%4==0 ) {
-            // b = SubWord(RotWord(b)) xor Rcon[i/4]
-	    b = (AES_S[u1(b >> 16)] << 24) ^
-		(AES_S[u1(b >>  8)] << 16) ^
-		(AES_S[u1(b)      ] <<  8) ^
-		(AES_S[   b >> 24 ]      ) ^
-                 AES_RCON[(i-4)/4];
-	}
-	AESKEY[i] = b ^= AESKEY[i-4];
-    }
-}
-
-u4_t os_aes (u1_t mode, xref2u1_t buf, u2_t len) {
-        
-	aesroundkeys();
-
-	if( mode & AES_MICNOAUX ) {
-	    AESAUX[0] = AESAUX[1] = AESAUX[2] = AESAUX[3] = 0;
-	} else {
-	    AESAUX[0] = swapmsbf(AESAUX[0]);
-	    AESAUX[1] = swapmsbf(AESAUX[1]);
-	    AESAUX[2] = swapmsbf(AESAUX[2]);
-	    AESAUX[3] = swapmsbf(AESAUX[3]);
-	}
-
-	while( (signed char)len > 0 ) {
-	    u4_t a0, a1, a2, a3;
-	    u4_t t0, t1, t2, t3;
-	    u4_t *ki, *ke;
-
-	    // load input block
-	    if( (mode & AES_CTR) || ((mode & AES_MIC) && (mode & AES_MICNOAUX)==0) ) { // load CTR block or first MIC block
-		a0 = AESAUX[0];
-		a1 = AESAUX[1];
-		a2 = AESAUX[2];
-		a3 = AESAUX[3];
-            }
-            else if( (mode & AES_MIC) && len <= 16 ) { // last MIC block
-                a0 = a1 = a2 = a3 = 0; // load null block
-                mode |= ((len == 16) ? 1 : 2) << 4; // set MICSUB: CMAC subkey K1 or K2
-            } else
-        LOADDATA: { // load data block (partially)
-		for(t0=0; t0<16; t0++) {
-                    t1 = (t1<<8) | ((t0<len) ? buf[t0] : (t0==len) ? 0x80 : 0x00);
-                    if((t0&3)==3) {
-                        a0 = a1;
-                        a1 = a2;
-                        a2 = a3;
-                        a3 = t1;
-                    }
-                } 
-		if( mode & AES_MIC ) {
-		    a0 ^= AESAUX[0];
-		    a1 ^= AESAUX[1];
-		    a2 ^= AESAUX[2];
-		    a3 ^= AESAUX[3];
-		}
-            }
-
-	    // perform AES encryption on block in a0-a3
-	    ki = AESKEY;
-	    ke = ki + 8*4;
-	    a0 ^= ki[0];
-	    a1 ^= ki[1];
-	    a2 ^= ki[2];
-	    a3 ^= ki[3];
-	    do {
-		AES_key4 (t1,t2,t3,t0,4);
-		AES_expr4(t1,t2,t3,t0,a0);
-		AES_expr4(t2,t3,t0,t1,a1);
-		AES_expr4(t3,t0,t1,t2,a2);
-		AES_expr4(t0,t1,t2,t3,a3);
-
-		AES_key4 (a1,a2,a3,a0,8);
-		AES_expr4(a1,a2,a3,a0,t0);
-		AES_expr4(a2,a3,a0,a1,t1);
-		AES_expr4(a3,a0,a1,a2,t2);
-		AES_expr4(a0,a1,a2,a3,t3);
-	    } while( (ki+=8) < ke );
-
-	    AES_key4 (t1,t2,t3,t0,4);
-	    AES_expr4(t1,t2,t3,t0,a0);
-	    AES_expr4(t2,t3,t0,t1,a1);
-	    AES_expr4(t3,t0,t1,t2,a2);
-	    AES_expr4(t0,t1,t2,t3,a3);
-
-	    AES_expr(a0,t0,t1,t2,t3,8);
-	    AES_expr(a1,t1,t2,t3,t0,9);
-	    AES_expr(a2,t2,t3,t0,t1,10);
-	    AES_expr(a3,t3,t0,t1,t2,11);
-	    // result of AES encryption in a0-a3
-
-	    if( mode & AES_MIC ) {
-		if( (t1 = ((mode & AES_MICSUB) >> 4)) != 0 ) { // last block
-		    do {
-			// compute CMAC subkey K1 and K2
-			t0 = a0 >> 31; // save MSB
-			a0 = (a0 << 1) | (a1 >> 31);
-			a1 = (a1 << 1) | (a2 >> 31);
-			a2 = (a2 << 1) | (a3 >> 31);
-			a3 = (a3 << 1);
-			if( t0 ) a3 ^= 0x87;
-		    } while( --t1 );
-
-		    AESAUX[0] ^= a0;
-		    AESAUX[1] ^= a1;
-		    AESAUX[2] ^= a2;
-		    AESAUX[3] ^= a3;
-                    mode &= ~AES_MICSUB;
-		    goto LOADDATA;
-		} else {
-                    // save cipher block as new iv
-                    AESAUX[0] = a0;
-                    AESAUX[1] = a1;
-                    AESAUX[2] = a2;
-                    AESAUX[3] = a3;
-                }
-	    } else { // CIPHER
-		if( mode & AES_CTR ) { // xor block (partially)
-                    t0 = (len > 16) ? 16: len;
-                    for(t1=0; t1<t0; t1++) {
-                        buf[t1] ^= (a0>>24);
-                        a0 <<= 8;
-                        if((t1&3)==3) {
-                            a0 = a1;
-                            a1 = a2;
-                            a2 = a3;
-                        }
-                    }
-		    // update counter
-		    AESAUX[3]++;
-		} else { // ECB
-                    // store block
-                    msbf4_write(buf+0,  a0);
-		    msbf4_write(buf+4,  a1);
-		    msbf4_write(buf+8,  a2);
-		    msbf4_write(buf+12, a3);
-		}
-	    }
-
-            // update block state
-            if( (mode & AES_MIC)==0 || (mode & AES_MICNOAUX) ) {
-                buf += 16;
-                len -= 16;
-            }
-            mode |= AES_MICNOAUX;
-	}
-	return AESAUX[0];
-}
-
diff -r b8648db86f86 -r f73dbeca8736 lib_gps.lib
--- a/lib_gps.lib	Fri Jan 15 18:28:50 2016 +0000
+++ b/lib_gps.lib	Tue May 29 14:03:22 2018 -0700
@@ -1,1 +1,1 @@
-https://developer.mbed.org/users/dudmuck/code/lib_gps/#03d7275dc4fd
+https://developer.mbed.org/users/dudmuck/code/lib_gps/#d3a60fb94d0e
diff -r b8648db86f86 -r f73dbeca8736 lorabase.h
--- a/lorabase.h	Fri Jan 15 18:28:50 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,385 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014-2015 IBM Corporation.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    IBM Zurich Research Lab - initial API, implementation and documentation
- *******************************************************************************/
-
-#ifndef _lorabase_h_
-#define _lorabase_h_
-
-// ================================================================================
-// BEG: Keep in sync with lorabase.hpp
-//
-
-enum _cr_t { CR_4_5=0, CR_4_6, CR_4_7, CR_4_8 };
-enum _sf_t { FSK=0, SF7, SF8, SF9, SF10, SF11, SF12, SFrfu };
-enum _bw_t { BW125=0, BW250, BW500, BWrfu };
-typedef u1_t cr_t;
-typedef u1_t sf_t;
-typedef u1_t bw_t;
-typedef u1_t dr_t;
-// Radio parameter set (encodes SF/BW/CR/IH/NOCRC)
-typedef u2_t rps_t;
-TYPEDEF_xref2rps_t;
-
-enum { ILLEGAL_RPS = 0xFF };
-enum { DR_PAGE_EU868 = 0x00 };
-enum { DR_PAGE_US915 = 0x10 };
-
-// Global maximum frame length
-enum { STD_PREAMBLE_LEN  =  8 };
-enum { MAX_LEN_FRAME     = 64 };
-enum { LEN_DEVNONCE      =  2 };
-enum { LEN_ARTNONCE      =  3 };
-enum { LEN_NETID         =  3 };
-enum { DELAY_JACC1       =  5 }; // in secs
-enum { DELAY_DNW1        =  1 }; // in secs down window #1
-enum { DELAY_EXTDNW2     =  1 }; // in secs
-enum { DELAY_JACC2       =  DELAY_JACC1+(int)DELAY_EXTDNW2 }; // in secs
-enum { DELAY_DNW2        =  DELAY_DNW1 +(int)DELAY_EXTDNW2 }; // in secs down window #1
-enum { BCN_INTV_exp      = 7 };
-enum { BCN_INTV_sec      = 1<<BCN_INTV_exp };
-enum { BCN_INTV_ms       = BCN_INTV_sec*1000L };
-enum { BCN_INTV_us       = BCN_INTV_ms*1000L };
-enum { BCN_RESERVE_ms    = 2120 };   // space reserved for beacon and NWK management
-enum { BCN_GUARD_ms      = 3000 };   // end of beacon period to prevent interference with beacon
-enum { BCN_SLOT_SPAN_ms  =   30 };   // 2^12 reception slots a this span
-enum { BCN_WINDOW_ms     = BCN_INTV_ms-(int)BCN_GUARD_ms-(int)BCN_RESERVE_ms };
-enum { BCN_RESERVE_us    = 2120000 };
-enum { BCN_GUARD_us      = 3000000 };
-enum { BCN_SLOT_SPAN_us  =   30000 };
-
-#if defined(CFG_eu868) // ==============================================
-
-enum _dr_eu868_t { DR_SF12=0, DR_SF11, DR_SF10, DR_SF9, DR_SF8, DR_SF7, DR_SF7B, DR_FSK, DR_NONE };
-enum { DR_DFLTMIN = DR_SF7 };
-enum { DR_PAGE = DR_PAGE_EU868 };
-
-// Default frequency plan for EU 868MHz ISM band
-// Bands:
-//  g1 :   1%  14dBm  
-//  g2 : 0.1%  14dBm  
-//  g3 :  10%  27dBm  
-//                 freq             band     datarates
-enum { EU868_F1 = 868100000,      // g1   SF7-12 
-       EU868_F2 = 868300000,      // g1   SF7-12 FSK SF7/250         
-       EU868_F3 = 868500000,      // g1   SF7-12         
-       EU868_F4 = 868850000,      // g2   SF7-12         
-       EU868_F5 = 869050000,      // g2   SF7-12         
-       EU868_F6 = 869525000,      // g3   SF7-12         
-       EU868_J4 = 864100000,      // g2   SF7-12  used during join
-       EU868_J5 = 864300000,      // g2   SF7-12   ditto
-       EU868_J6 = 864500000,      // g2   SF7-12   ditto
-};
-enum { EU868_FREQ_MIN = 863000000,
-       EU868_FREQ_MAX = 870000000 };
-
-enum { CHNL_PING         = 5 };
-enum { FREQ_PING         = EU868_F6 };  // default ping freq
-enum { DR_PING           = SF9 };       // default ping DR
-enum { CHNL_DNW2         = 5 };
-enum { FREQ_DNW2         = EU868_F6 };
-enum { DR_DNW2           = DR_SF12 };
-enum { CHNL_BCN          = 5 };
-enum { FREQ_BCN          = EU868_F6 };
-enum { DR_BCN            = DR_SF9 };
-enum { AIRTIME_BCN       = 144384 };  // micros
-
-enum {
-    // Beacon frame format EU SF9
-    OFF_BCN_NETID    = 0,         
-    OFF_BCN_TIME     = 3,
-    OFF_BCN_CRC1     = 7,
-    OFF_BCN_INFO     = 8,
-    OFF_BCN_LAT      = 9,
-    OFF_BCN_LON      = 12,
-    OFF_BCN_CRC2     = 15,
-    LEN_BCN          = 17
-};
-
-#elif defined(CFG_us915)  // =========================================
-
-enum _dr_us915_t { DR_SF10=0, DR_SF9, DR_SF8, DR_SF7, DR_SF8C, DR_NONE,
-                   // Devices behind a router:
-                   DR_SF12CR=8, DR_SF11CR, DR_SF10CR, DR_SF9CR, DR_SF8CR, DR_SF7CR };
-enum { DR_DFLTMIN = DR_SF8C };
-enum { DR_PAGE = DR_PAGE_US915 };
-
-#define ERR_HZ  /*30000*/ 0
-// Default frequency plan for US 915MHz
-enum { US915_125kHz_UPFBASE = (902300000-ERR_HZ),
-       US915_125kHz_UPFSTEP =    200000,
-       US915_500kHz_UPFBASE = (903000000-ERR_HZ),
-       US915_500kHz_UPFSTEP =   1600000,
-       US915_500kHz_DNFBASE = (923300000),
-       US915_500kHz_DNFSTEP =    600000
-};
-enum { US915_FREQ_MIN = 902000000,
-       US915_FREQ_MAX = 928000000 };
-
-enum { CHNL_PING         = 0 }; // used only for default init of state (follows beacon - rotating)
-enum { FREQ_PING         = US915_500kHz_DNFBASE + CHNL_PING*US915_500kHz_DNFSTEP };  // default ping freq
-enum { DR_PING           = DR_SF10CR };       // default ping DR
-enum { CHNL_DNW2         = 0 };
-enum { FREQ_DNW2         = US915_500kHz_DNFBASE + CHNL_DNW2*US915_500kHz_DNFSTEP };
-enum { DR_DNW2           = DR_SF12CR };
-enum { CHNL_BCN          = 0 }; // used only for default init of state (rotating beacon scheme)
-enum { DR_BCN            = DR_SF10CR };
-enum { AIRTIME_BCN       = 72192 };  // micros
-
-enum {
-    // Beacon frame format US SF10
-    OFF_BCN_NETID    = 0,         
-    OFF_BCN_TIME     = 3,
-    OFF_BCN_CRC1     = 7,
-    OFF_BCN_INFO     = 9,
-    OFF_BCN_LAT      = 10,
-    OFF_BCN_LON      = 13,
-    OFF_BCN_RFU1     = 16,
-    OFF_BCN_CRC2     = 17,
-    LEN_BCN          = 19
-};
-
-#endif // ===================================================
-
-enum {
-    // Join Request frame format
-    OFF_JR_HDR      = 0,
-    OFF_JR_ARTEUI   = 1,
-    OFF_JR_DEVEUI   = 9,
-    OFF_JR_DEVNONCE = 17,
-    OFF_JR_MIC      = 19,
-    LEN_JR          = 23
-};
-enum {
-    // Join Accept frame format
-    OFF_JA_HDR      = 0,
-    OFF_JA_ARTNONCE = 1,
-    OFF_JA_NETID    = 4,
-    OFF_JA_DEVADDR  = 7,
-    OFF_JA_RFU      = 11,
-    OFF_JA_DLSET    = 11,
-    OFF_JA_RXDLY    = 12,
-    OFF_CFLIST      = 13,
-    LEN_JA          = 17,
-    LEN_JAEXT       = 17+16
-};
-enum {
-    // Data frame format
-    OFF_DAT_HDR      = 0,
-    OFF_DAT_ADDR     = 1,
-    OFF_DAT_FCT      = 5,
-    OFF_DAT_SEQNO    = 6,
-    OFF_DAT_OPTS     = 8,
-};
-enum { MAX_LEN_PAYLOAD = MAX_LEN_FRAME-(int)OFF_DAT_OPTS-4 };
-enum {
-    // Bitfields in frame format octet
-    HDR_FTYPE   = 0xE0,
-    HDR_RFU     = 0x1C,
-    HDR_MAJOR   = 0x03
-};
-enum { HDR_FTYPE_DNFLAG = 0x20 };  // flags DN frame except for HDR_FTYPE_PROP
-enum {
-    // Values of frame type bit field
-    HDR_FTYPE_JREQ   = 0x00,
-    HDR_FTYPE_JACC   = 0x20,
-    HDR_FTYPE_DAUP   = 0x40,  // data (unconfirmed) up
-    HDR_FTYPE_DADN   = 0x60,  // data (unconfirmed) dn
-    HDR_FTYPE_DCUP   = 0x80,  // data confirmed up
-    HDR_FTYPE_DCDN   = 0xA0,  // data confirmed dn
-    HDR_FTYPE_REJOIN = 0xC0,  // rejoin for roaming
-    HDR_FTYPE_PROP   = 0xE0
-};
-enum {
-    HDR_MAJOR_V1 = 0x00,
-};
-enum {
-    // Bitfields in frame control octet
-    FCT_ADREN  = 0x80,
-    FCT_ADRARQ = 0x40,
-    FCT_ACK    = 0x20,
-    FCT_MORE   = 0x10,   // also in DN direction: Class B indicator
-    FCT_OPTLEN = 0x0F,
-};
-enum {
-    // In UP direction: signals class B enabled
-    FCT_CLASSB = FCT_MORE
-};
-enum {
-    NWKID_MASK = (int)0xFE000000,
-    NWKID_BITS = 7
-};
-
-// MAC uplink commands   downwlink too
-enum {
-    // Class A
-    MCMD_LCHK_REQ = 0x02, // -  link check request : -
-    MCMD_LADR_ANS = 0x03, // -  link ADR answer    : u1:7-3:RFU, 3/2/1: pow/DR/Ch ACK
-    MCMD_DCAP_ANS = 0x04, // -  duty cycle answer  : -
-    MCMD_DN2P_ANS = 0x05, // -  2nd DN slot status : u1:7-2:RFU  1/0:datarate/channel ack
-    MCMD_DEVS_ANS = 0x06, // -  device status ans  : u1:battery 0,1-254,255=?, u1:7-6:RFU,5-0:margin(-32..31)
-    MCMD_SNCH_ANS = 0x07, // -  set new channel    : u1: 7-2=RFU, 1/0:DR/freq ACK
-    // Class B
-    MCMD_PING_IND = 0x10, // -  pingability indic  : u1: 7=RFU, 6-4:interval, 3-0:datarate
-    MCMD_PING_ANS = 0x11, // -  ack ping freq      : u1: 7-1:RFU, 0:freq ok
-    MCMD_BCNI_REQ = 0x12, // -  next beacon start  : -
-};
-
-// MAC downlink commands
-enum {
-    // Class A
-    MCMD_LCHK_ANS = 0x02, // link check answer  : u1:margin 0-254,255=unknown margin / u1:gwcnt
-    MCMD_LADR_REQ = 0x03, // link ADR request   : u1:DR/TXPow, u2:chmask, u1:chpage/repeat
-    MCMD_DCAP_REQ = 0x04, // duty cycle cap     : u1:255 dead [7-4]:RFU, [3-0]:cap 2^-k
-    MCMD_DN2P_SET = 0x05, // 2nd DN window param: u1:7-4:RFU/3-0:datarate, u3:freq
-    MCMD_DEVS_REQ = 0x06, // device status req  : -
-    MCMD_SNCH_REQ = 0x07, // set new channel    : u1:chidx, u3:freq, u1:DRrange
-    // Class B
-    MCMD_PING_SET = 0x11, // set ping freq      : u3: freq
-    MCMD_BCNI_ANS = 0x12, // next beacon start  : u2: delay(in TUNIT millis), u1:channel
-};
-
-enum {
-    MCMD_BCNI_TUNIT = 30  // time unit of delay value in millis
-};
-enum {
-    MCMD_LADR_ANS_RFU    = 0xF8, // RFU bits
-    MCMD_LADR_ANS_POWACK = 0x04, // 0=not supported power level
-    MCMD_LADR_ANS_DRACK  = 0x02, // 0=unknown data rate
-    MCMD_LADR_ANS_CHACK  = 0x01, // 0=unknown channel enabled
-};
-enum {
-    MCMD_DN2P_ANS_RFU    = 0xFC, // RFU bits
-    MCMD_DN2P_ANS_DRACK  = 0x02, // 0=unknown data rate
-    MCMD_DN2P_ANS_CHACK  = 0x01, // 0=unknown channel enabled
-};
-enum {
-    MCMD_SNCH_ANS_RFU    = 0xFC, // RFU bits
-    MCMD_SNCH_ANS_DRACK  = 0x02, // 0=unknown data rate
-    MCMD_SNCH_ANS_FQACK  = 0x01, // 0=rejected channel frequency
-};
-enum {
-    MCMD_PING_ANS_RFU   = 0xFE,
-    MCMD_PING_ANS_FQACK = 0x01
-};
-
-enum {
-    MCMD_DEVS_EXT_POWER   = 0x00, // external power supply
-    MCMD_DEVS_BATT_MIN    = 0x01, // min battery value
-    MCMD_DEVS_BATT_MAX    = 0xFE, // max battery value
-    MCMD_DEVS_BATT_NOINFO = 0xFF, // unknown battery level
-};
-
-// Bit fields byte#3 of MCMD_LADR_REQ payload
-enum {
-    MCMD_LADR_CHP_125ON   = 0x60,  // special channel page enable, bits applied to 64..71
-    MCMD_LADR_CHP_125OFF  = 0x70,  //  ditto
-    MCMD_LADR_N3RFU_MASK  = 0x80,
-    MCMD_LADR_CHPAGE_MASK = 0xF0,
-    MCMD_LADR_REPEAT_MASK = 0x0F,
-    MCMD_LADR_REPEAT_1    = 0x01,
-    MCMD_LADR_CHPAGE_1    = 0x10
-};
-// Bit fields byte#0 of MCMD_LADR_REQ payload
-enum {
-    MCMD_LADR_DR_MASK    = 0xF0,
-    MCMD_LADR_POW_MASK   = 0x0F,
-    MCMD_LADR_DR_SHIFT   = 4,
-    MCMD_LADR_POW_SHIFT  = 0,
-#if defined(CFG_eu868)
-    MCMD_LADR_SF12      = DR_SF12<<4,
-    MCMD_LADR_SF11      = DR_SF11<<4,
-    MCMD_LADR_SF10      = DR_SF10<<4,
-    MCMD_LADR_SF9       = DR_SF9 <<4,
-    MCMD_LADR_SF8       = DR_SF8 <<4,
-    MCMD_LADR_SF7       = DR_SF7 <<4,
-    MCMD_LADR_SF7B      = DR_SF7B<<4,
-    MCMD_LADR_FSK       = DR_FSK <<4,
-
-    MCMD_LADR_20dBm     = 0,
-    MCMD_LADR_14dBm     = 1,
-    MCMD_LADR_11dBm     = 2,
-    MCMD_LADR_8dBm      = 3,
-    MCMD_LADR_5dBm      = 4,
-    MCMD_LADR_2dBm      = 5,
-#elif defined(CFG_us915)
-    MCMD_LADR_SF10      = DR_SF10<<4,
-    MCMD_LADR_SF9       = DR_SF9 <<4,
-    MCMD_LADR_SF8       = DR_SF8 <<4,
-    MCMD_LADR_SF7       = DR_SF7 <<4,
-    MCMD_LADR_SF8C      = DR_SF8C<<4,
-    MCMD_LADR_SF12CR    = DR_SF12CR<<4,
-    MCMD_LADR_SF11CR    = DR_SF11CR<<4,
-    MCMD_LADR_SF10CR    = DR_SF10CR<<4,
-    MCMD_LADR_SF9CR     = DR_SF9CR<<4,
-    MCMD_LADR_SF8CR     = DR_SF8CR<<4,
-    MCMD_LADR_SF7CR     = DR_SF7CR<<4,
-
-    MCMD_LADR_30dBm     = 0,
-    MCMD_LADR_28dBm     = 1,
-    MCMD_LADR_26dBm     = 2,
-    MCMD_LADR_24dBm     = 3,
-    MCMD_LADR_22dBm     = 4,
-    MCMD_LADR_20dBm     = 5,
-    MCMD_LADR_18dBm     = 6,
-    MCMD_LADR_16dBm     = 7,
-    MCMD_LADR_14dBm     = 8,
-    MCMD_LADR_12dBm     = 9,
-    MCMD_LADR_10dBm     = 10
-#endif
-};
-
-// Device address
-typedef u4_t devaddr_t;
-
-// RX quality (device)
-enum { RSSI_OFF=64, SNR_SCALEUP=4 };
-
-inline sf_t  getSf   (rps_t params)            { return   (sf_t)(params &  0x7); }
-inline rps_t setSf   (rps_t params, sf_t sf)   { return (rps_t)((params & ~0x7) | sf); }
-inline bw_t  getBw   (rps_t params)            { return  (bw_t)((params >> 3) & 0x3); }
-inline rps_t setBw   (rps_t params, bw_t cr)   { return (rps_t)((params & ~0x18) | (cr<<3)); }
-inline cr_t  getCr   (rps_t params)            { return  (cr_t)((params >> 5) & 0x3); }
-inline rps_t setCr   (rps_t params, cr_t cr)   { return (rps_t)((params & ~0x60) | (cr<<5)); }
-inline int   getNocrc(rps_t params)            { return        ((params >> 7) & 0x1); }
-inline rps_t setNocrc(rps_t params, int nocrc) { return (rps_t)((params & ~0x80) | (nocrc<<7)); }
-inline int   getIh   (rps_t params)            { return        ((params >> 8) & 0xFF); }
-inline rps_t setIh   (rps_t params, int ih)    { return (rps_t)((params & ~0xFF00) | (ih<<8)); }
-inline rps_t makeRps (sf_t sf, bw_t bw, cr_t cr, int ih, int nocrc) {
-    return sf | (bw<<3) | (cr<<5) | (nocrc?(1<<7):0) | ((ih&0xFF)<<8);
-}
-#define MAKERPS(sf,bw,cr,ih,nocrc) ((rps_t)((sf) | ((bw)<<3) | ((cr)<<5) | ((nocrc)?(1<<7):0) | ((ih&0xFF)<<8)))
-// Two frames with params r1/r2 would interfere on air: same SFx + BWx 
-inline int sameSfBw(rps_t r1, rps_t r2) { return ((r1^r2)&0x1F) == 0; }
-
-extern const u1_t _DR2RPS_CRC[];
-inline rps_t updr2rps (dr_t dr) { return (rps_t)_DR2RPS_CRC[dr+1]; }
-inline rps_t dndr2rps (dr_t dr) { return setNocrc(updr2rps(dr),1); }
-inline int isFasterDR (dr_t dr1, dr_t dr2) { return dr1 > dr2; }
-inline int isSlowerDR (dr_t dr1, dr_t dr2) { return dr1 < dr2; }
-inline dr_t  incDR    (dr_t dr) { return _DR2RPS_CRC[dr+2]==ILLEGAL_RPS ? dr : (dr_t)(dr+1); } // increase data rate
-inline dr_t  decDR    (dr_t dr) { return _DR2RPS_CRC[dr  ]==ILLEGAL_RPS ? dr : (dr_t)(dr-1); } // decrease data rate
-inline dr_t  assertDR (dr_t dr) { return _DR2RPS_CRC[dr+1]==ILLEGAL_RPS ? DR_DFLTMIN : dr; }   // force into a valid DR
-inline bit_t validDR  (dr_t dr) { return _DR2RPS_CRC[dr+1]!=ILLEGAL_RPS; } // in range
-inline dr_t  lowerDR  (dr_t dr, u1_t n) { while(n--){dr=decDR(dr);} return dr; } // decrease data rate by n steps
-
-//
-// BEG: Keep in sync with lorabase.hpp
-// ================================================================================
-
-
-// Convert between dBm values and power codes (MCMD_LADR_XdBm)
-s1_t pow2dBm (u1_t mcmd_ladr_p1);
-// Calculate airtime
-ostime_t calcAirTime (rps_t rps, u1_t plen);
-// Sensitivity at given SF/BW
-int getSensitivity (rps_t rps);
-
-
-#endif // _lorabase_h_
diff -r b8648db86f86 -r f73dbeca8736 main.cpp
--- a/main.cpp	Fri Jan 15 18:28:50 2016 +0000
+++ b/main.cpp	Tue May 29 14:03:22 2018 -0700
@@ -5,9 +5,7 @@
 #include "mpl3115a2.h"
 #include "sx9500.h"
 #include "gps.h"
-#include "rtc_alarm.h"
-
-#define LORA_WAN_ENABLE
+#include <inttypes.h>
 
 #define RADIO_RESET              PC_2 //NorAm_Mote Reset_sx
 #define RADIO_MOSI               PB_15 //NorAm_Mote SPI2 Mosi
@@ -84,11 +82,9 @@
 float hop_step_MHz = 0.2;
 #endif /* #ifdef FCC_TEST */
 
-uint32_t repeated_sleep;
-
 bool abort_key;
 bool per_en;
-int PacketRxSequencePrev;
+uint32_t PacketRxSequencePrev;
 uint32_t PacketPerKoCnt;
 uint32_t PacketPerOkCnt;
 uint32_t PacketNormalCnt;
@@ -110,21 +106,14 @@
 
 char service_en = 1;
 
-#ifdef LORA_WAN_ENABLE
-#define CFG_us915
-#include "oslmic.h"
-#include "lorabase.h"
-char mic_check;
-#endif /* LORA_WAN_ENABLE */
-
 #define FSK_LARGE_PKT_THRESHOLD  0x3f
 
 /******************************************************************************/
 
+SPI spi(RADIO_MOSI, RADIO_MISO, RADIO_SCLK);
+//             dio0, dio1, nss, spi, rst
+SX127x radio(RADIO_DIO_0, RADIO_DIO_1, RADIO_NSS, spi, RADIO_RESET);
 
-//  pin:       3     8     1      7    10    12     5   20    18
-//             mosi,      miso,      sclk,       cs,        rst,        dio0,         dio1
-SX127x radio(RADIO_MOSI, RADIO_MISO, RADIO_SCLK, RADIO_NSS, RADIO_RESET, RADIO_DIO_0, RADIO_DIO_1);
 SX127x_fsk fsk(radio);
 SX127x_lora lora(radio);
 
@@ -223,7 +212,7 @@
     
     printf("Bw:");
     if (radio.type == SX1276) {
-        switch (lora.RegModemConfig.sx1276bits.Bw) {
+        switch (bw) {
             case 0: printf("7.8KHz "); break;
             case 1: printf("10.4KHz "); break;
             case 2: printf("15.6KHz "); break;
@@ -237,7 +226,7 @@
             default: printf("%x ", lora.RegModemConfig.sx1276bits.Bw); break;
         }
     } else if (radio.type == SX1272) {
-        switch (lora.RegModemConfig.sx1272bits.Bw) {
+        switch (bw) {
             case 0: printf("125KHz "); break;
             case 1: printf("250KHz "); break;
             case 2: printf("500KHz "); break;
@@ -629,14 +618,14 @@
         printf("OOK ");
     }
 
-    printf("%dbps fdev:%dHz\r\n", fsk.get_bitrate(), fsk.get_tx_fdev_hz());    
+    printf("%" PRIu32 "bps fdev:%" PRIu32 "Hz\r\n", fsk.get_bitrate(), fsk.get_tx_fdev_hz());    
     
     fsk.RegPktConfig2.word = radio.read_u16(REG_FSK_PACKETCONFIG2);
     
     fsk_print_dio();
     
-    printf("rxbw:%dHz ", fsk.get_rx_bw_hz(REG_FSK_RXBW));
-    printf("afcbw:%dHz\r\n", fsk.get_rx_bw_hz(REG_FSK_AFCBW));
+    printf("rxbw:%" PRIu32 "Hz ", fsk.get_rx_bw_hz(REG_FSK_RXBW));
+    printf("afcbw:%" PRIu32 "Hz\r\n", fsk.get_rx_bw_hz(REG_FSK_AFCBW));
 
     fsk.RegRssiConfig.octet = radio.read_reg(REG_FSK_RSSICONFIG);
     printf("RssiOffset:%ddB smoothing:%dsamples\r\n", fsk.RegRssiConfig.bits.RssiOffset, 1 << (fsk.RegRssiConfig.bits.RssiSmoothing+1));
@@ -1123,35 +1112,6 @@
     printf("\r\n");
 }
 
-#ifdef LORA_WAN_ENABLE
-static const u1_t DEVKEY[16] = {
-        0x03, 0xfb, 0xb9, 0xb1, 0xa0, 0x62, 0xe0, 0x80, 0x8d, 0xa1, 0x9a, 0xf4, 0x05, 0xb1, 0xa1, 0x13
-//<APPKEY>03-   FB   -B9   -B1   -A0   -62   -E0   -80   -8D   -A1   -9A   -F4   -05   -B1   -A1   -13</APPKEY>
-};
-// provide device key (16 bytes)
-void os_getDevKey (u1_t* buf) {
-    memcpy(buf, DEVKEY, 16);
-}
-
-static void aes_encrypt (xref2u1_t pdu, int len) {
-    os_getDevKey(AESkey);
-    os_aes(AES_ENC, pdu, len);
-}
-
-u4_t os_rmsbf4 (xref2cu1_t buf) {
-    return (u4_t)(buf[3] | (buf[2]<<8) | ((u4_t)buf[1]<<16) | ((u4_t)buf[0]<<24));
-}
-u4_t calc_mic;
-u4_t rx_mic;
-static int aes_verifyMic0 (xref2u1_t pdu, int len) {
-    os_getDevKey(AESkey);
-    calc_mic = os_aes(AES_MIC|AES_MICNOAUX, pdu, len);
-    rx_mic = os_rmsbf4(pdu+len);
-    return calc_mic == rx_mic;
-    //return os_aes(AES_MIC|AES_MICNOAUX, pdu, len) == os_rmsbf4(pdu+len);
-}
-#endif /* LORA_WAN_ENABLE */
-
 void print_rx_verbose(uint8_t dlen)
 {
     float dbm;
@@ -1170,34 +1130,6 @@
     );
     print_rx_buf(/*lora.RegRxNbBytes*/dlen);  
     
-#ifdef LORA_WAN_ENABLE
-    if (mic_check) {    /* LoraWAN MIC check (join accept check) */
-        int a, d;
-        u1_t hdr;
-        printf("mic_check ");
-        if (dlen != LEN_JA && dlen != LEN_JAEXT) {
-            printf("dlen fail\r\n");
-            return;
-        }
-        hdr = radio.rx_buf[0];
-        if ((hdr & (HDR_FTYPE|HDR_MAJOR)) != (HDR_FTYPE_JACC|HDR_MAJOR_V1) ) {   
-            printf("hdr fail\r\n");
-            return;
-        } 
-        
-        aes_encrypt(radio.rx_buf+1, dlen-1);
-        if (!aes_verifyMic0(radio.rx_buf, dlen-4) ) {       
-            printf("%08x != %08x fail\r\n", calc_mic, rx_mic);
-        } else
-            printf("%08x == %08x\r\n", calc_mic, rx_mic);
-            
-        for (a = 0x0d; a < 0x40; a++) {
-            d = radio.read_reg(a);
-            //update_shadow_regs(selected_radio, a, d); 
-            printf("%02x: %02x\r\n", a, d);
-        }            
-    }
-#endif /* LORA_WAN_ENABLE */
 }
 
 int per_parse_rx(uint8_t len)
@@ -1227,7 +1159,7 @@
         // increment 'missed' counter for the RX session
         PacketPerKoCnt += i;
         per = ( 1.0 - ( float )PacketPerOkCnt / ( float )( PacketPerOkCnt + PacketPerKoCnt ) ) * 100.0;
-        printf("%d, ok=%d missed=%d normal=%d per:%.3f ", PacketRxSequence, PacketPerOkCnt, PacketPerKoCnt, PacketNormalCnt, per);
+        printf("%" PRIu32 ", ok=%" PRIu32 " missed=%" PRIu32 " normal=%" PRIu32 " per:%.3f ", PacketRxSequence, PacketPerOkCnt, PacketPerKoCnt, PacketNormalCnt, per);
         if (radio.RegOpMode.bits.LongRangeMode)
             printf("pkt:%ddBm, snr:%.1fdB, %ddBm\r\n", lora.get_pkt_rssi(), lora.RegPktSnrValue / 4.0, lora.get_current_rssi());
         else {
@@ -1287,15 +1219,17 @@
                 red_led = LED_OFF;
                 hdr_fem_csd = 0;    //debug
                 if (app == APP_CHAT) {
-                    lora.start_rx();
+                    lora.start_rx(RF_OPMODE_RECEIVER);
                 } else if (per_en)
                     per_timeout.attach(&per_cb, per_tx_delay); // start next TX
                 else if (rx_after_tx)
-                    lora.start_rx();
+                    lora.start_rx(RF_OPMODE_RECEIVER);
                 break;
             case SERVICE_ERROR:
                 printf("error\r\n");
                 break;
+            case SERVICE_NONE:
+                break;
         } // ...switch (act)
     } else {
         /* FSK: */
@@ -1310,12 +1244,13 @@
                     radio.rx_buf[n] = 0; // null terminate
                     printf((char *)radio.rx_buf);                    
                 } else {
-                    if (fsk.RegRxConfig.bits.AfcAutoOn)
+                    if (fsk.RegRxConfig.bits.AfcAutoOn) {
                         printf("%dHz ", (int)(FREQ_STEP_HZ * fsk.RegAfcValue));   
                         if (rssi != 0) {
                             printf("pkt:-%.1fdBm ", rssi / 2.0);
                             rssi = 0;
-                        }    
+                        }
+                    }
                     if (per_en) { 
                         if (!per_parse_rx(fsk.rx_buf_length)) {
                             PacketNormalCnt++;
@@ -1334,6 +1269,9 @@
                     per_timeout.attach(&per_cb, per_tx_delay); // start next TX
                 }
                 break;                
+            case SERVICE_ERROR:
+            case SERVICE_NONE:
+                break;                
          } // ...switch (act)
          
          /* fsk sync address */
@@ -1429,31 +1367,10 @@
     char c;
     int i;
     static int prev_len;
-    static int sleep_start_cnt_dn = 0;
     
     for (i = 0;;) {
-        if (sleep_start_cnt_dn > 0) {
-            if (--sleep_start_cnt_dn == 0) {
-                if (repeated_sleep != 0) {
-                    all_peripherals_off();
-                    rtc_alarm_start(repeated_sleep);
-#ifdef USE_DEBUGGER
-                    HAL_EnableDBGStopMode();
-                    if (!DBGMCU->CR & DBGMCU_CR_DBG_STOP)
-                        for (;;) asm("nop");
-#endif /* USE_DEBUGGER */
-                    deepsleep();
-                    restore_from_sleep();
-                }
-            }
-        }        
         
         if (pc.readable()) {
-            if (sleep_start_cnt_dn > 0) {
-                repeated_sleep = 0;
-                printf("repeated_sleep abort\r\n");
-            }
-                        
             c = pc.getc();
             if (c == 8) {   // backspace
                 if (i > 0) {
@@ -1488,11 +1405,6 @@
             mma8451q.service();
             mpl3115a2.service();
 
-            if (sleep_start_cnt_dn == 0 && repeated_sleep != 0) {
-                printf("Alarm Start %d\r\n", repeated_sleep);
-                sleep_start_cnt_dn = 3000;
-            }
-                        
         }
     } // ...for()
 }
@@ -1580,9 +1492,9 @@
                 break;
             case 'c':
                 if (!radio.RegOpMode.bits.LongRangeMode) {
-                    printf("%dbps fdev:%dhz ", fsk.get_bitrate(), fsk.get_tx_fdev_hz());
-                    printf("rxbw:%dHz ", fsk.get_rx_bw_hz(REG_FSK_RXBW));
-                    printf("afcbw:%dHz preambleLen:%d\r\n", fsk.get_rx_bw_hz(REG_FSK_AFCBW), radio.read_u16(REG_FSK_PREAMBLEMSB));
+                    printf("%" PRIu32 "bps fdev:%" PRIu32 "hz ", fsk.get_bitrate(), fsk.get_tx_fdev_hz());
+                    printf("rxbw:%" PRIu32 "Hz ", fsk.get_rx_bw_hz(REG_FSK_RXBW));
+                    printf("afcbw:%" PRIu32 "Hz preambleLen:%d\r\n", fsk.get_rx_bw_hz(REG_FSK_AFCBW), radio.read_u16(REG_FSK_PREAMBLEMSB));
                 }
                 break;                            
             case 'C':
@@ -1848,34 +1760,6 @@
                     break;
                 }
             radio.write_reg(REG_FSK_RXCONFIG, fsk.RegRxConfig.octet);     
-        } else if (pcbuf[0] == 'C' && pcbuf[1] == 'S' && pcbuf[2] >= '0' && pcbuf[2] <= '9') {
-            all_peripherals_off();
-            sscanf(pcbuf+2, "%d", &i);
-            repeated_sleep = i;
-        } else if (pcbuf[0] == 'c' && (pcbuf[1] == 's' || pcbuf[1] == 'l') && pcbuf[2] >= '0' && pcbuf[2] <= '9') {
-             // rtc wakeup test
-            all_peripherals_off();
-            sscanf(pcbuf+2, "%d", &i);
-            printf("alarm_start %d\r\n", i);
-            wait(0.1);
-            rtc_alarm_start(i);
-            if (pcbuf[1] == 'l') {
-#ifdef USE_DEBUGGER
-                HAL_EnableDBGSleepMode();
-                if (!DBGMCU->CR & DBGMCU_CR_DBG_SLEEP)
-                    for (;;) asm("nop");
-#endif /* USE_DEBUGGER */
-                sleep();
-            } else {
-#ifdef USE_DEBUGGER
-                HAL_EnableDBGStopMode();
-                if (!DBGMCU->CR & DBGMCU_CR_DBG_STOP)
-                    for (;;) asm("nop");
-#endif /* USE_DEBUGGER */
-                deepsleep();
-
-            }
-            restore_from_sleep();                   
         } else if (pcbuf[0] == 'r' && pcbuf[1] == 'x') { // RX
             if (per_en) {
                 red_led = LED_OFF;
@@ -1888,7 +1772,7 @@
             }
             if (radio.RegOpMode.bits.LongRangeMode) {
                 last_RxCurrentAddr = radio.read_reg(REG_LR_FIFORXCURRENTADDR);
-                lora.start_rx();
+                lora.start_rx(RF_OPMODE_RECEIVER);
             } else {
                 fsk.start_rx();
                 radio.RegDioMapping1.bits.Dio2Mapping = 3;  // dio2 to syncadrs
@@ -2090,12 +1974,6 @@
             }
         } 
 #endif /* !I2C_PIN_TEST */
-#ifdef LORA_WAN_ENABLE
-        else if (pcbuf[0] == 'm' && pcbuf[1] == 'i') {
-            mic_check ^= 1;
-            printf("mic_check:%d\r\n", mic_check);
-        }
-#endif /* LORA_WAN_ENABLE */        
         else if (pcbuf[0] == 'm' && pcbuf[1] == 'p' && !radio.RegOpMode.bits.LongRangeMode) {
             radio.RegDioMapping2.bits.MapPreambleDetect ^= 1;
             radio.write_reg(REG_DIOMAPPING2, radio.RegDioMapping2.octet);
@@ -2188,9 +2066,9 @@
                     radio.write_u16(REG_FSK_PREAMBLEMSB, 8);                    
                     break;                                                                 
             } // ...switch (pcbuf[1])
-            printf("%dbps fdev:%dhz ", fsk.get_bitrate(), fsk.get_tx_fdev_hz());
-            printf("rxbw:%dHz ", fsk.get_rx_bw_hz(REG_FSK_RXBW));
-            printf("afcbw:%dHz preambleLen:%d\r\n", fsk.get_rx_bw_hz(REG_FSK_AFCBW), radio.read_u16(REG_FSK_PREAMBLEMSB));            
+            printf("%" PRIu32" bps fdev:%" PRIu32 "hz ", fsk.get_bitrate(), fsk.get_tx_fdev_hz());
+            printf("rxbw:%" PRIu32 "Hz ", fsk.get_rx_bw_hz(REG_FSK_RXBW));
+            printf("afcbw:%" PRIu32 "Hz preambleLen:%d\r\n", fsk.get_rx_bw_hz(REG_FSK_AFCBW), radio.read_u16(REG_FSK_PREAMBLEMSB));            
         } else if (pcbuf[0] == 'o' && pcbuf[1] == 'c' && pcbuf[2] == 'p') {
             if (pcbuf[3] >= '0' && pcbuf[3] <= '9') {
                 sscanf(pcbuf+3, "%d", &i);
@@ -2269,7 +2147,7 @@
                 sscanf(&pcbuf[2], "%d", &i);
                 fsk.set_bitrate(i);
             }
-            printf("%dbps\r\n", fsk.get_bitrate());             
+            printf("%" PRIu32 "bps\r\n", fsk.get_bitrate());             
         } else if (pcbuf[0] == 'b' && pcbuf[1] == 'w') {
             if (radio.RegOpMode.bits.LongRangeMode) {
                 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
@@ -2289,14 +2167,14 @@
                         sscanf(&pcbuf[3], "%d", &i);
                         fsk.set_rx_dcc_bw_hz(i, 1);
                     }
-                    printf("afcbw:%dHz\r\n", fsk.get_rx_bw_hz(REG_FSK_AFCBW));
+                    printf("afcbw:%" PRIu32 "Hz\r\n", fsk.get_rx_bw_hz(REG_FSK_AFCBW));
                 } else {
                     if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
                         radio.set_opmode(RF_OPMODE_STANDBY);
                         sscanf(&pcbuf[2], "%d", &i);
                         fsk.set_rx_dcc_bw_hz(i, 0);
                     }
-                    printf("rxbw:%dHz\r\n", fsk.get_rx_bw_hz(REG_FSK_RXBW));
+                    printf("rxbw:%" PRIu32 "Hz\r\n", fsk.get_rx_bw_hz(REG_FSK_RXBW));
                 }
             }
         } else if (pcbuf[0] == 'v' && pcbuf[1] == 'h') {
@@ -2304,7 +2182,7 @@
             printf("poll_vh:%d\r\n", lora.poll_vh);
         } else if (pcbuf[0] == 'S' && !radio.RegOpMode.bits.LongRangeMode) {
             if (pcbuf[1] == '0') {
-                sscanf(pcbuf+1, "%x", &ui);
+                sscanf(pcbuf+1, "%" SCNu32, &ui);
                 if (ui < 0x100) {
                     fsk.RegSyncConfig.bits.SyncSize = 0;
                     radio.write_reg(REG_FSK_SYNCVALUE1, ui);
@@ -2372,7 +2250,7 @@
                 sscanf(pcbuf+4, "%d", &i);
                 fsk.set_tx_fdev_hz(i);
             }
-            printf("fdev:%dHz\r\n", fsk.get_tx_fdev_hz());
+            printf("fdev:%" PRIu32 "Hz\r\n", fsk.get_tx_fdev_hz());
         } else if (pcbuf[0] == 'f' && pcbuf[1] == 'r' && pcbuf[2] == 'f') {
             if (pcbuf[3] >= '0' && pcbuf[3] <= '9') {
                 float MHz;
@@ -2553,7 +2431,7 @@
                         //gpiox->MODER &= ~ui;
                         gpiox->MODER &= ~ui;
                         gpiox->MODER |= d << a;;
-                        printf("ui:%08x, d<<a:%08x\r\n", ui, d<<a);
+                        printf("ui:%08" PRIx32 ", d<<a:%08x\r\n", ui, d<<a);
                     }
                     for (len = 0; len < 16; len++) {
                         i = len << 1;
@@ -2566,7 +2444,7 @@
                             case 3: printf("analog\r\n"); break;
                         }
                     }
-                    printf("MODER:%08x\r\n", gpiox->MODER);
+                    printf("MODER:%08" PRIx32 "\r\n", gpiox->MODER);
                 } else if (pcbuf[2] == 'O') {   // GPIOx->BSRR
                     ui = 1 << i;
                     if (pcbuf[4] == '0') {
@@ -2574,7 +2452,7 @@
                     } else if (pcbuf[4] == '1') {
                         gpiox->BSRR = ui;
                     }
-                    printf("ODR:%08x\r\n", gpiox->ODR);
+                    printf("ODR:%08" PRIx32 "\r\n", gpiox->ODR);
                 }
             }
                         
@@ -2588,7 +2466,7 @@
             red_led = LED_OFF;
         } else if (pcbuf[0] == 'c' && pcbuf[1] == 'h' && pcbuf[2] == 'a') {
             app = APP_CHAT;
-            lora.start_rx();
+            lora.start_rx(RF_OPMODE_RECEIVER);
             printf("chat start\r\n");
         }           
     }
@@ -2622,7 +2500,6 @@
 int main()
 {  
     set_time(0);    // start RTC
-    rtc_alarm_init();
     
     pc.baud(57600);
     gps.init();
@@ -2633,7 +2510,7 @@
     led2 = LED_OFF;
     yellow_led = LED_OFF;
     
-    radio.rf_switch.attach(rfsw_callback);
+    radio.rf_switch = rfsw_callback;
     
     if (radio.RegOpMode.bits.LongRangeMode)
         last_RxCurrentAddr = radio.read_reg(REG_LR_FIFORXCURRENTADDR);
@@ -2666,11 +2543,6 @@
     GPIOC->MODER |= 0x00000045;    // unused pins as outputs: PC0(hdr_fem_csd) PC1(hdr_fem_ctx) PC3(SPI3_enable)
     //printf("GPIOC->MODER:%08x\r\n", GPIOC->MODER);
 
-    /*wait(0.1);
-    all_peripherals_off();
-    //repeated_sleep = 2;
-    deepsleep();*/
-            
     while(1) {
         switch (app) {
             case APP_NONE:
diff -r b8648db86f86 -r f73dbeca8736 mbed.bld
--- a/mbed.bld	Fri Jan 15 18:28:50 2016 +0000
+++ b/mbed.bld	Tue May 29 14:03:22 2018 -0700
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/6f327212ef96
\ No newline at end of file
+https://mbed.org/users/mbed_official/code/mbed/builds/5aab5a7997ee
diff -r b8648db86f86 -r f73dbeca8736 oslmic.h
--- a/oslmic.h	Fri Jan 15 18:28:50 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,218 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014 IBM Corporation.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    IBM Zurich Research Lab - initial API, implementation and documentation
- *******************************************************************************/
-
-#ifndef _oslmic_h_
-#define _oslmic_h_
-
-// Dependencies required for the LoRa MAC in C to run.
-// These settings can be adapted to the underlying system.
-// You should not, however, change the lmic.[hc]
-
-
-
-//================================================================================
-//================================================================================
-// Target platform as C library
-typedef unsigned char      bit_t;
-typedef unsigned char      u1_t;
-typedef   signed char      s1_t;
-typedef unsigned short     u2_t;
-typedef          short     s2_t;
-typedef unsigned int       u4_t;
-typedef          int       s4_t;
-typedef unsigned long long u8_t;
-typedef          long long s8_t;
-typedef unsigned int       uint;
-typedef const char* str_t;
-
-#define CFG_noassert 1
-#include <string.h>
-//#include "hal.h"
-#define EV(a,b,c) /**/
-#define DO_DEVDB(meth,...) /**/
-#if !CFG_noassert
-#define ASSERT(cond) if(!(cond)) hal_failed()
-#else
-#define ASSERT(cond) /**/
-#endif
-
-#define os_clearMem(a,b)   memset(a,0,b)
-#define os_copyMem(a,b,c)  memcpy(a,b,c)
-
-typedef     struct osjob_t osjob_t;
-typedef      struct band_t band_t;
-typedef      struct rxqu_t rxqu_t;
-typedef   struct chnldef_t chnldef_t;
-typedef   struct rxsched_t rxsched_t;
-typedef   struct bcninfo_t bcninfo_t;
-typedef        const u1_t* xref2cu1_t;
-typedef              u1_t* xref2u1_t;
-#define TYPEDEF_xref2rps_t     typedef         rps_t* xref2rps_t
-#define TYPEDEF_xref2rxqu_t    typedef        rxqu_t* xref2rxqu_t
-#define TYPEDEF_xref2rxsched_t typedef     rxsched_t* xref2rxsched_t
-#define TYPEDEF_xref2chnldef_t typedef     chnldef_t* xref2chnldef_t
-#define TYPEDEF_xref2band_t    typedef        band_t* xref2band_t
-#define TYPEDEF_xref2osjob_t   typedef       osjob_t* xref2osjob_t
-
-#define SIZEOFEXPR(x) sizeof(x)
-
-#define ON_LMIC_EVENT(ev)  onEvent(ev)
-#define DECL_ON_LMIC_EVENT void onEvent(ev_t e)
-
-extern u4_t AESAUX[];
-extern u4_t AESKEY[];
-#define AESkey ((u1_t*)AESKEY)
-#define AESaux ((u1_t*)AESAUX)
-#define FUNC_ADDR(func) (&(func))
-
-u1_t radio_rand1 (void);
-#define os_getRndU1() radio_rand1()
-
-#define DEFINE_LMIC  struct lmic_t LMIC
-#define DECLARE_LMIC extern struct lmic_t LMIC
-
-void radio_init(void);
-void radio_irq_handler (u1_t dio);
-void os_init (void);
-void os_runloop (void);
-
-//================================================================================
-
-
-#ifndef RX_RAMPUP
-#define RX_RAMPUP  (us2osticks(200))
-#endif
-#ifndef TX_RAMPUP
-#define TX_RAMPUP  (us2osticks(2000))
-#endif
-
-#ifndef OSTICKS_PER_SEC
-#define OSTICKS_PER_SEC 15625
-#elif OSTICKS_PER_SEC < 10000 || OSTICKS_PER_SEC > 64516
-#error Illegal OSTICKS_PER_SEC - must be in range [10000:64516]. One tick must be 15.5us .. 100us long.
-#endif
-
-typedef s4_t  ostime_t;
-
-#if !HAS_ostick_conv
-#define us2osticks(us)   ((ostime_t)( ((s8_t)(us) * OSTICKS_PER_SEC) / 1000000))
-#define ms2osticks(ms)   ((ostime_t)( ((s8_t)(ms) * OSTICKS_PER_SEC)    / 1000))
-#define sec2osticks(sec) ((ostime_t)( (s8_t)(sec) * OSTICKS_PER_SEC))
-#define osticks2ms(os)   ((s4_t)(((os)*(s8_t)1000    ) / OSTICKS_PER_SEC))
-#define osticks2us(os)   ((s4_t)(((os)*(s8_t)1000000 ) / OSTICKS_PER_SEC))
-// Special versions
-#define us2osticksCeil(us)  ((ostime_t)( ((s8_t)(us) * OSTICKS_PER_SEC + 999999) / 1000000))
-#define us2osticksRound(us) ((ostime_t)( ((s8_t)(us) * OSTICKS_PER_SEC + 500000) / 1000000))
-#define ms2osticksCeil(ms)  ((ostime_t)( ((s8_t)(ms) * OSTICKS_PER_SEC + 999) / 1000))
-#define ms2osticksRound(ms) ((ostime_t)( ((s8_t)(ms) * OSTICKS_PER_SEC + 500) / 1000))
-#endif
-
-
-struct osjob_t;  // fwd decl.
-typedef void (*osjobcb_t) (struct osjob_t*);
-struct osjob_t {
-    struct osjob_t* next;
-    ostime_t deadline;
-    osjobcb_t  func;
-};
-TYPEDEF_xref2osjob_t;
-
-
-#if !HAS_os_calls
-
-#ifndef os_getDevKey
-void os_getDevKey (xref2u1_t buf);
-#endif
-#ifndef os_getArtEui
-void os_getArtEui (xref2u1_t buf);
-#endif
-#ifndef os_getDevEui
-void os_getDevEui (xref2u1_t buf);
-#endif
-#ifndef os_setCallback
-void os_setCallback (xref2osjob_t job, osjobcb_t cb);
-#endif
-#ifndef os_setTimedCallback
-void os_setTimedCallback (xref2osjob_t job, ostime_t time, osjobcb_t cb);
-#endif
-#ifndef os_clearCallback
-void os_clearCallback (xref2osjob_t job);
-#endif
-#ifndef os_getTime
-ostime_t os_getTime (void);
-#endif
-#ifndef os_getTimeSecs
-uint os_getTimeSecs (void);
-#endif
-#ifndef os_radio
-void os_radio (u1_t mode);
-#endif
-#ifndef os_getBattLevel
-u1_t os_getBattLevel (void);
-#endif
-
-#ifndef os_rlsbf4
-//! Read 32-bit quantity from given pointer in little endian byte order.
-u4_t os_rlsbf4 (xref2cu1_t buf);
-#endif
-#ifndef os_wlsbf4
-//! Write 32-bit quntity into buffer in little endian byte order.
-void os_wlsbf4 (xref2u1_t buf, u4_t value);
-#endif
-#ifndef os_rmsbf4
-//! Read 32-bit quantity from given pointer in big endian byte order.
-u4_t os_rmsbf4 (xref2cu1_t buf);
-#endif
-#ifndef os_wmsbf4
-//! Write 32-bit quntity into buffer in big endian byte order.
-void os_wmsbf4 (xref2u1_t buf, u4_t value);
-#endif
-#ifndef os_rlsbf2
-//! Read 16-bit quantity from given pointer in little endian byte order.
-u2_t os_rlsbf2 (xref2cu1_t buf);
-#endif
-#ifndef os_wlsbf2
-//! Write 16-bit quntity into buffer in little endian byte order.
-void os_wlsbf2 (xref2u1_t buf, u2_t value);
-#endif
-
-//! Get random number (default impl for u2_t).
-#ifndef os_getRndU2
-#define os_getRndU2() ((u2_t)((os_getRndU1()<<8)|os_getRndU1()))
-#endif
-#ifndef os_crc16
-u2_t os_crc16 (xref2u1_t d, uint len);
-#endif
-
-#endif // !HAS_os_calls
-
-// ======================================================================
-// AES support 
-// !!Keep in sync with lorabase.hpp!!
-
-#ifndef AES_ENC  // if AES_ENC is defined as macro all other values must be too
-#define AES_ENC       0x00 
-#define AES_DEC       0x01
-#define AES_MIC       0x02
-#define AES_CTR       0x04
-#define AES_MICNOAUX  0x08
-#endif
-#ifndef AESkey  // if AESkey is defined as macro all other values must be too
-extern xref2u1_t AESkey;
-extern xref2u1_t AESaux;
-#endif
-#ifndef os_aes
-u4_t os_aes (u1_t mode, xref2u1_t buf, u2_t len);
-#endif
-
-void wbr_print_lora_regs(void);
-
-#endif // _oslmic_h_
diff -r b8648db86f86 -r f73dbeca8736 rtc_alarm.c
--- a/rtc_alarm.c	Fri Jan 15 18:28:50 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,166 +0,0 @@
-/* mbed 
- * Copyright (c) 
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 "rtc_alarm.h"
-#include <stdio.h> 
-
-/*
-  The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC 
-  Wakeup event, a tamper event, a time-stamp event, or a comparator event, 
-  without depending on an external interrupt (Auto-wakeup mode).
-
-(+) RTC auto-wakeup (AWU) from the Stop mode
-    (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to:
-         (+++) Configure the EXTI Line 17 to be sensitive to rising edges (Interrupt 
-               or Event modes) and Enable the RTC Alarm Interrupt using the HAL_RTC_SetAlarm_IT()
-               function
-         (+++) Configure the RTC to generate the RTC alarm using the HAL_RTC_Init() 
-               and HAL_RTC_SetTime() functions.
-    (++) To wake up from the Stop mode with an RTC Tamper or time stamp event, it 
-         is necessary to:
-         (+++) Configure the EXTI Line 19 to be sensitive to rising edges (Interrupt or Event modes) and
-               Enable the RTC Tamper or time stamp Interrupt using the HAL_RTCEx_SetTamper_IT() 
-               or HAL_RTCEx_SetTimeStamp_IT() functions.
-    (++) To wake up from the Stop mode with an RTC WakeUp event, it is necessary to:
-         (+++) Configure the EXTI Line 20 to be sensitive to rising edges (Interrupt or Event modes) and
-               Enable the RTC WakeUp Interrupt using the HAL_RTCEx_SetWakeUpTimer_IT() function.
-         (+++) Configure the RTC to generate the RTC WakeUp event using the HAL_RTCEx_SetWakeUpTimer() 
-               function.
-*/
-
-extern RTC_HandleTypeDef RtcHandle;
-
-#if 0
-typedef struct
-{
-  RTC_TypeDef                 *Instance;  /*!< Register base address    */
-  RTC_InitTypeDef             Init;       /*!< RTC required parameters  */ 
-  HAL_LockTypeDef             Lock;       /*!< RTC locking object       */
-  __IO HAL_RTCStateTypeDef    State;      /*!< Time communication state */
-} RTC_HandleTypeDef;
-
-HAL_RTCEx_WakeUpTimerIRQHandler():
-    __HAL_RTC_WAKEUPTIMER_GET_IT():
-        ->Instance->ISR
-    ->Instance->CR
-    HAL_RTCEx_WakeUpTimerEventCallback():
-        (none)
-    __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG():
-        ->Instance->ISR
-    ->State
-
-HAL_RTCEx_SetWakeUpTimer_IT():
-    __HAL_LOCK():
-        ->Lock
-    ->State
-    __HAL_RTC_WRITEPROTECTION_DISABLE():
-    __HAL_RTC_WAKEUPTIMER_DISABLE():
-    __HAL_RTC_WAKEUPTIMER_GET_FLAG():
-    __HAL_RTC_WRITEPROTECTION_ENABLE():
-    __HAL_UNLOCK():
-    ->Instance->WUTR
-    ->Instance->CR
-    __HAL_RTC_WAKEUPTIMER_ENABLE():
-
-HAL_RTCEx_DeactivateWakeUpTimer():
-
-#endif /* #if 0 */
-
-static void rtc_wkup_irq(void)
-{
-    HAL_RTCEx_WakeUpTimerIRQHandler(&RtcHandle);
-}
-
-void rtc_alarm_init()
-{
-    /* Enable Ultra low power mode */
-    HAL_PWREx_EnableUltraLowPower();
-
-    /* Enable the fast wake up from Ultra low power mode */
-    HAL_PWREx_EnableFastWakeUp();
-
-    NVIC_SetVector(RTC_WKUP_IRQn, (uint32_t)rtc_wkup_irq);
-    NVIC_EnableIRQ(RTC_WKUP_IRQn);
-}
-
-void rtc_alarm_start(uint32_t seconds)
-{
-    /* Disable Wakeup Counter */
-    HAL_RTCEx_DeactivateWakeUpTimer(&RtcHandle);
-
-/*
-RTC_WAKEUPCLOCK_RTCCLK_DIV16        488.3us steps, upto 32s
-RTC_WAKEUPCLOCK_RTCCLK_DIV8         244us steps
-RTC_WAKEUPCLOCK_RTCCLK_DIV4         122us steps
-RTC_WAKEUPCLOCK_RTCCLK_DIV2:        61.035us steps
-RTC_WAKEUPCLOCK_CK_SPRE_16BITS      1s steps
-RTC_WAKEUPCLOCK_CK_SPRE_17BITS      1s steps
-*/
-    
-    /* ## Setting the Wake up time ############################################*/
-    /* see RM0038 section 20.3.4 */
-    //HAL_RTCEx_SetWakeUpTimer_IT(&RtcHandle, seconds, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
-    HAL_RTCEx_SetWakeUpTimer_IT(&RtcHandle, seconds, RTC_WAKEUPCLOCK_CK_SPRE_16BITS);
-
-}
-
-void rtc_print_subseconds()
-{
-    printf("ssr:%04x ", RtcHandle.Instance->SSR);
-}
-
-time_t rtc_read_with_subseconds(void)
-{
-    RTC_DateTypeDef dateStruct;
-    RTC_TimeTypeDef timeStruct;
-    struct tm timeinfo;
-
-    RtcHandle.Instance = RTC;
-
-    // Read actual date and time
-    // Warning: the time must be read first!
-    HAL_RTC_GetTime(&RtcHandle, &timeStruct, FORMAT_BIN);
-    HAL_RTC_GetDate(&RtcHandle, &dateStruct, FORMAT_BIN);
-
-    // Setup a tm structure based on the RTC
-    timeinfo.tm_wday = dateStruct.WeekDay;
-    timeinfo.tm_mon  = dateStruct.Month - 1;
-    timeinfo.tm_mday = dateStruct.Date;
-    timeinfo.tm_year = dateStruct.Year + 100;
-    timeinfo.tm_hour = timeStruct.Hours;
-    timeinfo.tm_min  = timeStruct.Minutes;
-    timeinfo.tm_sec  = timeStruct.Seconds;
-
-    // Convert to timestamp
-    time_t t = mktime(&timeinfo);
-
-    t <<= 14;
-    printf("14:%08x ", t);
-
-    //return (t << 14) | timeStruct.Seconds;
-    return t | timeStruct.SubSeconds;
-}
-
-/**
-  * @brief  RTC Wake Up callback
-  * @param  None
-  * @retval None
-  */
-void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
-{
-  /* Clear Wake Up Flag */
-  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
-}
-
diff -r b8648db86f86 -r f73dbeca8736 rtc_alarm.h
--- a/rtc_alarm.h	Fri Jan 15 18:28:50 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/* mbed 
- * Copyright (c) 
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 RTC_ALARM_H
-#define RTC_ALARM_H
-
-#include "device.h"
-#include <time.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void rtc_alarm_init(void);
-void rtc_alarm_start(uint32_t seconds);
-void rtc_print_subseconds(void);
-time_t rtc_read_with_subseconds(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* RTC_ALARM_H */