TYBLE16 on os5 sample programs

Dependencies:   BME280 TextLCD nRF51_Vdd

Fork of TYBLE16_mbedlized_os5_BASE by Kenji Arai

Please refer following notebook.
/users/kenjiArai/notebook/tyble16-module-as-mbed-os-5-board-mbedlization/

Committer:
kenjiArai
Date:
Sun Apr 15 04:15:18 2018 +0000
Revision:
3:c0010c8ad17f
Parent:
1:9011c83e4178
Separated Uart_Clinent & Uart_Server due to memory overflow

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 1:9011c83e4178 1 /* mbed Microcontroller Library
kenjiArai 1:9011c83e4178 2 * Copyright (c) 2006-2015 ARM Limited
kenjiArai 1:9011c83e4178 3 *
kenjiArai 1:9011c83e4178 4 * Licensed under the Apache License, Version 2.0 (the "License");
kenjiArai 1:9011c83e4178 5 * you may not use this file except in compliance with the License.
kenjiArai 1:9011c83e4178 6 * You may obtain a copy of the License at
kenjiArai 1:9011c83e4178 7 *
kenjiArai 1:9011c83e4178 8 * http://www.apache.org/licenses/LICENSE-2.0
kenjiArai 1:9011c83e4178 9 *
kenjiArai 1:9011c83e4178 10 * Unless required by applicable law or agreed to in writing, software
kenjiArai 1:9011c83e4178 11 * distributed under the License is distributed on an "AS IS" BASIS,
kenjiArai 1:9011c83e4178 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kenjiArai 1:9011c83e4178 13 * See the License for the specific language governing permissions and
kenjiArai 1:9011c83e4178 14 * limitations under the License.
kenjiArai 1:9011c83e4178 15 */
kenjiArai 1:9011c83e4178 16
kenjiArai 1:9011c83e4178 17 #include "URLFrame.h"
kenjiArai 1:9011c83e4178 18
kenjiArai 1:9011c83e4178 19 URLFrame::URLFrame(void)
kenjiArai 1:9011c83e4178 20 {
kenjiArai 1:9011c83e4178 21 urlDataLength = 0;
kenjiArai 1:9011c83e4178 22 memset(urlData, 0, sizeof(UrlData_t));
kenjiArai 1:9011c83e4178 23 }
kenjiArai 1:9011c83e4178 24
kenjiArai 1:9011c83e4178 25 URLFrame::URLFrame(const char *urlDataIn)
kenjiArai 1:9011c83e4178 26 {
kenjiArai 1:9011c83e4178 27 encodeURL(urlDataIn);
kenjiArai 1:9011c83e4178 28 }
kenjiArai 1:9011c83e4178 29
kenjiArai 1:9011c83e4178 30 URLFrame::URLFrame(UrlData_t urlDataIn, uint8_t urlDataLength)
kenjiArai 1:9011c83e4178 31 {
kenjiArai 1:9011c83e4178 32 if (urlDataLength > URL_DATA_MAX) {
kenjiArai 1:9011c83e4178 33 memcpy(urlData, urlDataIn, URL_DATA_MAX);
kenjiArai 1:9011c83e4178 34 } else {
kenjiArai 1:9011c83e4178 35 memcpy(urlData, urlDataIn, urlDataLength);
kenjiArai 1:9011c83e4178 36 }
kenjiArai 1:9011c83e4178 37 }
kenjiArai 1:9011c83e4178 38
kenjiArai 1:9011c83e4178 39 void URLFrame::constructURLFrame(uint8_t* rawFrame, int8_t advPowerLevel)
kenjiArai 1:9011c83e4178 40 {
kenjiArai 1:9011c83e4178 41 size_t index = 0;
kenjiArai 1:9011c83e4178 42 rawFrame[index++] = EDDYSTONE_UUID[0]; // 16-bit Eddystone UUID
kenjiArai 1:9011c83e4178 43 rawFrame[index++] = EDDYSTONE_UUID[1];
kenjiArai 1:9011c83e4178 44 rawFrame[index++] = FRAME_TYPE_URL; // 1B Type
kenjiArai 1:9011c83e4178 45 rawFrame[index++] = advPowerLevel; // 1B Power @ 0meter
kenjiArai 1:9011c83e4178 46 memcpy(rawFrame + index, urlData, urlDataLength); // Encoded URL
kenjiArai 1:9011c83e4178 47 }
kenjiArai 1:9011c83e4178 48
kenjiArai 1:9011c83e4178 49 size_t URLFrame::getRawFrameSize(void) const
kenjiArai 1:9011c83e4178 50 {
kenjiArai 1:9011c83e4178 51 return urlDataLength + FRAME_MIN_SIZE_URL + EDDYSTONE_UUID_SIZE;
kenjiArai 1:9011c83e4178 52 }
kenjiArai 1:9011c83e4178 53
kenjiArai 1:9011c83e4178 54 uint8_t* URLFrame::getEncodedURLData(void)
kenjiArai 1:9011c83e4178 55 {
kenjiArai 1:9011c83e4178 56 return urlData;
kenjiArai 1:9011c83e4178 57 }
kenjiArai 1:9011c83e4178 58
kenjiArai 1:9011c83e4178 59 uint8_t URLFrame::getEncodedURLDataLength(void) const
kenjiArai 1:9011c83e4178 60 {
kenjiArai 1:9011c83e4178 61 return urlDataLength;
kenjiArai 1:9011c83e4178 62 }
kenjiArai 1:9011c83e4178 63
kenjiArai 1:9011c83e4178 64 void URLFrame::setURLData(const char *urlDataIn)
kenjiArai 1:9011c83e4178 65 {
kenjiArai 1:9011c83e4178 66 encodeURL(urlDataIn);
kenjiArai 1:9011c83e4178 67 }
kenjiArai 1:9011c83e4178 68
kenjiArai 1:9011c83e4178 69 void URLFrame::setEncodedURLData(const uint8_t* urlEncodedDataIn, const uint8_t urlEncodedDataLengthIn)
kenjiArai 1:9011c83e4178 70 {
kenjiArai 1:9011c83e4178 71 urlDataLength = urlEncodedDataLengthIn;
kenjiArai 1:9011c83e4178 72 memcpy(urlData, urlEncodedDataIn, urlEncodedDataLengthIn);
kenjiArai 1:9011c83e4178 73 }
kenjiArai 1:9011c83e4178 74
kenjiArai 1:9011c83e4178 75 void URLFrame::encodeURL(const char *urlDataIn)
kenjiArai 1:9011c83e4178 76 {
kenjiArai 1:9011c83e4178 77 const char *prefixes[] = {
kenjiArai 1:9011c83e4178 78 "http://www.",
kenjiArai 1:9011c83e4178 79 "https://www.",
kenjiArai 1:9011c83e4178 80 "http://",
kenjiArai 1:9011c83e4178 81 "https://",
kenjiArai 1:9011c83e4178 82 };
kenjiArai 1:9011c83e4178 83 const size_t NUM_PREFIXES = sizeof(prefixes) / sizeof(char *);
kenjiArai 1:9011c83e4178 84 const char *suffixes[] = {
kenjiArai 1:9011c83e4178 85 ".com/",
kenjiArai 1:9011c83e4178 86 ".org/",
kenjiArai 1:9011c83e4178 87 ".edu/",
kenjiArai 1:9011c83e4178 88 ".net/",
kenjiArai 1:9011c83e4178 89 ".info/",
kenjiArai 1:9011c83e4178 90 ".biz/",
kenjiArai 1:9011c83e4178 91 ".gov/",
kenjiArai 1:9011c83e4178 92 ".com",
kenjiArai 1:9011c83e4178 93 ".org",
kenjiArai 1:9011c83e4178 94 ".edu",
kenjiArai 1:9011c83e4178 95 ".net",
kenjiArai 1:9011c83e4178 96 ".info",
kenjiArai 1:9011c83e4178 97 ".biz",
kenjiArai 1:9011c83e4178 98 ".gov"
kenjiArai 1:9011c83e4178 99 };
kenjiArai 1:9011c83e4178 100 const size_t NUM_SUFFIXES = sizeof(suffixes) / sizeof(char *);
kenjiArai 1:9011c83e4178 101
kenjiArai 1:9011c83e4178 102 urlDataLength = 0;
kenjiArai 1:9011c83e4178 103 memset(urlData, 0, sizeof(UrlData_t));
kenjiArai 1:9011c83e4178 104
kenjiArai 1:9011c83e4178 105 if ((urlDataIn == NULL) || (strlen(urlDataIn) == 0)) {
kenjiArai 1:9011c83e4178 106 return;
kenjiArai 1:9011c83e4178 107 }
kenjiArai 1:9011c83e4178 108
kenjiArai 1:9011c83e4178 109 /*
kenjiArai 1:9011c83e4178 110 * handle prefix
kenjiArai 1:9011c83e4178 111 */
kenjiArai 1:9011c83e4178 112 for (size_t i = 0; i < NUM_PREFIXES; i++) {
kenjiArai 1:9011c83e4178 113 size_t prefixLen = strlen(prefixes[i]);
kenjiArai 1:9011c83e4178 114 if (strncmp(urlDataIn, prefixes[i], prefixLen) == 0) {
kenjiArai 1:9011c83e4178 115 urlData[urlDataLength++] = i;
kenjiArai 1:9011c83e4178 116 urlDataIn += prefixLen;
kenjiArai 1:9011c83e4178 117 break;
kenjiArai 1:9011c83e4178 118 }
kenjiArai 1:9011c83e4178 119 }
kenjiArai 1:9011c83e4178 120
kenjiArai 1:9011c83e4178 121 /*
kenjiArai 1:9011c83e4178 122 * handle suffixes
kenjiArai 1:9011c83e4178 123 */
kenjiArai 1:9011c83e4178 124 while (*urlDataIn && (urlDataLength < URL_DATA_MAX)) {
kenjiArai 1:9011c83e4178 125 /* check for suffix match */
kenjiArai 1:9011c83e4178 126 size_t i;
kenjiArai 1:9011c83e4178 127 for (i = 0; i < NUM_SUFFIXES; i++) {
kenjiArai 1:9011c83e4178 128 size_t suffixLen = strlen(suffixes[i]);
kenjiArai 1:9011c83e4178 129 if (strncmp(urlDataIn, suffixes[i], suffixLen) == 0) {
kenjiArai 1:9011c83e4178 130 urlData[urlDataLength++] = i;
kenjiArai 1:9011c83e4178 131 urlDataIn += suffixLen;
kenjiArai 1:9011c83e4178 132 break; /* from the for loop for checking against suffixes */
kenjiArai 1:9011c83e4178 133 }
kenjiArai 1:9011c83e4178 134 }
kenjiArai 1:9011c83e4178 135 /* This is the default case where we've got an ordinary character which doesn't match a suffix. */
kenjiArai 1:9011c83e4178 136 if (i == NUM_SUFFIXES) {
kenjiArai 1:9011c83e4178 137 urlData[urlDataLength++] = *urlDataIn;
kenjiArai 1:9011c83e4178 138 ++urlDataIn;
kenjiArai 1:9011c83e4178 139 }
kenjiArai 1:9011c83e4178 140 }
kenjiArai 1:9011c83e4178 141 }