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; }
119 int read(
void *buffer,
unsigned bufferSize, _SYSVolumeHandle volume = 0)
const {
120 return _SYS_fs_objectRead(sys, (uint8_t*)buffer, bufferSize, volume);
140 int write(
const void *data,
unsigned dataSize)
const {
141 return _SYS_fs_objectWrite(sys, (
const uint8_t*)data, dataSize);
155 template <
typename T>
156 int read(T &buffer, _SYSVolumeHandle volume = 0)
const {
157 return read((
void*) &buffer,
sizeof buffer, volume);
161 template <
typename T>
162 int readObject(T &buffer, _SYSVolumeHandle volume = 0)
const {
163 return read((
void*) &buffer,
sizeof buffer, volume);
172 template <
typename T>
174 return write((
const void*) &buffer,
sizeof buffer);
178 template <
typename T>
180 return write((
const void*) &buffer,
sizeof buffer);
208 _SYSVolumeHandle sys;
223 operator const _SYSVolumeHandle ()
const {
return sys; }
230 template <
unsigned T>
233 volumes.
setCount(_SYS_fs_listVolumes(volType, &volumes.
begin()->sys,
269 return (_SYSVolumeHandle) _SYS_fs_runningVolume();
284 return (_SYSVolumeHandle) _SYS_fs_previousVolume();
325 void debugInstanceCounter(
int delta) {
327 static int counter = 0;
335 typedef _SYSUUID UUID;
336 typedef _SYSMetadataCubeRange CubeRange;
338 static const unsigned MAX_BOOTSTRAP_GROUPS = _SYS_MAX_METADATA_ITEM_BYTES /
sizeof(_SYSMetadataBootAsset);
352 : vol(0), offset(0) {
353 debugInstanceCounter(1);
363 debugInstanceCounter(1);
369 debugInstanceCounter(-1);
383 if (this->vol != vol) {
385 offset = _SYS_elf_map(vol);
408 void *
metadata(
unsigned key,
unsigned minSize,
unsigned *actualSize)
const {
409 return _SYS_elf_metadata(vol, key, minSize, actualSize);
427 template <
typename T>
429 return reinterpret_cast<const T*
>(
metadata(key,
sizeof(T), actualSize));
440 template <
typename T>
442 return reinterpret_cast<T*
>(
translate(reinterpret_cast<uint32_t>(va)));
460 const char *
title(
const char *placeholder =
"(untitled)")
const {
461 const char *p = metadata<char>(_SYS_METADATA_TITLE_STR);
462 return p ? p : placeholder;
471 const char *
package(
const char *placeholder =
"(none)")
const {
472 const char *p = metadata<char>(_SYS_METADATA_PACKAGE_STR);
473 return p ? p : placeholder;
482 const char *
version(
const char *placeholder =
"(none)")
const {
483 const char *p = metadata<char>(_SYS_METADATA_VERSION_STR);
484 return p ? p : placeholder;
493 const UUID *p = metadata<UUID>(_SYS_METADATA_UUID);
495 return p ? p : &zero;
534 group.sys.pHdr =
translate(meta->groupHdr);
537 image.sys.pAssetGroup =
reinterpret_cast<uint32_t
>(&group);
538 image.sys.width = meta->width;
539 image.sys.height = meta->height;
540 image.sys.frames = meta->frames;
541 image.sys.format = meta->format;
542 image.sys.pData =
translate(meta->pData);
552 auto vec = metadata<_SYSMetadataBootAsset>(_SYS_METADATA_BOOT_ASSET, &actual);
556 unsigned count = actual /
sizeof *
vec;
557 for (
unsigned i = 0; i != count; ++i) {
582 _SYSFilesystemInfo sys;
591 _SYS_fs_info(&sys,
sizeof sys);
606 return sys.freeUnits;
611 return sys.freeUnits * sys.unitSize;
616 return sys.totalUnits;
621 return sys.totalUnits * sys.unitSize;
632 return sys.systemUnits;
637 return sys.systemUnits * sys.unitSize;
642 return sys.launcherElfUnits;
647 return sys.launcherElfUnits * sys.unitSize;
652 return sys.launcherObjUnits;
657 return sys.launcherObjUnits * sys.unitSize;
662 return sys.gameElfUnits;
667 return sys.gameElfUnits * sys.unitSize;
672 return sys.gameObjUnits;
677 return sys.gameObjUnits * sys.unitSize;
682 return sys.selfElfUnits;
687 return sys.selfElfUnits * sys.unitSize;
692 return sys.selfObjUnits;
697 return sys.selfObjUnits * sys.unitSize;