Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SX127x lib_gps lib_mma8451q lib_mpl3115a2 lib_sx9500 mbed
Fork of na_mote1 by
See wiki Page for a detailed
This is a link to the wiki page
Revision 17:f73dbeca8736, committed 2018-05-29
- 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
--- 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
--- 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];
-}
-
--- 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
--- 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_
--- 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:
--- 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
--- 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_
--- 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);
-}
-
--- 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 */
