Qasim Zia / Mbed OS pelion-example-common

Dependencies:   ublox-at-cellular-interface ublox-cellular-base

Committer:
screamer
Date:
Mon Dec 10 21:58:43 2018 +0000
Revision:
0:a076a1bbe630
Initial revision

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:a076a1bbe630 1 /*
screamer 0:a076a1bbe630 2 * Copyright (c) 2018 ARM Limited. All rights reserved.
screamer 0:a076a1bbe630 3 * SPDX-License-Identifier: Apache-2.0
screamer 0:a076a1bbe630 4 * Licensed under the Apache License, Version 2.0 (the License); you may
screamer 0:a076a1bbe630 5 * not use this file except in compliance with the License.
screamer 0:a076a1bbe630 6 * You may obtain a copy of the License at
screamer 0:a076a1bbe630 7 *
screamer 0:a076a1bbe630 8 * http://www.apache.org/licenses/LICENSE-2.0
screamer 0:a076a1bbe630 9 *
screamer 0:a076a1bbe630 10 * Unless required by applicable law or agreed to in writing, software
screamer 0:a076a1bbe630 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
screamer 0:a076a1bbe630 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
screamer 0:a076a1bbe630 13 * See the License for the specific language governing permissions and
screamer 0:a076a1bbe630 14 * limitations under the License.
screamer 0:a076a1bbe630 15 */
screamer 0:a076a1bbe630 16 #include "BlockDevice.h"
screamer 0:a076a1bbe630 17 #include "FileSystem.h"
screamer 0:a076a1bbe630 18 #include "FATFileSystem.h"
screamer 0:a076a1bbe630 19 #include "LittleFileSystem.h"
screamer 0:a076a1bbe630 20
screamer 0:a076a1bbe630 21 #if COMPONENT_SPIF
screamer 0:a076a1bbe630 22 #include "SPIFBlockDevice.h"
screamer 0:a076a1bbe630 23 #endif
screamer 0:a076a1bbe630 24
screamer 0:a076a1bbe630 25 #if COMPONENT_QSPIF
screamer 0:a076a1bbe630 26 #include "QSPIFBlockDevice.h"
screamer 0:a076a1bbe630 27 #endif
screamer 0:a076a1bbe630 28
screamer 0:a076a1bbe630 29 #if COMPONENT_DATAFLASH
screamer 0:a076a1bbe630 30 #include "DataFlashBlockDevice.h"
screamer 0:a076a1bbe630 31 #endif
screamer 0:a076a1bbe630 32
screamer 0:a076a1bbe630 33 #if COMPONENT_SD
screamer 0:a076a1bbe630 34 #include "SDBlockDevice.h"
screamer 0:a076a1bbe630 35 #endif
screamer 0:a076a1bbe630 36
screamer 0:a076a1bbe630 37 #if COMPONENT_FLASHIAP
screamer 0:a076a1bbe630 38 #include "FlashIAPBlockDevice.h"
screamer 0:a076a1bbe630 39 #endif
screamer 0:a076a1bbe630 40
screamer 0:a076a1bbe630 41 #if COMPONENT_NUSD
screamer 0:a076a1bbe630 42 #include "NuSDBlockDevice.h"
screamer 0:a076a1bbe630 43 #endif
screamer 0:a076a1bbe630 44
screamer 0:a076a1bbe630 45 using namespace mbed;
screamer 0:a076a1bbe630 46
screamer 0:a076a1bbe630 47 // Align a value to a specified size.
screamer 0:a076a1bbe630 48 // Parameters :
screamer 0:a076a1bbe630 49 // val - [IN] Value.
screamer 0:a076a1bbe630 50 // size - [IN] Size.
screamer 0:a076a1bbe630 51 // Return : Aligned value.
screamer 0:a076a1bbe630 52 static inline uint32_t align_up(uint32_t val, uint32_t size)
screamer 0:a076a1bbe630 53 {
screamer 0:a076a1bbe630 54 return (((val - 1) / size) + 1) * size;
screamer 0:a076a1bbe630 55 }
screamer 0:a076a1bbe630 56
screamer 0:a076a1bbe630 57 BlockDevice *BlockDevice::get_default_instance()
screamer 0:a076a1bbe630 58 {
screamer 0:a076a1bbe630 59 #if COMPONENT_SPIF
screamer 0:a076a1bbe630 60
screamer 0:a076a1bbe630 61 static SPIFBlockDevice default_bd(
screamer 0:a076a1bbe630 62 MBED_CONF_SPIF_DRIVER_SPI_MOSI,
screamer 0:a076a1bbe630 63 MBED_CONF_SPIF_DRIVER_SPI_MISO,
screamer 0:a076a1bbe630 64 MBED_CONF_SPIF_DRIVER_SPI_CLK,
screamer 0:a076a1bbe630 65 MBED_CONF_SPIF_DRIVER_SPI_CS,
screamer 0:a076a1bbe630 66 MBED_CONF_SPIF_DRIVER_SPI_FREQ
screamer 0:a076a1bbe630 67 );
screamer 0:a076a1bbe630 68
screamer 0:a076a1bbe630 69 return &default_bd;
screamer 0:a076a1bbe630 70
screamer 0:a076a1bbe630 71 #elif COMPONENT_QSPIF
screamer 0:a076a1bbe630 72
screamer 0:a076a1bbe630 73 static QSPIFBlockDevice default_bd(
screamer 0:a076a1bbe630 74 MBED_CONF_QSPIF_QSPI_IO0,
screamer 0:a076a1bbe630 75 MBED_CONF_QSPIF_QSPI_IO1,
screamer 0:a076a1bbe630 76 MBED_CONF_QSPIF_QSPI_IO2,
screamer 0:a076a1bbe630 77 MBED_CONF_QSPIF_QSPI_IO3,
screamer 0:a076a1bbe630 78 MBED_CONF_QSPIF_QSPI_SCK,
screamer 0:a076a1bbe630 79 MBED_CONF_QSPIF_QSPI_CSN,
screamer 0:a076a1bbe630 80 MBED_CONF_QSPIF_QSPI_POLARITY_MODE,
screamer 0:a076a1bbe630 81 MBED_CONF_QSPIF_QSPI_FREQ
screamer 0:a076a1bbe630 82 );
screamer 0:a076a1bbe630 83
screamer 0:a076a1bbe630 84 return &default_bd;
screamer 0:a076a1bbe630 85
screamer 0:a076a1bbe630 86 #elif COMPONENT_DATAFLASH
screamer 0:a076a1bbe630 87
screamer 0:a076a1bbe630 88 static DataFlashBlockDevice default_bd(
screamer 0:a076a1bbe630 89 MBED_CONF_DATAFLASH_SPI_MOSI,
screamer 0:a076a1bbe630 90 MBED_CONF_DATAFLASH_SPI_MISO,
screamer 0:a076a1bbe630 91 MBED_CONF_DATAFLASH_SPI_CLK,
screamer 0:a076a1bbe630 92 MBED_CONF_DATAFLASH_SPI_CS
screamer 0:a076a1bbe630 93 );
screamer 0:a076a1bbe630 94
screamer 0:a076a1bbe630 95 return &default_bd;
screamer 0:a076a1bbe630 96
screamer 0:a076a1bbe630 97 #elif COMPONENT_SD
screamer 0:a076a1bbe630 98
screamer 0:a076a1bbe630 99 static SDBlockDevice default_bd(
screamer 0:a076a1bbe630 100 MBED_CONF_SD_SPI_MOSI,
screamer 0:a076a1bbe630 101 MBED_CONF_SD_SPI_MISO,
screamer 0:a076a1bbe630 102 MBED_CONF_SD_SPI_CLK,
screamer 0:a076a1bbe630 103 MBED_CONF_SD_SPI_CS
screamer 0:a076a1bbe630 104 );
screamer 0:a076a1bbe630 105
screamer 0:a076a1bbe630 106 return &default_bd;
screamer 0:a076a1bbe630 107
screamer 0:a076a1bbe630 108 #elif COMPONENT_NUSD
screamer 0:a076a1bbe630 109
screamer 0:a076a1bbe630 110 static NuSDBlockDevice default_bd;
screamer 0:a076a1bbe630 111
screamer 0:a076a1bbe630 112 return &default_bd;
screamer 0:a076a1bbe630 113
screamer 0:a076a1bbe630 114 #elif COMPONENT_FLASHIAP
screamer 0:a076a1bbe630 115
screamer 0:a076a1bbe630 116 #if (MBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE == 0) && (MBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS == 0xFFFFFFFF)
screamer 0:a076a1bbe630 117
screamer 0:a076a1bbe630 118 size_t flash_size;
screamer 0:a076a1bbe630 119 uint32_t start_address;
screamer 0:a076a1bbe630 120 uint32_t bottom_address;
screamer 0:a076a1bbe630 121 FlashIAP flash;
screamer 0:a076a1bbe630 122
screamer 0:a076a1bbe630 123 int ret = flash.init();
screamer 0:a076a1bbe630 124 if (ret != 0) {
screamer 0:a076a1bbe630 125 return 0;
screamer 0:a076a1bbe630 126 }
screamer 0:a076a1bbe630 127
screamer 0:a076a1bbe630 128 //Find the start of first sector after text area
screamer 0:a076a1bbe630 129 bottom_address = align_up(FLASHIAP_ROM_END, flash.get_sector_size(FLASHIAP_ROM_END));
screamer 0:a076a1bbe630 130 start_address = flash.get_flash_start();
screamer 0:a076a1bbe630 131 flash_size = flash.get_flash_size();
screamer 0:a076a1bbe630 132
screamer 0:a076a1bbe630 133 ret = flash.deinit();
screamer 0:a076a1bbe630 134
screamer 0:a076a1bbe630 135 static FlashIAPBlockDevice default_bd(bottom_address, start_address + flash_size - bottom_address);
screamer 0:a076a1bbe630 136
screamer 0:a076a1bbe630 137 #else
screamer 0:a076a1bbe630 138
screamer 0:a076a1bbe630 139 static FlashIAPBlockDevice default_bd;
screamer 0:a076a1bbe630 140
screamer 0:a076a1bbe630 141 #endif
screamer 0:a076a1bbe630 142
screamer 0:a076a1bbe630 143 return &default_bd;
screamer 0:a076a1bbe630 144
screamer 0:a076a1bbe630 145 #else
screamer 0:a076a1bbe630 146
screamer 0:a076a1bbe630 147 return NULL;
screamer 0:a076a1bbe630 148
screamer 0:a076a1bbe630 149 #endif
screamer 0:a076a1bbe630 150
screamer 0:a076a1bbe630 151 }
screamer 0:a076a1bbe630 152
screamer 0:a076a1bbe630 153 FileSystem *FileSystem::get_default_instance()
screamer 0:a076a1bbe630 154 {
screamer 0:a076a1bbe630 155 #if COMPONENT_SPIF || COMPONENT_QSPIF || COMPONENT_DATAFLASH || COMPONENT_NUSD
screamer 0:a076a1bbe630 156
screamer 0:a076a1bbe630 157 static LittleFileSystem flash("flash", BlockDevice::get_default_instance());
screamer 0:a076a1bbe630 158 flash.set_as_default();
screamer 0:a076a1bbe630 159
screamer 0:a076a1bbe630 160 return &flash;
screamer 0:a076a1bbe630 161
screamer 0:a076a1bbe630 162 #elif COMPONENT_SD
screamer 0:a076a1bbe630 163
screamer 0:a076a1bbe630 164 static FATFileSystem sdcard("sd", BlockDevice::get_default_instance());
screamer 0:a076a1bbe630 165 sdcard.set_as_default();
screamer 0:a076a1bbe630 166
screamer 0:a076a1bbe630 167 return &sdcard;
screamer 0:a076a1bbe630 168
screamer 0:a076a1bbe630 169 #elif COMPONENT_FLASHIAP
screamer 0:a076a1bbe630 170
screamer 0:a076a1bbe630 171 static LittleFileSystem flash("flash", BlockDevice::get_default_instance());
screamer 0:a076a1bbe630 172 flash.set_as_default();
screamer 0:a076a1bbe630 173
screamer 0:a076a1bbe630 174 return &flash;
screamer 0:a076a1bbe630 175
screamer 0:a076a1bbe630 176 #else
screamer 0:a076a1bbe630 177
screamer 0:a076a1bbe630 178 return NULL;
screamer 0:a076a1bbe630 179
screamer 0:a076a1bbe630 180 #endif
screamer 0:a076a1bbe630 181
screamer 0:a076a1bbe630 182 }