diff options
author | areviu <areviu.info@gmail.com> | 2018-05-06 14:49:44 +0000 |
---|---|---|
committer | areviu <areviu.info@gmail.com> | 2018-05-06 14:49:44 +0000 |
commit | a0c253d44da778e359c507c529a319f3f4d18b25 (patch) | |
tree | b61931799dd63a4c504278b5570405095e0d9e00 /os/various/reledge_bindings | |
parent | 7a53508f76c70cd5152bb66f36dbd39f0c7560b1 (diff) | |
download | ChibiOS-a0c253d44da778e359c507c529a319f3f4d18b25.tar.gz ChibiOS-a0c253d44da778e359c507c529a319f3f4d18b25.tar.bz2 ChibiOS-a0c253d44da778e359c507c529a319f3f4d18b25.zip |
moved ff and reliance-edge under binding folder
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12008 110e8d01-0319-4d1e-a829-52ad28d1bb01
Diffstat (limited to 'os/various/reledge_bindings')
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/ch_sdmmc_reledge.c | 64 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/ch_sdmmc_reledge.h | 14 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/osassert.c | 62 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/osbdev.c | 515 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/osclock.c | 85 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/osmutex.c | 108 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/osoutput.c | 76 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/ostask.c | 68 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/readme.txt (renamed from os/various/reledge_bindings/readme.txt) | 4 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/redosdeviations.h | 245 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/redostypes.h | 42 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/redtypes.h | 98 | ||||
-rw-r--r-- | os/various/reledge_bindings/SAMA5D2x/reledge.mk | 41 | ||||
-rw-r--r-- | os/various/reledge_bindings/reledge.mk | 30 |
14 files changed, 1420 insertions, 32 deletions
diff --git a/os/various/reledge_bindings/SAMA5D2x/ch_sdmmc_reledge.c b/os/various/reledge_bindings/SAMA5D2x/ch_sdmmc_reledge.c new file mode 100644 index 000000000..31630c081 --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/ch_sdmmc_reledge.c @@ -0,0 +1,64 @@ +#include "hal.h"
+
+#if (HAL_USE_SDMMC == TRUE)
+
+#include "sama_sdmmc_lld.h"
+
+#include "ch_sdmmc_device.h"
+#include "ch_sdmmc_cmds.h"
+#include "ch_sdmmc_sdio.h"
+#include "ch_sdmmc_sd.h"
+#include "ch_sdmmc_mmc.h"
+
+#include "ch_sdmmc_reledge.h"
+
+eSDMMC_RC sd_mmc_test_unit_ready( SdmmcDriver *sdmmcp)
+{
+
+ uint32_t rc;
+
+ if (sdmmc_is_busy(sdmmcp))
+ return SDMMC_BUSY;
+
+ rc = SD_GetStatus(sdmmcp);
+
+ if (rc != SDMMC_OK)
+ {
+ return rc;
+ }
+
+
+ if ( !(sdmmcp->card.bCardType == CARD_UNKNOWN) ) {
+ return SDMMC_OK;
+ }
+ // It is not a memory card
+ return SDMMC_ERR;
+
+}
+
+bool sd_mmc_is_write_protected(SdmmcDriver *sdmmcp)
+{
+ uint32_t rc;
+
+ rc = SD_GetWpStatus(sdmmcp);
+
+ return (rc == SDMMC_LOCKED);
+}
+
+
+
+eSDMMC_RC sd_mmc_read_capacity(SdmmcDriver *sdmmcp, uint32_t *nb_sector)
+{
+ // Return last sector address (-1)
+ *nb_sector = sdmmcp->card.dwNbBlocks - 1;
+
+ return sd_mmc_test_unit_ready(sdmmcp);
+}
+
+
+
+
+
+#endif
+
+
diff --git a/os/various/reledge_bindings/SAMA5D2x/ch_sdmmc_reledge.h b/os/various/reledge_bindings/SAMA5D2x/ch_sdmmc_reledge.h new file mode 100644 index 000000000..04ed471cf --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/ch_sdmmc_reledge.h @@ -0,0 +1,14 @@ +
+#ifndef CH_SDMMC_RELEDGE_H_
+#define CH_SDMMC_RELEDGE_H_
+
+
+
+
+extern eSDMMC_RC sd_mmc_test_unit_ready( SdmmcDriver *sdmmcp);
+extern bool sd_mmc_is_write_protected(SdmmcDriver *sdmmcp);
+extern eSDMMC_RC sd_mmc_read_capacity(SdmmcDriver *sdmmcp, uint32_t *nb_sector);
+
+
+
+#endif /* CH_SDMMC_RELEDGE_H_ */
diff --git a/os/various/reledge_bindings/SAMA5D2x/osassert.c b/os/various/reledge_bindings/SAMA5D2x/osassert.c new file mode 100644 index 000000000..c4cc20497 --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/osassert.c @@ -0,0 +1,62 @@ +/* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- + + Copyright (c) 2014-2017 Datalight, Inc. + All Rights Reserved Worldwide. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; use version 2 of the License. + + This program is distributed in the hope that it will be useful, + but "AS-IS," WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +/* Businesses and individuals that for commercial or other reasons cannot + comply with the terms of the GPLv2 license may obtain a commercial license + before incorporating Reliance Edge into proprietary software for + distribution in any form. Visit http://www.datalight.com/reliance-edge for + more information. +*/ +/** @file + @brief Implements assertion handling. +*/ +#include "hal.h" +#if (HAL_USE_SDMMC == TRUE) +#include "sama_sdmmc_lld.h" +#if SDMMC_USE_RELEDGE_LIB == 1 +#include <redfs.h> + +#if REDCONF_ASSERTS == 1 + +#include <redosdeviations.h> + + +/** @brief Invoke the native assertion handler. + + @param pszFileName Null-terminated string containing the name of the file + where the assertion fired. + @param ulLineNum Line number in @p pszFileName where the assertion + fired. +*/ +void RedOsAssertFail( + const char *pszFileName, + uint32_t ulLineNum) +{ + #if REDCONF_OUTPUT == 1 + IGNORE_ERRORS(PRINT_ASSERT(pszFileName, ulLineNum)); + #endif + + while(true) + { + } +} + +#endif + +#endif +#endif diff --git a/os/various/reledge_bindings/SAMA5D2x/osbdev.c b/os/various/reledge_bindings/SAMA5D2x/osbdev.c new file mode 100644 index 000000000..645201521 --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/osbdev.c @@ -0,0 +1,515 @@ +/* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- + + Copyright (c) 2014-2017 Datalight, Inc. + All Rights Reserved Worldwide. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; use version 2 of the License. + + This program is distributed in the hope that it will be useful, + but "AS-IS," WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +/* Businesses and individuals that for commercial or other reasons cannot + comply with the terms of the GPLv2 license may obtain a commercial license + before incorporating Reliance Edge into proprietary software for + distribution in any form. Visit http://www.datalight.com/reliance-edge for + more information. +*/ +/** @file + @brief Implements block device I/O. +*/ +#include "hal.h" + +#if (HAL_USE_SDMMC == TRUE) +#include "sama_sdmmc_lld.h" +#if SDMMC_USE_RELEDGE_LIB == 1 + +#include "sama_sdmmc_lld.h" +#include "ch_sdmmc_device.h" +#include "ch_sdmmc_cmds.h" +#include "ch_sdmmc_sdio.h" +#include "ch_sdmmc_sd.h" +#include "ch_sdmmc_mmc.h" +#include "ch_sdmmc_reledge.h" + +#include <redfs.h> +#include <redvolume.h> +#include <redosdeviations.h> + +#if REDCONF_API_POSIX == 0 +#error "REDCONF_API_POSIX should be 1" +#endif + +#if REDCONF_API_FSE == 1 +#error "REDCONF_API_FSE not supported, should be 0" +#endif + + +/* sd_mmc_mem_2_ram_multi() and sd_mmc_ram_2_mem_multi() use an unsigned + 16-bit value to specify the sector count, so no transfer can be larger + than UINT16_MAX sectors. +*/ +#define MAX_SECTOR_TRANSFER UINT16_MAX + + +/** @brief Initialize a disk. + + @param bVolNum The volume number of the volume whose block device is being + initialized. + @param mode The open mode, indicating the type of access required. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. + @retval -RED_EIO A disk I/O error occurred. + @retval -RED_EROFS The device is read-only media and write access was + requested. +*/ +static REDSTATUS DiskOpen( + uint8_t bVolNum, + BDEVOPENMODE mode) +{ + REDSTATUS ret = 0; + uint32_t ulTries; + + + eSDMMC_RC cs; + + SdmmcDriver *sdmmcp = NULL; + + + if (!sdmmcGetInstance(bVolNum, &sdmmcp)) + return RED_EINVAL; + + /* Note: Assuming the volume number is the same as the SD card slot. The + ASF SD/MMC driver supports two SD slots. This implementation will need + to be modified if multiple volumes share a single SD card. + */ + + /* The first time the disk is opened, the SD card can take a while to get + ready, in which time sd_mmc_test_unit_ready() returns either CTRL_BUSY + or CTRL_NO_PRESENT. Try numerous times, waiting half a second after + each failure. Empirically, this has been observed to succeed on the + second try, so trying 10x more than that provides a margin of error. + */ + for(ulTries = 0U; ulTries < 20U; ulTries++) + { + cs = sd_mmc_test_unit_ready(sdmmcp); + + if((cs != SDMMC_OK) && (cs != SDMMC_BUSY)) + { + break; + } + + // t_msleep(sdmmcp,500); + } + + if(cs == SDMMC_OK) + { + #if REDCONF_READ_ONLY == 0 + if(mode != BDEV_O_RDONLY) + { + if(sd_mmc_is_write_protected(sdmmcp)) + { + ret = -RED_EROFS; + } + } + + if(ret == 0) + #endif + { + uint32_t ulSectorLast; + + IGNORE_ERRORS(sd_mmc_read_capacity(sdmmcp, &ulSectorLast)); + + /* The ASF SD/MMC driver only supports 512-byte sectors. + */ + if( (gaRedVolConf[bVolNum].ulSectorSize != 512U) + || (((uint64_t)ulSectorLast + 1U) < gaRedVolConf[bVolNum].ullSectorCount)) + { + ret = -RED_EINVAL; + } + } + } + else + { + ret = -RED_EIO; + } + + return ret; +} + + +/** @brief Uninitialize a disk. + + @param bVolNum The volume number of the volume whose block device is being + uninitialized. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. +*/ +static REDSTATUS DiskClose( + uint8_t bVolNum) +{ + (void)bVolNum; + return 0; +} + + +/** @brief Read sectors from a disk. + + @param bVolNum The volume number of the volume whose block device + is being read from. + @param ullSectorStart The starting sector number. + @param ulSectorCount The number of sectors to read. + @param pBuffer The buffer into which to read the sector data. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. +*/ +static REDSTATUS DiskRead( + uint8_t bVolNum, + uint64_t ullSectorStart, + uint32_t ulSectorCount, + void *pBuffer) +{ + REDSTATUS ret = 0; + uint8_t *pbBuffer = CAST_VOID_PTR_TO_UINT8_PTR(pBuffer); + + SdmmcDriver *sdmmcp = NULL; + eSDMMC_RC cs; + + if (!sdmmcGetInstance(bVolNum, &sdmmcp)) + return RED_EINVAL; + + cs = SD_ReadBlocks(sdmmcp, ullSectorStart, pbBuffer,ulSectorCount); + + if(cs != SDMMC_OK) + { + ret = -RED_EIO; + } + + + return ret; +} + + +#if REDCONF_READ_ONLY == 0 + +/** @brief Write sectors to a disk. + + @param bVolNum The volume number of the volume whose block device + is being written to. + @param ullSectorStart The starting sector number. + @param ulSectorCount The number of sectors to write. + @param pBuffer The buffer from which to write the sector data. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. +*/ +static REDSTATUS DiskWrite( + uint8_t bVolNum, + uint64_t ullSectorStart, + uint32_t ulSectorCount, + const void *pBuffer) +{ + REDSTATUS ret = 0; + const uint8_t *pbBuffer = CAST_VOID_PTR_TO_CONST_UINT8_PTR(pBuffer); + + SdmmcDriver *sdmmcp = NULL; + eSDMMC_RC cs; + + if (!sdmmcGetInstance(bVolNum, &sdmmcp)) + return RED_EINVAL; + + + cs = SD_WriteBlocks(sdmmcp, ullSectorStart, pbBuffer, ulSectorCount); + if(cs != SDMMC_OK) + { + ret = -RED_EIO; + } + + + return ret; +} + + +/** @brief Flush any caches beneath the file system. + + @param bVolNum The volume number of the volume whose block device is being + flushed. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. +*/ +static REDSTATUS DiskFlush( + uint8_t bVolNum) +{ + REDSTATUS ret; + + eSDMMC_RC cs; + + SdmmcDriver *sdmmcp = NULL; + + + if (!sdmmcGetInstance(bVolNum, &sdmmcp)) + return RED_EINVAL; + + /* The ASF SD/MMC driver appears to write sectors synchronously, so it + should be fine to do nothing and return success. However, Atmel's + implementation of the FatFs diskio.c file does the equivalent of the + below when the disk is flushed. Just in case this is important for some + non-obvious reason, do the same. + */ + cs = sd_mmc_test_unit_ready(sdmmcp); + if(cs == SDMMC_OK) + { + ret = 0; + } + else + { + ret = -RED_EIO; + } + + return ret; +} + + +#if REDCONF_DISCARDS == 1 +/** @brief Discard sectors on a disk. + + @param bVolNum The volume number of the volume whose block device + is being accessed. + @param ullSectorStart The starting sector number. + @param ullSectorCount The number of sectors to discard. +*/ +static void DiskDiscard( + uint8_t bVolNum, + uint64_t ullSectorStart, + uint64_t ullSectorCount) +{ +#error "this SD/MMC driver does not support discards." +} +#endif /* REDCONF_DISCARDS == 1 */ + +#endif /* REDCONF_READ_ONLY == 0 */ + +/** @brief Initialize a block device. + + This function is called when the file system needs access to a block + device. + + Upon successful return, the block device should be fully initialized and + ready to service read/write/flush/close requests. + + The behavior of calling this function on a block device which is already + open is undefined. + + @param bVolNum The volume number of the volume whose block device is being + initialized. + @param mode The open mode, indicating the type of access required. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. + @retval -RED_EINVAL @p bVolNum is an invalid volume number. + @retval -RED_EIO A disk I/O error occurred. +*/ +REDSTATUS RedOsBDevOpen( + uint8_t bVolNum, + BDEVOPENMODE mode) +{ + REDSTATUS ret; + + if(bVolNum >= REDCONF_VOLUME_COUNT) + { + ret = -RED_EINVAL; + } + else + { + ret = DiskOpen(bVolNum, mode); + } + + return ret; +} + + +/** @brief Uninitialize a block device. + + This function is called when the file system no longer needs access to a + block device. If any resource were allocated by RedOsBDevOpen() to service + block device requests, they should be freed at this time. + + Upon successful return, the block device must be in such a state that it + can be opened again. + + The behavior of calling this function on a block device which is already + closed is undefined. + + @param bVolNum The volume number of the volume whose block device is being + uninitialized. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. + @retval -RED_EINVAL @p bVolNum is an invalid volume number. +*/ +REDSTATUS RedOsBDevClose( + uint8_t bVolNum) +{ + REDSTATUS ret; + + if(bVolNum >= REDCONF_VOLUME_COUNT) + { + ret = -RED_EINVAL; + } + else + { + ret = DiskClose(bVolNum); + } + + return ret; +} + + +/** @brief Read sectors from a physical block device. + + The behavior of calling this function is undefined if the block device is + closed or if it was opened with ::BDEV_O_WRONLY. + + @param bVolNum The volume number of the volume whose block device + is being read from. + @param ullSectorStart The starting sector number. + @param ulSectorCount The number of sectors to read. + @param pBuffer The buffer into which to read the sector data. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. + @retval -RED_EINVAL @p bVolNum is an invalid volume number, @p pBuffer is + `NULL`, or @p ullStartSector and/or @p ulSectorCount + refer to an invalid range of sectors. + @retval -RED_EIO A disk I/O error occurred. +*/ +REDSTATUS RedOsBDevRead( + uint8_t bVolNum, + uint64_t ullSectorStart, + uint32_t ulSectorCount, + void *pBuffer) +{ + REDSTATUS ret = 0; + + if( (bVolNum >= REDCONF_VOLUME_COUNT) + || (ullSectorStart >= gaRedVolConf[bVolNum].ullSectorCount) + || ((gaRedVolConf[bVolNum].ullSectorCount - ullSectorStart) < ulSectorCount) + || (pBuffer == NULL)) + { + ret = -RED_EINVAL; + } + else + { + ret = DiskRead(bVolNum, ullSectorStart, ulSectorCount, pBuffer); + } + + return ret; +} + + +#if REDCONF_READ_ONLY == 0 + +/** @brief Write sectors to a physical block device. + + The behavior of calling this function is undefined if the block device is + closed or if it was opened with ::BDEV_O_RDONLY. + + @param bVolNum The volume number of the volume whose block device + is being written to. + @param ullSectorStart The starting sector number. + @param ulSectorCount The number of sectors to write. + @param pBuffer The buffer from which to write the sector data. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. + @retval -RED_EINVAL @p bVolNum is an invalid volume number, @p pBuffer is + `NULL`, or @p ullStartSector and/or @p ulSectorCount + refer to an invalid range of sectors. + @retval -RED_EIO A disk I/O error occurred. +*/ +REDSTATUS RedOsBDevWrite( + uint8_t bVolNum, + uint64_t ullSectorStart, + uint32_t ulSectorCount, + const void *pBuffer) +{ + REDSTATUS ret = 0; + + if( (bVolNum >= REDCONF_VOLUME_COUNT) + || (ullSectorStart >= gaRedVolConf[bVolNum].ullSectorCount) + || ((gaRedVolConf[bVolNum].ullSectorCount - ullSectorStart) < ulSectorCount) + || (pBuffer == NULL)) + { + ret = -RED_EINVAL; + } + else + { + ret = DiskWrite(bVolNum, ullSectorStart, ulSectorCount, pBuffer); + } + + return ret; +} + + +/** @brief Flush any caches beneath the file system. + + This function must synchronously flush all software and hardware caches + beneath the file system, ensuring that all sectors written previously are + committed to permanent storage. + + If the environment has no caching beneath the file system, the + implementation of this function can do nothing and return success. + + The behavior of calling this function is undefined if the block device is + closed or if it was opened with ::BDEV_O_RDONLY. + + @param bVolNum The volume number of the volume whose block device is being + flushed. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. + @retval -RED_EINVAL @p bVolNum is an invalid volume number. + @retval -RED_EIO A disk I/O error occurred. +*/ +REDSTATUS RedOsBDevFlush( + uint8_t bVolNum) +{ + REDSTATUS ret; + + if(bVolNum >= REDCONF_VOLUME_COUNT) + { + ret = -RED_EINVAL; + } + else + { + ret = DiskFlush(bVolNum); + } + + return ret; +} + +#endif /* REDCONF_READ_ONLY == 0 */ +#endif + +#endif diff --git a/os/various/reledge_bindings/SAMA5D2x/osclock.c b/os/various/reledge_bindings/SAMA5D2x/osclock.c new file mode 100644 index 000000000..e140e6e28 --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/osclock.c @@ -0,0 +1,85 @@ +/* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- + + Copyright (c) 2014-2017 Datalight, Inc. + All Rights Reserved Worldwide. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; use version 2 of the License. + + This program is distributed in the hope that it will be useful, + but "AS-IS," WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +/* Businesses and individuals that for commercial or other reasons cannot + comply with the terms of the GPLv2 license may obtain a commercial license + before incorporating Reliance Edge into proprietary software for + distribution in any form. Visit http://www.datalight.com/reliance-edge for + more information. +*/ +/** @file + @brief Implements real-time clock functions. +*/ +#include "hal.h" +#if (HAL_USE_SDMMC == TRUE) +#include "sama_sdmmc_lld.h" +#if SDMMC_USE_RELEDGE_LIB == 1 +#include <redfs.h> + + +/** @brief Initialize the real time clock. + + The behavior of calling this function when the RTC is already initialized + is undefined. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. +*/ +REDSTATUS RedOsClockInit(void) +{ + return 0; +} + + +/** @brief Uninitialize the real time clock. + + The behavior of calling this function when the RTC is not initialized is + undefined. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. +*/ +REDSTATUS RedOsClockUninit(void) +{ + return 0; +} + + +/** @brief Get the date/time. + + The behavior of calling this function when the RTC is not initialized is + undefined. + + @return The number of seconds since January 1, 1970 excluding leap seconds + (in other words, standard Unix time). If the resolution or epoch + of the RTC is different than this, the implementation must convert + it to the expected representation. +*/ +uint32_t RedOsClockGetTime(void) +{ + /* FreeRTOS does not provide an RTC abstraction since most of the systems + it targets have no RTC hardware. If your hardware includes an RTC that + you would like to use, this function must be customized. + */ + return 0; +} +#endif +#endif + diff --git a/os/various/reledge_bindings/SAMA5D2x/osmutex.c b/os/various/reledge_bindings/SAMA5D2x/osmutex.c new file mode 100644 index 000000000..b921a8aa9 --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/osmutex.c @@ -0,0 +1,108 @@ +/* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- + + Copyright (c) 2014-2017 Datalight, Inc. + All Rights Reserved Worldwide. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; use version 2 of the License. + + This program is distributed in the hope that it will be useful, + but "AS-IS," WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +/* Businesses and individuals that for commercial or other reasons cannot + comply with the terms of the GPLv2 license may obtain a commercial license + before incorporating Reliance Edge into proprietary software for + distribution in any form. Visit http://www.datalight.com/reliance-edge for + more information. +*/ +/** @file + @brief Implements a synchronization object to provide mutual exclusion. +*/ +#include "ch.h" +#include "hal.h" +#if (HAL_USE_SDMMC == TRUE) +#include "sama_sdmmc_lld.h" +#if SDMMC_USE_RELEDGE_LIB == 1 +#include <redfs.h> +#include <redosdeviations.h> + +#if REDCONF_TASK_COUNT > 1U + + +static semaphore_t red_sem; + + +/** @brief Initialize the mutex. + + After initialization, the mutex is in the released state. + + The behavior of calling this function when the mutex is still initialized + is undefined. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. +*/ +REDSTATUS RedOsMutexInit(void) +{ + chSemObjectInit(&red_sem, 1); + + return 0; +} + + +/** @brief Uninitialize the mutex. + + The behavior of calling this function when the mutex is not initialized is + undefined; likewise, the behavior of uninitializing the mutex when it is + in the acquired state is undefined. + + @return A negated ::REDSTATUS code indicating the operation result. + + @retval 0 Operation was successful. +*/ +REDSTATUS RedOsMutexUninit(void) +{ + chSemReset(&red_sem, 0); + + return 0; +} + + +/** @brief Acquire the mutex. + + The behavior of calling this function when the mutex is not initialized is + undefined; likewise, the behavior of recursively acquiring the mutex is + undefined. +*/ +void RedOsMutexAcquire(void) +{ + chSemWaitTimeout(&red_sem, TIME_INFINITE); +} + + +/** @brief Release the mutex. + + The behavior is undefined in the following cases: + + - Releasing the mutex when the mutex is not initialized. + - Releasing the mutex when it is not in the acquired state. + - Releasing the mutex from a task or thread other than the one which + acquired the mutex. +*/ +void RedOsMutexRelease(void) +{ + chSemSignal(&red_sem); +} + +#endif +#endif +#endif + diff --git a/os/various/reledge_bindings/SAMA5D2x/osoutput.c b/os/various/reledge_bindings/SAMA5D2x/osoutput.c new file mode 100644 index 000000000..bff230522 --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/osoutput.c @@ -0,0 +1,76 @@ +/* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- + + Copyright (c) 2014-2017 Datalight, Inc. + All Rights Reserved Worldwide. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; use version 2 of the License. + + This program is distributed in the hope that it will be useful, + but "AS-IS," WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +/* Businesses and individuals that for commercial or other reasons cannot + comply with the terms of the GPLv2 license may obtain a commercial license + before incorporating Reliance Edge into proprietary software for + distribution in any form. Visit http://www.datalight.com/reliance-edge for + more information. +*/ +/** @file + @brief Implements outputting a character string. +*/ +#include "hal.h" +#if (HAL_USE_SDMMC == TRUE) +#include "sama_sdmmc_lld.h" +#if SDMMC_USE_RELEDGE_LIB == 1 +#include <redfs.h> + +#if REDCONF_OUTPUT == 1 + +#include <redosdeviations.h> + + +/** @brief Write a string to a user-visible output location. + + Write a null-terminated string to the serial port, console, terminal, or + other display device, such that the text is visible to the user. + + @param pszString A null-terminated string. +*/ +void RedOsOutputString( + const char *pszString) +{ + if(pszString == NULL) + { + REDERROR(); + } + else + { + uint32_t ulIdx = 0U; + + while(pszString[ulIdx] != '\0') + { + OUTPUT_CHARACTER(pszString[ulIdx]); + + /* Serial output often requires a \r to print newlines correctly. + */ + if(pszString[ulIdx] == '\n') + { + OUTPUT_CHARACTER('\r'); + } + + ulIdx++; + } + } +} + +#endif + +#endif +#endif diff --git a/os/various/reledge_bindings/SAMA5D2x/ostask.c b/os/various/reledge_bindings/SAMA5D2x/ostask.c new file mode 100644 index 000000000..f06f00f22 --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/ostask.c @@ -0,0 +1,68 @@ +/* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- + + Copyright (c) 2014-2017 Datalight, Inc. + All Rights Reserved Worldwide. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; use version 2 of the License. + + This program is distributed in the hope that it will be useful, + but "AS-IS," WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +/* Businesses and individuals that for commercial or other reasons cannot + comply with the terms of the GPLv2 license may obtain a commercial license + before incorporating Reliance Edge into proprietary software for + distribution in any form. Visit http://www.datalight.com/reliance-edge for + more information. +*/ +/** @file + @brief Implements task functions. +*/ +#include "ch.h" +#include "hal.h" +#if (HAL_USE_SDMMC == TRUE) +#include "sama_sdmmc_lld.h" +#if SDMMC_USE_RELEDGE_LIB == 1 +#include <redfs.h> + +#if (REDCONF_TASK_COUNT > 1U) && (REDCONF_API_POSIX == 1) + +#include <redosdeviations.h> + + +/** @brief Get the current task ID. + + This task ID must be unique for all tasks using the file system. + + @return The task ID. Must not be 0. +*/ +uint32_t RedOsTaskId(void) +{ + /* Simply casting the xTaskGetCurrentTaskHandle() return value results in + warnings from some compilers, so use variables. + */ + thread_t* t= chThdGetSelfX(); + uintptr_t taskptr = CAST_TASK_PTR_TO_UINTPTR(t); + uint32_t ulTaskPtr = (uint32_t)taskptr; + + /* Assert no information was lost casting from uintptr_t to uint32_t. + */ + REDASSERT(ulTaskPtr == taskptr); + + /* NULL is a valid task handle in FreeRTOS, so add one to all task IDs. + */ + REDASSERT((ulTaskPtr + 1U) != 0U); + return ulTaskPtr + 1U; +} + +#endif + +#endif +#endif diff --git a/os/various/reledge_bindings/readme.txt b/os/various/reledge_bindings/SAMA5D2x/readme.txt index 4489695c1..9cd07d397 100644 --- a/os/various/reledge_bindings/readme.txt +++ b/os/various/reledge_bindings/SAMA5D2x/readme.txt @@ -2,8 +2,8 @@ This directory contains the ChibiOS/RT "official" bindings with the RelianceEdge library by Datalight : https://github.com/datalightinc/reliance-edge
In order to use Reliance Edge within ChibiOS/RT project:
-1. unzip Reliance Edge under reliance-edge
-2. include $(CHIBIOS)/os/various/reledge_bindings/reledge.mk in your makefile.
+1. unzip Reliance Edge under $(CHIBIOS)/ext/reliance-edge
+2. include $(CHIBIOS)/os/various/reledge_bindings/SAMA5D2x/reledge.mk in your makefile.
3. Add $(RELEDGESRC) to $(CSRC)
4. Add $(RELEDGEINC) to $(INCDIR)
diff --git a/os/various/reledge_bindings/SAMA5D2x/redosdeviations.h b/os/various/reledge_bindings/SAMA5D2x/redosdeviations.h new file mode 100644 index 000000000..b00fc4184 --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/redosdeviations.h @@ -0,0 +1,245 @@ +/* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- + + Copyright (c) 2014-2017 Datalight, Inc. + All Rights Reserved Worldwide. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; use version 2 of the License. + + This program is distributed in the hope that it will be useful, + but "AS-IS," WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +/* Businesses and individuals that for commercial or other reasons cannot + comply with the terms of the GPLv2 license may obtain a commercial license + before incorporating Reliance Edge into proprietary software for + distribution in any form. Visit http://www.datalight.com/reliance-edge for + more information. +*/ +/** @file + @brief Macros to encapsulate MISRA C:2012 deviations in OS-specific code. +*/ +#ifndef REDOSDEVIATIONS_H +#define REDOSDEVIATIONS_H + + +#if REDCONF_OUTPUT == 1 +/* Needed for PRINT_ASSERT() and OUTPUT_CHARACTER(). +*/ +#include <stdio.h> +#endif + + +#if (REDCONF_ASSERTS == 1) && (REDCONF_OUTPUT == 1) +/** @brief Print a formatted message for an assertion. + + Usages of this macro deviate from MISRA C:2012 Rule 21.6 (required). Using + printf() is the most convenient way to output this information; and the risk + of "unspecified, undefined and implementation-defined" behavior causing + problems (as cited in the rationale for the rule) is small. The driver does + not depend on this string being outputted correctly. Furthermore, use of + printf() disappears when either asserts or output are disabled. + + As Rule 21.6 is required, a separate deviation record is required. +*/ +#define PRINT_ASSERT(file, line) \ + printf("Assertion failed in \"%s\" at line %u\n\r", ((file) == NULL) ? "" : (file), (unsigned)(line)) +#endif + + +/** @brief Cast a value to unsigned long. + + Usages of this macro deviate from MISRA C:2012 Directive 4.6. This macro is + used in two places to cast a uint64_t value (used by the block device + abstraction for sector numbers) to unsigned long, since third-party code + which is not under the control of this project uses unsigned long for sector + numbers. The cast is guaranteed to not lose any information, since when the + disk is opened the sector count is verified to be less than or equal to an + unsigned long value. The text of the directive mentions that "it might be + desirable not to apply this guideline when interfacing with ... code outside + the project's control", which describes the situation for this deviation. + + As Directive 4.6 is advisory, a deviation record is not required. This + notice is the only record of the deviation. +*/ +#define CAST_ULONG(ull) ((unsigned long)(ull)) + + +/** @brief Cast a const-qualified pointer to a pointer which is *not* + const-qualified. + + Usages of this macro deviate from MISRA C:2012 Rule 11.8. This macro is + used in exactly one place in order to cope with a poorly designed + third-party interface. Reliance Edge, at every level of the stack, uses + const-qualified pointers for buffers used in write operations, since the + data is read from the buffer, and the buffer does not need to be modified + (consistent with Rule 8.13). One of the third-party block device interfaces + that Reliance Edge interfaces with does not follow this convention: it uses + an unqualified pointer for the buffer parameter of its sector write + function. This forces the need for the cast to avoid warnings. The + implementation of the sector write function is provided by the user, so it + is to be hoped that the buffer is not actually modified. + + As Rule 11.8 is required, a separate deviation record is required. +*/ +#define CAST_AWAY_CONST(type, ptr) ((type *)(ptr)) + + +/** @brief Allocate zero-initialized (cleared) memory. + + All usages of this macro deviate from MISRA C:2012 Directive 4.12 (required) + and Rule 21.3 (required). In the context of the single place it is actually + used, this macro also deviates from Rule 22.1 (required). + + This macro is used in the FreeRTOS block device code in order to allocate a + RAM disk, when that implementation of the block device is selected. The + primary rationale for all these deviations is that a) the RAM disk cannot be + allocated statically (since the volume information is stored in a + structure), and b) the RAM disk is primarily intended as a temporary testing + tool for users who want to try out Reliance Edge before the real storage + media is available. In most real systems, Reliance Edge is used with + non-volatile storage like SD/MMC or eMMC, not with RAM disks. + + Rule 22.1 states that all resources which are allocated must also be + explicitly freed. The RAM disk is allocated and never freed, deviating from + that rule. This is done because the data in the RAM disk is emulating a + non-volatile storage medium, and thus needs to persist even after the block + device is closed, to allow the file system to be ormatted and then mounted, + or unmounted and remounted in the course of a test. Thus the memory will + remain allocated until the target device is rebooted. This is assumed to be + acceptable for the primary purpose of the RAM disk, which is preliminary + testing. + + As Directive 4.12, Rule 21.3, and Rule 22.1 are all required, separate + deviation records are required. +*/ +#define ALLOCATE_CLEARED_MEMORY(nelem, elsize) calloc(nelem, elsize) + + +#if REDCONF_OUTPUT == 1 +/** @brief Output a character to a serial port or other display device. + + Usages of this macro deviate from MISRA C:2012 Rule 21.6 (required). + FreeRTOS does not include a standard method of printing characters, so + putchar() is the most convenient and portable way to accomplish the task. + The risk of "unspecified, undefined and implementation-defined" behavior + causing problems (as cited in the rationale for the rule) is small. The + driver does not depend on the character being outputted correctly. + Furthermore, use of putchar() disappears when output is disabled. + + As Rule 21.6 is required, a separate deviation record is required. +*/ +#define OUTPUT_CHARACTER(ch) (void)putchar(ch) +#endif + + +#if (REDCONF_TASK_COUNT > 1U) && (REDCONF_API_POSIX == 1) +/** @brief Cast a TaskHandle_t (a pointer type) to uintptr_t. + + Usage of this macro deivate from MISRA-C:2012 Rule 11.4 (advisory). This + macro is used for the FreeRTOS version of RedOsTaskId(). Some RTOSes + natively use an integer for task IDs; others use pointers. RedOsTaskId() + uses integers, FreeRTOS uses pointers; to reconcile this difference, the + pointer must be cast to integer. This is fairly safe, since the resulting + integer is never cast back to a pointer; and although the integer + representation of a pointer is implementation-defined, the representation is + irrelevant provided that unique pointers are converted to unique integers. + + As Rule 11.4 is advisory, a deviation record is not required. This notice + is the only record of the deviation. +*/ +#define CAST_TASK_PTR_TO_UINTPTR(taskptr) ((uintptr_t)(taskptr)) +#endif + + +/** @brief Ignore the return value of a function (cast to void) + + Usages of this macro deviate from MISRA C:2012 Directive 4.7, which states + that error information must be checked immediately after a function returns + potential error information. + + If asserts and output are enabled, then this macro is used to document that + the return value of printf() is ignored. A failure of printf() does not + impact the filesystem core, nor is there anything the filesystem can do to + respond to such an error (especially since it occurs within an assert). + Thus, the most reasonable action is to ignore the error. + + In the STM32 SDIO block device implementation, errors are also ignored in an + IRQ interrupt handler. This is the most reasonable action to take for two + reasons: (a) it would be dangerous to spend processor time responding to the + error inside the IRQ handler; (b) it has been verified that the same error + is propegated to the DiskRead/Write method, which does return the error to + the core. + + In the Atmel SD/MMC block device implementation, error information from + sd_mmc_read_capacity() is ignored. This is a reasonable action because all + of the possible error conditions were eliminated by a previous check. + sd_mmc_read_capacity() fails under the same conditions as + sd_mmc_test_unit_ready(), which was checked ealier in the same function. + + In the mutex module, error information returned from the mutex release + function is ignored when asserts are disabled. This is a reasonable action + because the mutex release function (xSemaphoreGive) is documented only to + fail if the mutex was not obtained correctly, which can be demonstrably + avoided. + + As Directive 4.7 is required, a separate deviation record is required. +*/ +#define IGNORE_ERRORS(fn) ((void) (fn)) + + +/** @brief Determine whether a pointer is aligned on a 32-bit boundary. + + This is used to determine whether a data buffer meets the requirements of + the underlying block device implementation. When transferring data via + DMA (Direct Memory Access) on an STM32 device, the data buffer must be cast + as a uint32 pointer, and unexpected behavior may occur if the buffer is not + aligned correctly. + + There is no way to perform this check without deviating from MISRA C rules + against casting pointers to integer types. Usage of this macro deviates + from MISRA C:2012 Rule 11.4 (advisory). The main rationale the rule cites + against converting pointers to integers is that the chosen integer type may + not be able to represent the pointer; this is a non-issue here since we use + uintptr_t. The text says the rule still applies when using uintptr_t due to + concern about unaligned pointers, but that is not an issue here since the + integer value of the pointer is not saved and not converted back into a + pointer and dereferenced. The result of casting a pointer to a sufficiently + large integer is implementation-defined, but macros similar to this one have + been used by Datalight for a long time in a wide variety of environments and + they have always worked as expected. + + This deviation only occurs when using the STM32 SDIO block device + implementation. + + As Rule 11.4 is advisory, a deviation record is not required. This notice + is the only record of deviation. +*/ +#define IS_UINT32_ALIGNED_PTR(ptr) (((uintptr_t)(ptr) & (sizeof(uint32_t) - 1U)) == 0U) + + +/** @brief Cast a 32-bit aligned void pointer to a uint32 pointer. + + Usages of this macro deviate from MISRA C:2012 Rule 11.5 (advisory). A + cast from a void pointer to an object pointer is discouraged because of + potential alignment issues. However, this macro is only used to cast + pointers that have already been tested to be 32-bit aligned, so the + operation will be safe. + + This deviation only occurs when using the STM32 SDIO block device + implementation. + + As rule 11.5 is advisory, a deviation record is not required. This notice + is the only record of the deviation. +*/ +#define CAST_UINT32_PTR(ptr) ((uint32_t *) (ptr)) + + +#endif + diff --git a/os/various/reledge_bindings/SAMA5D2x/redostypes.h b/os/various/reledge_bindings/SAMA5D2x/redostypes.h new file mode 100644 index 000000000..687b2d167 --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/redostypes.h @@ -0,0 +1,42 @@ +/* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- + + Copyright (c) 2014-2017 Datalight, Inc. + All Rights Reserved Worldwide. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; use version 2 of the License. + + This program is distributed in the hope that it will be useful, + but "AS-IS," WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +/* Businesses and individuals that for commercial or other reasons cannot + comply with the terms of the GPLv2 license may obtain a commercial license + before incorporating Reliance Edge into proprietary software for + distribution in any form. Visit http://www.datalight.com/reliance-edge for + more information. +*/ +/** @file + @brief Defines OS-specific types for use in common code. +*/ +#ifndef REDOSTYPES_H +#define REDOSTYPES_H + + +/** @brief Implementation-defined timestamp type. + + This can be an integer, a structure, or a pointer: anything that is + convenient for the implementation. Since the underlying type is not fixed, + common code should treat this as an opaque type. +*/ +typedef uint32_t REDTIMESTAMP; + + +#endif + diff --git a/os/various/reledge_bindings/SAMA5D2x/redtypes.h b/os/various/reledge_bindings/SAMA5D2x/redtypes.h new file mode 100644 index 000000000..bb5606eef --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/redtypes.h @@ -0,0 +1,98 @@ +/* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- + + Copyright (c) 2014-2017 Datalight, Inc. + All Rights Reserved Worldwide. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; use version 2 of the License. + + This program is distributed in the hope that it will be useful, + but "AS-IS," WITHOUT ANY WARRANTY; without even the implied warranty + of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +/* Businesses and individuals that for commercial or other reasons cannot + comply with the terms of the GPLv2 license may obtain a commercial license + before incorporating Reliance Edge into proprietary software for + distribution in any form. Visit http://www.datalight.com/reliance-edge for + more information. +*/ +/** @file + @brief Defines basic types used by Reliance Edge. + + The following types *must* be defined by this header, either directly (using + typedef) or indirectly (by including other headers, such as the C99 headers + stdint.h and stdbool.h): + + - bool: Boolean type, capable of storing true (1) or false (0) + - uint8_t: Unsigned 8-bit integer + - int8_t: Signed 8-bit integer + - uint16_t: Unsigned 16-bit integer + - int16_t: Signed 16-bit integer + - uint32_t: Unsigned 32-bit integer + - int32_t: Signed 32-bit integer + - uint64_t: Unsigned 64-bit integer + - int64_t: Signed 64-bit integer + - uintptr_t: Unsigned integer capable of storing a pointer, preferably the + same size as pointers themselves. + + These types deliberately use the same names as the standard C99 types, so + that if the C99 headers stdint.h and stdbool.h are available, they may be + included here. + + If the user application defines similar types, those may be reused. For + example, suppose there is an application header apptypes.h which defines + types with a similar purpose but different names. That header could be + reused to define the types Reliance Edge needs: + + ~~~{.c} + #include <apptypes.h> + + typedef BOOL bool; + typedef BYTE uint8_t; + typedef INT8 int8_t; + // And so on... + ~~~ + + If there are neither C99 headers nor suitable types in application headers, + this header should be populated with typedefs that define the required types + in terms of the standard C types. This requires knowledge of the size of + the C types on the target hardware (e.g., how big is an "int" or a pointer). + Below is an example which assumes the target has 8-bit chars, 16-bit shorts, + 32-bit ints, 32-bit pointers, and 64-bit long longs: + + ~~~{.c} + typedef int bool; + typedef unsigned char uint8_t; + typedef signed char int8_t; + typedef unsigned short uint16_t; + typedef short int16_t; + typedef unsigned int uint32_t; + typedef int int32_t; + typedef unsigned long long uint64_t; + typedef long long int64_t; + typedef uint32_t uintptr_t; + ~~~ +*/ +#ifndef REDTYPES_H +#define REDTYPES_H + +#include "hal.h" + +/* Defines bool. +*/ +//#include <stdbool.h> + +/* Defines uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, + int64_t, and uintptr_t. +*/ +//#include <stdint.h> + + +#endif + diff --git a/os/various/reledge_bindings/SAMA5D2x/reledge.mk b/os/various/reledge_bindings/SAMA5D2x/reledge.mk new file mode 100644 index 000000000..d014120cb --- /dev/null +++ b/os/various/reledge_bindings/SAMA5D2x/reledge.mk @@ -0,0 +1,41 @@ +# RELIANCE EDGE files.
+
+RELEDGESRC= \
+ $(CHIBIOS)/ext/reliance-edge/core/driver/blockio.c \
+ $(CHIBIOS)/ext/reliance-edge/core/driver/buffer.c \
+ $(CHIBIOS)/ext/reliance-edge/core/driver/core.c \
+ $(CHIBIOS)/ext/reliance-edge/core/driver/dir.c \
+ $(CHIBIOS)/ext/reliance-edge/core/driver/format.c \
+ $(CHIBIOS)/ext/reliance-edge/core/driver/imap.c \
+ $(CHIBIOS)/ext/reliance-edge/core/driver/imapextern.c \
+ $(CHIBIOS)/ext/reliance-edge/core/driver/imapinline.c \
+ $(CHIBIOS)/ext/reliance-edge/core/driver/inode.c \
+ $(CHIBIOS)/ext/reliance-edge/core/driver/inodedata.c \
+ $(CHIBIOS)/ext/reliance-edge/core/driver/volume.c \
+ $(CHIBIOS)/ext/reliance-edge/fse/fse.c \
+ $(CHIBIOS)/ext/reliance-edge/posix/path.c \
+ $(CHIBIOS)/ext/reliance-edge/posix/posix.c \
+ $(CHIBIOS)/ext/reliance-edge/util/bitmap.c \
+ $(CHIBIOS)/ext/reliance-edge/util/crc.c \
+ $(CHIBIOS)/ext/reliance-edge/util/memory.c \
+ $(CHIBIOS)/ext/reliance-edge/util/namelen.c \
+ $(CHIBIOS)/ext/reliance-edge/util/sign.c \
+ $(CHIBIOS)/ext/reliance-edge/util/string.c
+
+RELEDGEINC = $(CHIBIOS)/ext/reliance-edge/include \
+ $(CHIBIOS)/ext/reliance-edge/core/include
+
+RELEDGEBINDINC = $(CHIBIOS)/os/various/reledge_bindings/SAMA5D2x
+
+RELEDGEBINDSRC = \
+ $(CHIBIOS)/os/various/reledge_bindings/SAMA5D2x/ch_sdmmc_reledge.c \
+ $(CHIBIOS)/os/various/reledge_bindings/SAMA5D2x/osassert.c \
+ $(CHIBIOS)/os/various/reledge_bindings/SAMA5D2x/osbdev.c \
+ $(CHIBIOS)/os/various/reledge_bindings/SAMA5D2x/osclock.c \
+ $(CHIBIOS)/os/various/reledge_bindings/SAMA5D2x/osmutex.c \
+ $(CHIBIOS)/os/various/reledge_bindings/SAMA5D2x/osoutput.c \
+ $(CHIBIOS)/os/various/reledge_bindings/SAMA5D2x/ostask.c
+
+# Shared variables
+ALLCSRC += $(RELEDGESRC) $(RELEDGEBINDSRC)
+ALLINC += $(RELEDGEINC) $(RELEDGEBINDINC)
\ No newline at end of file diff --git a/os/various/reledge_bindings/reledge.mk b/os/various/reledge_bindings/reledge.mk deleted file mode 100644 index c85b7f659..000000000 --- a/os/various/reledge_bindings/reledge.mk +++ /dev/null @@ -1,30 +0,0 @@ -# RELIANCE EDGE files.
-
-RELEDGESRC= \
- $(CHIBIOS)/ext/reliance-edge/core/driver/blockio.c \
- $(CHIBIOS)/ext/reliance-edge/core/driver/buffer.c \
- $(CHIBIOS)/ext/reliance-edge/core/driver/core.c \
- $(CHIBIOS)/ext/reliance-edge/core/driver/dir.c \
- $(CHIBIOS)/ext/reliance-edge/core/driver/format.c \
- $(CHIBIOS)/ext/reliance-edge/core/driver/imap.c \
- $(CHIBIOS)/ext/reliance-edge/core/driver/imapextern.c \
- $(CHIBIOS)/ext/reliance-edge/core/driver/imapinline.c \
- $(CHIBIOS)/ext/reliance-edge/core/driver/inode.c \
- $(CHIBIOS)/ext/reliance-edge/core/driver/inodedata.c \
- $(CHIBIOS)/ext/reliance-edge/core/driver/volume.c \
- $(CHIBIOS)/ext/reliance-edge/fse/fse.c \
- $(CHIBIOS)/ext/reliance-edge/posix/path.c \
- $(CHIBIOS)/ext/reliance-edge/posix/posix.c \
- $(CHIBIOS)/ext/reliance-edge/util/bitmap.c \
- $(CHIBIOS)/ext/reliance-edge/util/crc.c \
- $(CHIBIOS)/ext/reliance-edge/util/memory.c \
- $(CHIBIOS)/ext/reliance-edge/util/namelen.c \
- $(CHIBIOS)/ext/reliance-edge/util/sign.c \
- $(CHIBIOS)/ext/reliance-edge/util/string.c
-
-RELEDGEINC = $(CHIBIOS)/ext/reliance-edge/include \
- $(CHIBIOS)/ext/reliance-edge/core/include
-
-# Shared variables
-ALLCSRC += $(RELEDGESRC)
-ALLINC += $(RELEDGEINC)
\ No newline at end of file |