Amundson OCE 360 homework 7 SD card library

Dependencies:   FATFileSystem

Fork of SDFileSystem by Neil Thiessen

Committer:
bamundson
Date:
Sat Nov 03 19:11:15 2018 +0000
Revision:
27:70654d2bcff8
Parent:
22:3fa5eaf48e81
Amundson OCE 360 Homework 7, collect temperature and time data to be written and stored to an SD card. Controlled by switch input.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
neilt6 18:2286a4e7fa31 1 /* SD/MMC File System Library
neilt6 22:3fa5eaf48e81 2 * Copyright (c) 2016 Neil Thiessen
neilt6 18:2286a4e7fa31 3 *
neilt6 18:2286a4e7fa31 4 * Licensed under the Apache License, Version 2.0 (the "License");
neilt6 18:2286a4e7fa31 5 * you may not use this file except in compliance with the License.
neilt6 18:2286a4e7fa31 6 * You may obtain a copy of the License at
neilt6 18:2286a4e7fa31 7 *
neilt6 18:2286a4e7fa31 8 * http://www.apache.org/licenses/LICENSE-2.0
neilt6 18:2286a4e7fa31 9 *
neilt6 18:2286a4e7fa31 10 * Unless required by applicable law or agreed to in writing, software
neilt6 18:2286a4e7fa31 11 * distributed under the License is distributed on an "AS IS" BASIS,
neilt6 18:2286a4e7fa31 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
neilt6 18:2286a4e7fa31 13 * See the License for the specific language governing permissions and
neilt6 18:2286a4e7fa31 14 * limitations under the License.
neilt6 18:2286a4e7fa31 15 */
neilt6 18:2286a4e7fa31 16
neilt6 18:2286a4e7fa31 17 #include "SDCRC.h"
neilt6 18:2286a4e7fa31 18
neilt6 18:2286a4e7fa31 19 namespace SDCRC
neilt6 18:2286a4e7fa31 20 {
neilt6 18:2286a4e7fa31 21
neilt6 18:2286a4e7fa31 22 namespace
neilt6 18:2286a4e7fa31 23 {
neilt6 18:2286a4e7fa31 24 const char m_Crc7Table[] = {
neilt6 18:2286a4e7fa31 25 0x00, 0x09, 0x12, 0x1B, 0x24, 0x2D, 0x36, 0x3F,
neilt6 18:2286a4e7fa31 26 0x48, 0x41, 0x5A, 0x53, 0x6C, 0x65, 0x7E, 0x77,
neilt6 18:2286a4e7fa31 27 0x19, 0x10, 0x0B, 0x02, 0x3D, 0x34, 0x2F, 0x26,
neilt6 18:2286a4e7fa31 28 0x51, 0x58, 0x43, 0x4A, 0x75, 0x7C, 0x67, 0x6E,
neilt6 18:2286a4e7fa31 29 0x32, 0x3B, 0x20, 0x29, 0x16, 0x1F, 0x04, 0x0D,
neilt6 18:2286a4e7fa31 30 0x7A, 0x73, 0x68, 0x61, 0x5E, 0x57, 0x4C, 0x45,
neilt6 18:2286a4e7fa31 31 0x2B, 0x22, 0x39, 0x30, 0x0F, 0x06, 0x1D, 0x14,
neilt6 18:2286a4e7fa31 32 0x63, 0x6A, 0x71, 0x78, 0x47, 0x4E, 0x55, 0x5C,
neilt6 18:2286a4e7fa31 33 0x64, 0x6D, 0x76, 0x7F, 0x40, 0x49, 0x52, 0x5B,
neilt6 18:2286a4e7fa31 34 0x2C, 0x25, 0x3E, 0x37, 0x08, 0x01, 0x1A, 0x13,
neilt6 18:2286a4e7fa31 35 0x7D, 0x74, 0x6F, 0x66, 0x59, 0x50, 0x4B, 0x42,
neilt6 18:2286a4e7fa31 36 0x35, 0x3C, 0x27, 0x2E, 0x11, 0x18, 0x03, 0x0A,
neilt6 18:2286a4e7fa31 37 0x56, 0x5F, 0x44, 0x4D, 0x72, 0x7B, 0x60, 0x69,
neilt6 18:2286a4e7fa31 38 0x1E, 0x17, 0x0C, 0x05, 0x3A, 0x33, 0x28, 0x21,
neilt6 18:2286a4e7fa31 39 0x4F, 0x46, 0x5D, 0x54, 0x6B, 0x62, 0x79, 0x70,
neilt6 18:2286a4e7fa31 40 0x07, 0x0E, 0x15, 0x1C, 0x23, 0x2A, 0x31, 0x38,
neilt6 18:2286a4e7fa31 41 0x41, 0x48, 0x53, 0x5A, 0x65, 0x6C, 0x77, 0x7E,
neilt6 18:2286a4e7fa31 42 0x09, 0x00, 0x1B, 0x12, 0x2D, 0x24, 0x3F, 0x36,
neilt6 18:2286a4e7fa31 43 0x58, 0x51, 0x4A, 0x43, 0x7C, 0x75, 0x6E, 0x67,
neilt6 18:2286a4e7fa31 44 0x10, 0x19, 0x02, 0x0B, 0x34, 0x3D, 0x26, 0x2F,
neilt6 18:2286a4e7fa31 45 0x73, 0x7A, 0x61, 0x68, 0x57, 0x5E, 0x45, 0x4C,
neilt6 18:2286a4e7fa31 46 0x3B, 0x32, 0x29, 0x20, 0x1F, 0x16, 0x0D, 0x04,
neilt6 18:2286a4e7fa31 47 0x6A, 0x63, 0x78, 0x71, 0x4E, 0x47, 0x5C, 0x55,
neilt6 18:2286a4e7fa31 48 0x22, 0x2B, 0x30, 0x39, 0x06, 0x0F, 0x14, 0x1D,
neilt6 18:2286a4e7fa31 49 0x25, 0x2C, 0x37, 0x3E, 0x01, 0x08, 0x13, 0x1A,
neilt6 18:2286a4e7fa31 50 0x6D, 0x64, 0x7F, 0x76, 0x49, 0x40, 0x5B, 0x52,
neilt6 18:2286a4e7fa31 51 0x3C, 0x35, 0x2E, 0x27, 0x18, 0x11, 0x0A, 0x03,
neilt6 18:2286a4e7fa31 52 0x74, 0x7D, 0x66, 0x6F, 0x50, 0x59, 0x42, 0x4B,
neilt6 18:2286a4e7fa31 53 0x17, 0x1E, 0x05, 0x0C, 0x33, 0x3A, 0x21, 0x28,
neilt6 18:2286a4e7fa31 54 0x5F, 0x56, 0x4D, 0x44, 0x7B, 0x72, 0x69, 0x60,
neilt6 18:2286a4e7fa31 55 0x0E, 0x07, 0x1C, 0x15, 0x2A, 0x23, 0x38, 0x31,
neilt6 18:2286a4e7fa31 56 0x46, 0x4F, 0x54, 0x5D, 0x62, 0x6B, 0x70, 0x79
neilt6 18:2286a4e7fa31 57 };
neilt6 18:2286a4e7fa31 58
neilt6 18:2286a4e7fa31 59 const unsigned short m_Crc16Table[256] = {
neilt6 18:2286a4e7fa31 60 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
neilt6 18:2286a4e7fa31 61 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
neilt6 18:2286a4e7fa31 62 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
neilt6 18:2286a4e7fa31 63 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
neilt6 18:2286a4e7fa31 64 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
neilt6 18:2286a4e7fa31 65 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
neilt6 18:2286a4e7fa31 66 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
neilt6 18:2286a4e7fa31 67 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
neilt6 18:2286a4e7fa31 68 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
neilt6 18:2286a4e7fa31 69 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
neilt6 18:2286a4e7fa31 70 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
neilt6 18:2286a4e7fa31 71 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
neilt6 18:2286a4e7fa31 72 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
neilt6 18:2286a4e7fa31 73 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
neilt6 18:2286a4e7fa31 74 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
neilt6 18:2286a4e7fa31 75 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
neilt6 18:2286a4e7fa31 76 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
neilt6 18:2286a4e7fa31 77 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
neilt6 18:2286a4e7fa31 78 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
neilt6 18:2286a4e7fa31 79 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
neilt6 18:2286a4e7fa31 80 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
neilt6 18:2286a4e7fa31 81 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
neilt6 18:2286a4e7fa31 82 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
neilt6 18:2286a4e7fa31 83 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
neilt6 18:2286a4e7fa31 84 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
neilt6 18:2286a4e7fa31 85 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
neilt6 18:2286a4e7fa31 86 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
neilt6 18:2286a4e7fa31 87 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
neilt6 18:2286a4e7fa31 88 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
neilt6 18:2286a4e7fa31 89 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
neilt6 18:2286a4e7fa31 90 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
neilt6 18:2286a4e7fa31 91 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
neilt6 18:2286a4e7fa31 92 };
neilt6 18:2286a4e7fa31 93 }
neilt6 18:2286a4e7fa31 94
neilt6 18:2286a4e7fa31 95 char crc7(const char* data, int length)
neilt6 18:2286a4e7fa31 96 {
neilt6 18:2286a4e7fa31 97 //Calculate the CRC7 checksum for the specified data block
neilt6 18:2286a4e7fa31 98 char crc = 0;
neilt6 18:2286a4e7fa31 99 for (int i = 0; i < length; i++) {
neilt6 18:2286a4e7fa31 100 crc = m_Crc7Table[(crc << 1) ^ data[i]];
neilt6 18:2286a4e7fa31 101 }
neilt6 18:2286a4e7fa31 102
neilt6 18:2286a4e7fa31 103 //Return the calculated checksum
neilt6 18:2286a4e7fa31 104 return crc;
neilt6 18:2286a4e7fa31 105 }
neilt6 18:2286a4e7fa31 106
neilt6 18:2286a4e7fa31 107 unsigned short crc16(const char* data, int length)
neilt6 18:2286a4e7fa31 108 {
neilt6 18:2286a4e7fa31 109 //Calculate the CRC16 checksum for the specified data block
neilt6 18:2286a4e7fa31 110 unsigned short crc = 0;
neilt6 18:2286a4e7fa31 111 for (int i = 0; i < length; i++) {
neilt6 18:2286a4e7fa31 112 crc = (crc << 8) ^ m_Crc16Table[((crc >> 8) ^ data[i]) & 0x00FF];
neilt6 18:2286a4e7fa31 113 }
neilt6 18:2286a4e7fa31 114
neilt6 18:2286a4e7fa31 115 //Return the calculated checksum
neilt6 18:2286a4e7fa31 116 return crc;
neilt6 18:2286a4e7fa31 117 }
neilt6 18:2286a4e7fa31 118
neilt6 18:2286a4e7fa31 119 }