blob: 5958fb96a1f2c27f3c5da73220ea83ff4805e7ea [file] [view]
---
layout: doc
title: "Starboard Module Reference: system.h"
---
Defines a broad set of APIs that allow the client application to query build and
runtime properties of the enclosing system.
## Macros ##
### kSbSystemPlatformErrorInvalid ###
Well-defined value for an invalid `SbSystemPlatformError`.
## Enums ##
### SbSystemCapabilityId ###
Runtime capabilities are boolean properties of a platform that can't be
determined at compile-time. They may vary from device to device, but they will
not change over the course of a single execution. They often specify particular
behavior of other APIs within the bounds of their operating range.
#### Values ####
* `kSbSystemCapabilityReversedEnterAndBack`
Whether this system has reversed Enter and Back keys.
* `kSbSystemCapabilityCanQueryGPUMemoryStats`
Whether this system has the ability to report on GPU memory usage. If (and
only if) a system has this capability will SbSystemGetTotalGPUMemory() and
SbSystemGetUsedGPUMemory() be valid to call.
* `kSbSystemCapabilitySetsInputTimestamp`
Whether this system sets the `timestamp` field of SbInputData . If the
system does not set this field, then it will automatically be set; however,
the relative time between input events likely will not be preserved, so
time-related calculations (e.g. velocity for move events) will be incorrect.
### SbSystemConnectionType ###
Enumeration of network connection types.
#### Values ####
* `kSbSystemConnectionTypeWired`
The system is on a wired connection.
* `kSbSystemConnectionTypeWireless`
The system is on a wireless connection.
* `kSbSystemConnectionTypeUnknown`
The system connection type is unknown.
### SbSystemDeviceType ###
Enumeration of device types.
#### Values ####
* `kSbSystemDeviceTypeBlueRayDiskPlayer`
Blue-ray Disc Player (BDP).
* `kSbSystemDeviceTypeGameConsole`
A relatively high-powered TV device used primarily for playing games.
* `kSbSystemDeviceTypeOverTheTopBox`
Over the top (OTT) devices stream content via the Internet over another type
of network, e.g. cable or satellite.
* `kSbSystemDeviceTypeSetTopBox`
Set top boxes (STBs) stream content primarily over cable or satellite. Some
STBs can also stream OTT content via the Internet.
* `kSbSystemDeviceTypeTV`
A Smart TV is a TV that can directly run applications that stream OTT
content via the Internet.
* `kSbSystemDeviceTypeDesktopPC`
Desktop PC.
* `kSbSystemDeviceTypeAndroidTV`
An Android TV Device.
* `kSbSystemDeviceTypeUnknown`
Unknown device.
### SbSystemPathId ###
Enumeration of special paths that the platform can define.
#### Values ####
* `kSbSystemPathContentDirectory`
Path to where the local content files that ship with the binary are
available.
* `kSbSystemPathCacheDirectory`
Path to the directory that can be used as a local file cache, if available.
* `kSbSystemPathDebugOutputDirectory`
Path to the directory where debug output (e.g. logs, trace output,
screenshots) can be written into.
* `kSbSystemPathFontDirectory`
Path to a directory where system font files can be found. Should only be
specified on platforms that provide fonts usable by Starboard applications.
* `kSbSystemPathFontConfigurationDirectory`
Path to a directory where system font configuration metadata can be found.
May be the same directory as `kSbSystemPathFontDirectory`, but not
necessarily. Should only be specified on platforms that provide fonts usable
by Starboard applications.
* `kSbSystemPathTempDirectory`
Path to a directory where temporary files can be written.
* `kSbSystemPathTestOutputDirectory`
Path to a directory where test results can be written.
* `kSbSystemPathExecutableFile`
Full path to the executable file.
### SbSystemPlatformErrorResponse ###
Possible responses for `SbSystemPlatformErrorCallback`.
#### Values ####
* `kSbSystemPlatformErrorResponsePositive`
* `kSbSystemPlatformErrorResponseNegative`
* `kSbSystemPlatformErrorResponseCancel`
### SbSystemPlatformErrorType ###
Enumeration of possible values for the `type` parameter passed to the
`SbSystemRaisePlatformError` function.
#### Values ####
* `kSbSystemPlatformErrorTypeConnectionError`
Cobalt received a network connection error, or a network disconnection
event. If the `response` passed to `SbSystemPlatformErrorCallback` is
`kSbSystemPlatformErrorResponsePositive` then the request should be retried,
otherwise the app should be stopped.
### SbSystemPropertyId ###
System properties that can be queried for. Many of these are used in User-Agent
string generation.
#### Values ####
* `kSbSystemPropertyCertificationScope`
The certification scope that identifies a group of devices.
* `kSbSystemPropertyBase64EncodedCertificationSecret`
The HMAC-SHA256 base64 encoded symmetric key used to sign a subset of the
query parameters from the application startup URL.
* `kSbSystemPropertyChipsetModelNumber`
The full model number of the main platform chipset, including any vendor-
specific prefixes.
* `kSbSystemPropertyFirmwareVersion`
The production firmware version number which the device is currently
running.
* `kSbSystemPropertyFriendlyName`
A friendly name for this actual device. It may include user-personalization
like "Upstairs Bedroom." It may be displayed to users as part of some kind
of device selection (e.g. in-app DIAL).
* `kSbSystemPropertyManufacturerName`
A deprecated alias for `kSbSystemPropertyBrandName`.
* `kSbSystemPropertyBrandName`
The name of the brand under which the device is being sold.
* `kSbSystemPropertyModelName`
The final production model number of the device.
* `kSbSystemPropertyModelYear`
The year the device was launched, e.g. "2016".
* `kSbSystemPropertyNetworkOperatorName`
The name of the network operator that owns the target device, if applicable.
* `kSbSystemPropertyPlatformName`
The name of the operating system and platform, suitable for inclusion in a
User-Agent, say.
* `kSbSystemPropertySpeechApiKey`
The Google Speech API key. The platform manufacturer is responsible for
registering a Google Speech API key for their products. In the API Console (
[http://developers.google.com/console](http://developers.google.com/console)
), you can enable the Speech APIs and generate a Speech API key.
* `kSbSystemPropertyUserAgentAuxField`
A field that, if available, is appended to the user agent
## Typedefs ##
### SbSystemComparator ###
Pointer to a function to compare two items. The return value uses standard
`*cmp` semantics:
* `< 0` if `a` is less than `b`
* `0` if the two items are equal
* `> 1` if `a` is greater than `b`
`a`: The first value to compare. `b`: The second value to compare.
#### Definition ####
```
typedef int(* SbSystemComparator) (const void *a, const void *b)
```
### SbSystemError ###
A type that can represent a system error code across all Starboard platforms.
#### Definition ####
```
typedef int SbSystemError
```
### SbSystemPlatformError ###
Opaque handle returned by `SbSystemRaisePlatformError` that can be passed to
`SbSystemClearPlatformError`.
#### Definition ####
```
typedef SbSystemPlatformErrorPrivate* SbSystemPlatformError
```
### SbSystemPlatformErrorCallback ###
Type of callback function that may be called in response to an error
notification from `SbSystemRaisePlatformError`. `response` is a code to indicate
the user's response, e.g. if the platform raised a dialog to notify the user of
the error. `user_data` is the opaque pointer that was passed to the call to
`SbSystemRaisePlatformError`.
#### Definition ####
```
typedef void(* SbSystemPlatformErrorCallback) (SbSystemPlatformErrorResponse response, void *user_data)
```
## Functions ##
### SbSystemBinarySearch ###
Binary searches a sorted table `base` of `element_count` objects, each element
`element_width` bytes in size for an element that `comparator` compares equal to
`key`.
This function is meant to be a drop-in replacement for `bsearch`.
`key`: The key to search for in the table. `base`: The sorted table of elements
to be searched. `element_count`: The number of elements in the table.
`element_width`: The size, in bytes, of each element in the table. `comparator`:
A value that indicates how the element in the table should compare to the
specified `key`.
#### Declaration ####
```
void* SbSystemBinarySearch(const void *key, const void *base, size_t element_count, size_t element_width, SbSystemComparator comparator)
```
### SbSystemBreakIntoDebugger ###
Breaks the current program into the debugger, if a debugger is attached. If a
debugger is not attached, this function aborts the program.
#### Declaration ####
```
SB_NORETURN void SbSystemBreakIntoDebugger()
```
### SbSystemClearLastError ###
Clears the last error set by a Starboard call in the current thread.
#### Declaration ####
```
void SbSystemClearLastError()
```
### SbSystemClearPlatformError ###
Clears a platform error that was previously raised by a call to
`SbSystemRaisePlatformError`. The platform may use this, for example, to close a
dialog that was opened in response to the error.
`handle`: The platform error to be cleared.
#### Declaration ####
```
void SbSystemClearPlatformError(SbSystemPlatformError handle)
```
### SbSystemGetConnectionType ###
Returns the device's current network connection type.
#### Declaration ####
```
SbSystemConnectionType SbSystemGetConnectionType()
```
### SbSystemGetDeviceType ###
Returns the type of the device.
#### Declaration ####
```
SbSystemDeviceType SbSystemGetDeviceType()
```
### SbSystemGetErrorString ###
Generates a human-readable string for an error. The return value specifies the
total desired length of the string.
`error`: The error for which a human-readable string is generated. `out_string`:
The generated string. This value may be null, and it is always terminated with a
null byte. `string_length`: The maximum length of the error string.
#### Declaration ####
```
int SbSystemGetErrorString(SbSystemError error, char *out_string, int string_length)
```
### SbSystemGetLastError ###
Gets the last platform-specific error code produced by any Starboard call in the
current thread for diagnostic purposes. Semantic reactions to Starboard function
call results should be modeled explicitly.
#### Declaration ####
```
SbSystemError SbSystemGetLastError()
```
### SbSystemGetLocaleId ###
Gets the system's current POSIX-style Locale ID. The locale represents the
location, language, and cultural conventions that the system wants to use, which
affects which text is displayed to the user as well as how displayed numbers,
dates, currency, and similar values are formatted.
At its simplest, the locale ID can just be a BCP 47 language code, like `en_US`.
Currently, POSIX also wants to include the encoding as in `en_US.UTF8`. POSIX
also allows a couple very bare-bones locales, like "C" or "POSIX", but they are
not supported here. POSIX also supports different locale settings for a few
different purposes, but Starboard only exposes one locale at a time.
RFC 5646 describes BCP 47 language codes: [https://tools.ietf.org/html/bcp47](https://tools.ietf.org/html/bcp47)
For more information than you probably want about POSIX locales, see: [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html)
#### Declaration ####
```
const char* SbSystemGetLocaleId()
```
### SbSystemGetNumberOfProcessors ###
Returns the number of processor cores available to this application. If the
process is sandboxed to a subset of the physical cores, the function returns
that sandboxed limit.
#### Declaration ####
```
int SbSystemGetNumberOfProcessors()
```
### SbSystemGetPath ###
Retrieves the platform-defined system path specified by `path_id` and places it
as a zero-terminated string into the user-allocated `out_path` unless it is
longer than `path_length` - 1. This implementation must be thread-safe.
This function returns `true` if the path is retrieved successfully. It returns
`false` under any of the following conditions and, in any such case, `out_path`
is not changed:
* `path_id` is invalid for this platform
* `path_length` is too short for the given result
* `out_path` is NULL
`path_id`: The system path to be retrieved. `out_path`: The platform-defined
system path specified by `path_id`. `path_length`: The length of the system
path.
#### Declaration ####
```
bool SbSystemGetPath(SbSystemPathId path_id, char *out_path, int path_length)
```
### SbSystemGetProperty ###
Retrieves the platform-defined system property specified by `property_id` and
places its value as a zero-terminated string into the user-allocated `out_value`
unless it is longer than `value_length` - 1. This implementation must be thread-
safe.
This function returns `true` if the property is retrieved successfully. It
returns `false` under any of the following conditions and, in any such case,
`out_value` is not changed:
* `property_id` is invalid for this platform
* `value_length` is too short for the given result
* `out_value` is NULL
`property_id`: The system path to be retrieved. `out_value`: The platform-
defined system property specified by `property_id`. `value_length`: The length
of the system property.
#### Declaration ####
```
bool SbSystemGetProperty(SbSystemPropertyId property_id, char *out_value, int value_length)
```
### SbSystemGetRandomData ###
A cryptographically secure random number generator that produces an arbitrary,
non-negative number of `buffer_size` random, non-negative bytes. The generated
number is placed in `out_buffer`. This function does not require manual seeding.
`out_buffer`: A pointer for the generated random number. This value must not be
null. `buffer_size`: The size of the random number, in bytes.
#### Declaration ####
```
void SbSystemGetRandomData(void *out_buffer, int buffer_size)
```
### SbSystemGetRandomUInt64 ###
A cryptographically secure random number generator that gets 64 random bits and
returns them as an `uint64_t`. This function does not require manual seeding.
#### Declaration ####
```
uint64_t SbSystemGetRandomUInt64()
```
### SbSystemGetStack ###
Places up to `stack_size` instruction pointer addresses of the current execution
stack into `out_stack`. The return value specifies the number of entries added.
The returned stack frames are in "downward" order from the calling frame toward
the entry point of the thread. So, if all the stack frames do not fit, the ones
truncated will be the less interesting ones toward the thread entry point.
This function is used in crash signal handlers and, therefore, it must be async-
signal-safe on platforms that support signals. The following document discusses
what it means to be async-signal-safe on POSIX: [http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html#tag_02_04_03](http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html#tag_02_04_03)
`out_stack`: A non-NULL array of `void *` of at least `stack_size` entries.
`stack_size`: The maximum number of instruction pointer addresses to be placed
into `out_stack` from the current execution stack.
#### Declaration ####
```
int SbSystemGetStack(void **out_stack, int stack_size)
```
### SbSystemGetTotalCPUMemory ###
Returns the total CPU memory (in bytes) potentially available to this
application. If the process is sandboxed to a maximum allowable limit, the
function returns the lesser of the physical and sandbox limits.
#### Declaration ####
```
int64_t SbSystemGetTotalCPUMemory()
```
### SbSystemGetTotalGPUMemory ###
Returns the total GPU memory (in bytes) available for use by this application.
This function may only be called the return value for calls to
SbSystemHasCapability(kSbSystemCapabilityCanQueryGPUMemoryStats) is `true`.
#### Declaration ####
```
int64_t SbSystemGetTotalGPUMemory()
```
### SbSystemGetUsedCPUMemory ###
Returns the total physical CPU memory (in bytes) used by this application. This
value should always be less than (or, in particularly exciting situations, equal
to) SbSystemGetTotalCPUMemory().
#### Declaration ####
```
int64_t SbSystemGetUsedCPUMemory()
```
### SbSystemGetUsedGPUMemory ###
Returns the current amount of GPU memory (in bytes) that is currently being used
by this application. This function may only be called if the return value for
calls to SbSystemHasCapability(kSbSystemCapabilityCanQueryGPUMemoryStats) is
`true`.
#### Declaration ####
```
int64_t SbSystemGetUsedGPUMemory()
```
### SbSystemHasCapability ###
Returns whether the platform has the runtime capability specified by
`capability_id`. Returns false for any unknown capabilities. This implementation
must be thread-safe.
`capability_id`: The runtime capability to check.
#### Declaration ####
```
bool SbSystemHasCapability(SbSystemCapabilityId capability_id)
```
### SbSystemHideSplashScreen ###
Hides the system splash screen on systems that support a splash screen that is
displayed while the application is loading. This function may be called from any
thread and must be idempotent.
#### Declaration ####
```
void SbSystemHideSplashScreen()
```
### SbSystemIsDebuggerAttached ###
Attempts to determine whether the current program is running inside or attached
to a debugger. The function returns `false` if neither of those cases is true.
#### Declaration ####
```
bool SbSystemIsDebuggerAttached()
```
### SbSystemPlatformErrorIsValid ###
Checks whether a `SbSystemPlatformError` is valid.
#### Declaration ####
```
static bool SbSystemPlatformErrorIsValid(SbSystemPlatformError handle)
```
### SbSystemRaisePlatformError ###
Cobalt calls this function to notify the platform that an error has occurred in
the application that the platform may need to handle. The platform is expected
to then notify the user of the error and to provide a means for any required
interaction, such as by showing a dialog.
The return value is a handle that may be used in a subsequent call to
`SbSystemClearPlatformError`. For example, the handle could be used to
programatically dismiss a dialog that was raised in response to the error. The
lifetime of the object referenced by the handle is until the user reacts to the
error or the error is dismissed by a call to SbSystemClearPlatformError,
whichever happens first. Note that if the platform cannot respond to the error,
then this function should return `kSbSystemPlatformErrorInvalid`.
This function may be called from any thread, and it is the platform's
responsibility to decide how to handle an error received while a previous error
is still pending. If that platform can only handle one error at a time, then it
may queue the second error or ignore it by returning
`kSbSystemPlatformErrorInvalid`.
`type`: An error type, from the SbSystemPlatformErrorType enum, that defines the
error. `callback`: A function that may be called by the platform to let the
caller know that the user has reacted to the error. `user_data`: An opaque
pointer that the platform should pass as an argument to the callback function,
if it is called.
#### Declaration ####
```
SbSystemPlatformError SbSystemRaisePlatformError(SbSystemPlatformErrorType type, SbSystemPlatformErrorCallback callback, void *user_data)
```
### SbSystemRequestPause ###
Requests that the application move into the Paused state at the next convenient
point. This should roughly correspond to "unfocused application" in a
traditional window manager, where the application may be partially visible.
This function eventually causes a `kSbEventTypePause` event to be dispatched to
the application. Before the `kSbEventTypePause` event is dispatched, some work
may continue to be done, and unrelated system events may be dispatched.
#### Declaration ####
```
void SbSystemRequestPause()
```
### SbSystemRequestStop ###
Requests that the application be terminated gracefully at the next convenient
point. In the meantime, some work may continue to be done, and unrelated system
events may be dispatched. This function eventually causes a `kSbEventTypeStop`
event to be dispatched to the application. When the process finally terminates,
it returns `error_level`, if that has any meaning on the current platform.
`error_level`: An integer that serves as the return value for the process that
is eventually terminated as a result of a call to this function.
#### Declaration ####
```
void SbSystemRequestStop(int error_level)
```
### SbSystemRequestSuspend ###
Requests that the application move into the Suspended state at the next
convenient point. This should roughly correspond to "minimization" in a
traditional window manager, where the application is no longer visible.
This function eventually causes a `kSbEventTypeSuspend` event to be dispatched
to the application. Before the `kSbEventTypeSuspend` event is dispatched, some
work may continue to be done, and unrelated system events may be dispatched.
In the Suspended state, the application will be resident, but probably not
running. The expectation is that an external system event will bring the
application out of the Suspended state.
#### Declaration ####
```
void SbSystemRequestSuspend()
```
### SbSystemRequestUnpause ###
Requests that the application move into the Started state at the next convenient
point. This should roughly correspond to a "focused application" in a
traditional window manager, where the application is fully visible and the
primary receiver of input events.
This function eventually causes a `kSbEventTypeUnpause` event to be dispatched
to the application. Before `kSbEventTypeUnpause` is dispatched, some work may
continue to be done, and unrelated system events may be dispatched.
#### Declaration ####
```
void SbSystemRequestUnpause()
```
### SbSystemSort ###
Sorts an array of elements `base`, with `element_count` elements of
`element_width` bytes each, using `comparator` as the comparison function.
This function is meant to be a drop-in replacement for `qsort`.
`base`: The array of elements to be sorted. `element_count`: The number of
elements in the array. `element_width`: The size, in bytes, of each element in
the array. `comparator`: A value that indicates how the array should be sorted.
#### Declaration ####
```
void SbSystemSort(void *base, size_t element_count, size_t element_width, SbSystemComparator comparator)
```
### SbSystemSupportsResume ###
Returns false if the platform doesn't need resume after suspend support. In such
case Cobalt will free up the resource it retains for resume after suspend. Note
that if this function returns false, the Starboard implementation cannot send
kSbEventTypeResume to the event handler. The return value of this function
cannot change over the life time of the application.
#### Declaration ####
```
bool SbSystemSupportsResume()
```
### SbSystemSymbolize ###
Looks up `address` as an instruction pointer and places up to (`buffer_size -
1`) characters of the symbol associated with it in `out_buffer`, which must not
be NULL. `out_buffer` will be NULL-terminated.
The return value indicates whether the function found a reasonable match for
`address`. If the return value is `false`, then `out_buffer` is not modified.
This function is used in crash signal handlers and, therefore, it must be async-
signal-safe on platforms that support signals.
#### Declaration ####
```
bool SbSystemSymbolize(const void *address, char *out_buffer, int buffer_size)
```