8 # error This is a userspace-only header, not allowed by the current build.
11 #include <sifteo/array.h>
12 #include <sifteo/asset/loader.h>
13 #include <sifteo/abi.h>
60 static const unsigned LIMIT = _SYS_FS_MAX_OBJECT_KEYS - 1;
63 static const unsigned MAX_SIZE = _SYS_FS_MAX_OBJECT_SIZE;
79 operator const _SYSObjectKey ()
const {
return sys; }
125 int read(
void *buffer,
unsigned bufferSize, _SYSVolumeHandle volume = 0)
const {
126 return _SYS_fs_objectRead(sys, (uint8_t*)buffer, bufferSize, volume);
152 int write(
const void *data,
unsigned dataSize)
const {
153 return _SYS_fs_objectWrite(sys, (
const uint8_t*)data, dataSize);
167 template <
typename T>
168 int read(T &buffer, _SYSVolumeHandle volume = 0)
const {
169 return read((
void*) &buffer,
sizeof buffer, volume);
173 template <
typename T>
174 int readObject(T &buffer, _SYSVolumeHandle volume = 0)
const {
175 return read((
void*) &buffer,
sizeof buffer, volume);
184 template <
typename T>
186 return write((
const void*) &buffer,
sizeof buffer);
190 template <
typename T>
192 return write((
const void*) &buffer,
sizeof buffer);
220 _SYSVolumeHandle sys;
235 operator const _SYSVolumeHandle ()
const {
return sys; }
242 template <
unsigned T>
245 volumes.
setCount(_SYS_fs_listVolumes(volType, &volumes.
begin()->sys,
281 return (_SYSVolumeHandle) _SYS_fs_runningVolume();
296 return (_SYSVolumeHandle) _SYS_fs_previousVolume();
337 void debugInstanceCounter(
int delta) {
339 static int counter = 0;
347 typedef _SYSUUID UUID;
348 typedef _SYSMetadataCubeRange CubeRange;
350 static const unsigned MAX_BOOTSTRAP_GROUPS = _SYS_MAX_METADATA_ITEM_BYTES /
sizeof(_SYSMetadataBootAsset);
364 : vol(0), offset(0) {
365 debugInstanceCounter(1);
375 debugInstanceCounter(1);
381 debugInstanceCounter(-1);
395 if (this->vol != vol) {
397 offset = _SYS_elf_map(vol);
420 void *
metadata(
unsigned key,
unsigned minSize,
unsigned *actualSize)
const {
421 return _SYS_elf_metadata(vol, key, minSize, actualSize);
439 template <
typename T>
441 return reinterpret_cast<const T*
>(
metadata(key,
sizeof(T), actualSize));
452 template <
typename T>
454 return reinterpret_cast<T*
>(
translate(reinterpret_cast<uint32_t>(va)));
472 const char *
title(
const char *placeholder =
"(untitled)")
const {
473 const char *p = metadata<char>(_SYS_METADATA_TITLE_STR);
474 return p ? p : placeholder;
483 const char *
package(
const char *placeholder =
"(none)")
const {
484 const char *p = metadata<char>(_SYS_METADATA_PACKAGE_STR);
485 return p ? p : placeholder;
494 const char *
version(
const char *placeholder =
"(none)")
const {
495 const char *p = metadata<char>(_SYS_METADATA_VERSION_STR);
496 return p ? p : placeholder;
505 const UUID *p = metadata<UUID>(_SYS_METADATA_UUID);
507 return p ? p : &zero;
546 group.sys.pHdr =
translate(meta->groupHdr);
549 image.sys.pAssetGroup =
reinterpret_cast<uint32_t
>(&group);
550 image.sys.width = meta->width;
551 image.sys.height = meta->height;
552 image.sys.frames = meta->frames;
553 image.sys.format = meta->format;
554 image.sys.pData =
translate(meta->pData);
564 auto vec = metadata<_SYSMetadataBootAsset>(_SYS_METADATA_BOOT_ASSET, &actual);
568 unsigned count = actual /
sizeof *
vec;
569 for (
unsigned i = 0; i != count; ++i) {
594 _SYSFilesystemInfo sys;
603 _SYS_fs_info(&sys,
sizeof sys);
618 return sys.freeUnits;
623 return sys.freeUnits * sys.unitSize;
628 return sys.totalUnits;
633 return sys.totalUnits * sys.unitSize;
644 return sys.systemUnits;
649 return sys.systemUnits * sys.unitSize;
654 return sys.launcherElfUnits;
659 return sys.launcherElfUnits * sys.unitSize;
664 return sys.launcherObjUnits;
669 return sys.launcherObjUnits * sys.unitSize;
674 return sys.gameElfUnits;
679 return sys.gameElfUnits * sys.unitSize;
684 return sys.gameObjUnits;
689 return sys.gameObjUnits * sys.unitSize;
694 return sys.selfElfUnits;
699 return sys.selfElfUnits * sys.unitSize;
704 return sys.selfObjUnits;
709 return sys.selfObjUnits * sys.unitSize;